Для четырех произвольных чисел, введенных с клавиатуры, отобразить соответствующие результаты

Обновлено: 20.11.2024

Int — это число из множества ℤ = <. -2, -1, 0, 1, 2, . >.

Синтаксис

int может быть указан в десятичной (по основанию 10), шестнадцатеричной (по основанию 16), восьмеричной (по основанию 8) или двоичной (по основанию 2) записи. Оператор отрицания можно использовать для обозначения отрицательного целого числа.

Чтобы использовать восьмеричное представление, поставьте перед числом 0 (ноль). Начиная с PHP 8.1.0, восьмеричной нотации также может предшествовать 0o или 0O. Чтобы использовать шестнадцатеричное представление, перед числом следует поставить 0x. Чтобы использовать двоичную запись, перед числом следует поставить 0b .

Начиная с PHP 7.4.0, целочисленные литералы могут содержать символы подчеркивания ( _ ) между цифрами для лучшей читаемости литералов. Эти символы подчеркивания удаляются сканером PHP.

= 1234 ; // десятичное число
$a = 0123 ; // восьмеричное число (эквивалентно десятичному 83)
$a = 0o123 ; // восьмеричное число (начиная с PHP 8.1.0)
$a = 0x1A ; // шестнадцатеричное число (эквивалентно десятичному числу 26)
$a = 0b11111111 ; // двоичное число (эквивалентно десятичному числу 255)
$a = 1_234_567 ; // десятичное число (начиная с PHP 7.4.0)
?>

Формально структура для литералов int такая же, как и в PHP 7.4.0 (ранее символы подчеркивания не допускались):

Размер int зависит от платформы, хотя обычно используется максимальное значение около двух миллиардов (это 32 бита со знаком). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые числа. размер int можно определить с помощью константы PHP_INT_SIZE, максимальное значение — с помощью константы PHP_INT_MAX, а минимальное значение — с помощью константы PHP_INT_MIN.

Целочисленное переполнение

Если PHP встретит число, выходящее за пределы типа int, оно будет интерпретировано как число с плавающей запятой. Кроме того, операция, результатом которой является число, выходящее за пределы типа int, вместо этого вернет число с плавающей запятой.

= 2147483647 ;
var_dump ($large_number); // целое (2147483647)

$large_number = 2147483648 ;
var_dump ($large_number); // число с плавающей запятой(2147483648)

миллион долларов = 1000000 ;
$large_number = 50000 * $миллион;
var_dump ($large_number); // число с плавающей запятой(50000000000)
?>

= 9223372036854775807 ;
var_dump ($large_number); // интервал(9223372036854775807)

$large_number = 9223372036854775808 ;
var_dump ($large_number); // число с плавающей запятой(9.2233720368548E+18)

миллион долларов = 1000000 ;
$large_number = 50000000000000 * $миллион;
var_dump ($large_number); // float(5.0E+19)
?>

В PHP нет оператора деления int, для этого используйте функцию intdiv(). 1/2 дает поплавок 0,5 . Значение может быть приведено к типу int, чтобы округлить его до нуля, или функция round() обеспечивает более точное управление округлением.

( 25/7 ); // float(3.5714285714286)
var_dump ((int) ( 25 / 7 )); // int(3)
var_dump ( round ( 25 / 7 )); // float(4)
?>

Преобразование в целое число

Чтобы явно преобразовать значение в int , используйте приведение типов (int) или (integer). Однако в большинстве случаев приведение не требуется, поскольку значение будет автоматически преобразовано, если оператору, функции или управляющей структуре требуется аргумент типа int. Значение также можно преобразовать в int с помощью функции intval().

Если ресурс преобразуется в тип int , результатом будет уникальный номер ресурса, присвоенный ресурсу PHP во время выполнения.

Из логических значений

false даст 0 (ноль), а true даст 1 (один).

Из чисел с плавающей запятой

При преобразовании из float в int число будет округлено до нуля.

Если число с плавающей запятой выходит за пределы int (обычно +/- 2,15e+9 = 2^31 на 32-разрядных платформах и +/- 9,22e+18 = 2^63 на 64-разрядных платформах), результат не определен, так как у числа с плавающей запятой недостаточно точности, чтобы дать точный результат int. Никакого предупреждения, даже уведомления не будет, когда это произойдет!

Примечание.

NaN и Infinity всегда будут равны нулю при преобразовании в int .

Никогда не приводите неизвестную дробь к типу int , так как иногда это может привести к неожиданным результатам.

Из строк

Если строка является числовой или ведущей цифрой, она преобразуется в соответствующее целочисленное значение, в противном случае она преобразуется в ноль ( 0 ).

От NULL

null всегда преобразуется в ноль ( 0 ).

Из других типов

Поведение преобразования в int не определено для других типов. не полагайтесь на наблюдаемое поведение, так как оно может измениться без предварительного уведомления.

Примечания, внесенные пользователями 25 примечаний

Ноль в начале числового литерала означает "восьмерично". Но не запутайтесь: начальный нуль в строке не имеет значения. Таким образом:
$x = 0123; // 83
$y = "0123" + 0 // 123

Не забывайте о переполнении типа float to int

// Вы могли ожидать эти
var_dump ( 0x7ffffffffffffffff ); // int(9223372036854775807)
var_dump ( 0x7ffffffffffffffff + 1 ); // float(9.2233720368548E+18)
var_dump((int)( 0x7ffffffffffffffff + 1 )); // int(9223372036854775807)
var_dump (0x7ffffffffffffffff + 1 > 0); // bool(true)
var_dump ((int)( 0x7ffffffffffffffff + 1 ) > 0 ); // bool(true)
var_dump ((int) '9223372036854775807' ); // int(9223372036854775807)
var_dump ( 9223372036854775808 ); // float(9.2233720368548E+18)
var_dump ((int) '9223372036854775808' ); // int(9223372036854775807)
var_dump ((int) 9223372036854775808 ); // интервал(9223372036854775807)

// Но на самом деле ему нравятся эти
var_dump ( 0x7ffffffffffffffff ); // int(9223372036854775807)
var_dump ( 0x7ffffffffffffffff + 1 ); // float(9.2233720368548E+18)
var_dump((int)( 0x7ffffffffffffffff + 1 )); // int(-9223372036854775808) var_dump (0x7ffffffffffffffff + 1 > 0); // bool(true)
var_dump ((int)( 0x7ffffffffffffffff + 1 ) > 0 ); // bool(false) var_dump ((int) '9223372036854775807'); // int(9223372036854775807)
var_dump ( 9223372036854775808 ); // float(9.2233720368548E+18)
var_dump ((int) '9223372036854775808' ); // int(9223372036854775807)
var_dump ((int) 9223372036854775808 ); // int(-9223372036854775808) ?>

Эти переполнения опасны, когда вы пытаетесь сравнить их с нулем или вычесть из другого значения (например, денег).

Вот несколько приемов преобразования IP-адреса с точками в LONG int и наоборот. Это очень полезно, потому что доступ к IP-адресу в таблице базы данных намного быстрее, если он хранится как BIGINT, а не как символы.

IP для BIGINT:
= взорваться ( '.' , $_SERVER [ 'REMOTE_ADDR' ]);
$ip = $ipArr [ 0 ] * 0x1000000
+ $ipArr [ 1 ] * 0x10000
+ $ipArr [ 2 ] * 0x100
+ $ipArr [ 3 ]
;
?>

IP как BIGINT читается из БД обратно в точечную форму:

Имейте в виду, что целочисленные операторы PHP имеют тип INTEGER, а не длинные. Также, так как в PHP нет целочисленного деления, мы экономим пару этажей S-L-O-W (

), выполняя битовые сдвиги. Мы должны использовать floor(/) для $ipArr[0], потому что хотя $ipVal сохраняется как длинное значение, $ipVal >> 24 будет работать с усеченным целым значением $ipVal! Однако $ipVint — хорошее целое число, поэтому
мы можем наслаждаться битовыми сдвигами.

= $row ['IP-адрес_клиента'];
$ipArr = array( 0 =>
этаж ( $ipVal / 0x1000000 ) );
$ipVint = $ipVal -($ipArr [0]* 0x1000000); // для ясности
$ipArr [ 1 ] = ( $ipVint & 0xFF0000 ) >> 16 ;
$ipArr [ 2 ] = ( $ipVint & 0xFF00 ) >> 8 ;
$ipArr [ 3 ] = $ipVint & 0xFF ;
$ipDotted = взорвать ( '.' , $ipArr );
?>

var_dump((int) "010"); //выводим 10

Первый - восьмеричная запись, поэтому вывод правильный. Но как насчет преобразования «010» в целое число. должно быть также выведено 8 ?
------------------------------------------------------ -----------------------------------
Ответ:

Приведение к целому числу с помощью (int) всегда приводит к базовому значению по умолчанию, равному 10.

Приведение строки к числу таким образом не учитывает множество способов форматирования целочисленного значения в PHP (начальный ноль для основания 8, начальный "0x" для шестнадцатиричного, начальный "0b" для двоичного основания). Он просто просматривает первые символы в строке и преобразует их в целое число с основанием 10. Ведущие нули будут удалены, потому что они не имеют значения в числовых значениях, поэтому вы получите десятичное значение 10 для (int)"010".

При преобразовании целочисленного значения между основаниями с использованием (int)010 будут учитываться различные способы форматирования целого числа. Начальный ноль, как в 010, означает, что число находится в восьмеричной системе счисления, использование (int)010 преобразует его в десятичное значение 8 по основанию 10.

Это похоже на то, как вы используете 0x10 для записи в шестнадцатеричном формате (с основанием 16). Использование (int)0x10 преобразует это в десятичное значение 16 с основанием 10, тогда как использование (int)"0x10" приведет к десятичному значению 0: поскольку "x" не является числовым значением, все после этого будет игнорироваться. .

Если вы хотите интерпретировать строку "010" как восьмеричное значение, вам нужно указать PHP сделать это. intval("010", 8) будет интерпретировать число с основанием 8 вместо числа по умолчанию с основанием 10, и вы получите десятичное значение 8. Вы также можете использовать octdec("010") для преобразования восьмеричной строки в десятичное значение 8. Другой вариант — использовать base_convert("010", 8, 10) для явного преобразования числа "010" из базы 8 в базу 10, однако эта функция вернет строку "8" вместо целого числа 8.

Приведение строки к целому числу следует той же логике, что и функция intval:

Возвращает целочисленное значение var, используя указанное основание для преобразования (по умолчанию — основание 10).
intval позволяет указать другое основание в качестве второго аргумента, в то время как операция прямого приведения не позволяет, поэтому использование (int) всегда будет рассматривать строку как имеющую основание 10.

php > var_export((int) "010");
10
php > var_export(intval("010"));
10
php > var_export(intval ("010", 8));
8

В этом разделе мы расширяем набор простых абстракций (ввод из командной строки и стандартный вывод), которые мы использовали в качестве интерфейса между нашими Java-программами и внешним миром, включая стандартный ввод, стандартный рисунок и стандартный звук. Стандартный ввод позволяет нам писать программы, которые обрабатывают произвольные объемы ввода и взаимодействуют с нашими программами; стандартная отрисовка позволяет нам работать с графикой; а стандартное аудио добавляет звук.

Взгляд с высоты птичьего полета.

  • Аргументы командной строки. Все наши классы имеют метод main(), который принимает массив String args[] в качестве аргумента. Этот массив представляет собой последовательность аргументов командной строки, которые мы вводим. Если мы хотим, чтобы аргумент был числом, мы должны использовать такой метод, как Integer.parseInt(), чтобы преобразовать его из String в соответствующий тип.
  • Стандартный вывод. Для печати выходных значений в наших программах мы использовали System.out.println(). Java отправляет результаты в абстрактный поток символов, известный как стандартный вывод. По умолчанию операционная система подключает стандартный вывод к окну терминала. Весь вывод наших программ до сих пор появлялся в окне терминала.

RandomSeq.java использует эту модель: он принимает аргумент командной строки n и выводит на стандартный вывод последовательность из n случайных чисел от 0 до 1.

  • Стандартный ввод. Чтение чисел и строк от пользователя.
  • Стандартный рисунок. Графический рисунок.
  • Стандартный звук. Создать звук.

Стандартный вывод.

Методы Java System.out.print() и System.out.println() реализуют базовую стандартную абстракцию вывода, которая нам нужна. Тем не менее, для унифицированной обработки стандартного ввода и стандартного вывода (и для обеспечения некоторых технических улучшений) мы используем аналогичные методы, определенные в нашей библиотеке StdOut:

    Основы форматированной печати. В своей простейшей форме printf() принимает два аргумента. Первый аргумент называется строка формата. Он содержит спецификацию преобразования, которая описывает, как второй аргумент должен быть преобразован в строку для вывода.

Строки формата начинаются с % и заканчиваются однобуквенным кодом преобразования. В следующей таблице приведены наиболее часто используемые коды:

Стандартный ввод.

Наша библиотека StdIn берет данные из стандартного потока ввода, который содержит последовательность значений, разделенных пробелом. Каждое значение является строкой или значением одного из примитивных типов Java. Одной из ключевых особенностей стандартного потока ввода является то, что ваша программа использует значения при их чтении. Как только ваша программа прочитала значение, она не может создать резервную копию и прочитать его снова. Библиотека определяется следующим API:

    Ввод ввода. Когда вы используете команду java для вызова Java-программы из командной строки, вы фактически делаете три вещи: (1) вводите команду, чтобы начать выполнение вашего программа, (2) указание значений аргументов командной строки и (3) начало определения стандартного потока ввода. Строка символов, которую вы вводите в окне терминала после командной строки, является стандартным потоком ввода. Например, AddInts.java принимает аргумент командной строки n, затем считывает n чисел из стандартного ввода, добавляет их и выводит результат на стандартный вывод:

    Перенаправление и конвейер.

    • Перенаправление стандартного вывода в файл. Добавив простую директиву к команде, которая вызывает программу, мы можем перенаправить ее стандартный вывод в файл либо навсегда хранения или для ввода в какую-либо другую программу в более позднее время. Например, команда

    В вашей операционной системе также имеется ряд фильтров. Например, фильтр sort помещает строки стандартного ввода в отсортированном порядке:

    Другим полезным фильтром является more, который считывает данные из стандартного ввода и отображает их в окне терминала по одному экрану за раз.Например, если вы наберете

    Стандартный рисунок.

      Основные команды рисования. Сначала рассмотрим команды рисования:

    Эти методы почти самодокументированы: StdDraw.line(x0, y0, x1, y1) рисует отрезок прямой линии, соединяющий точку (x 0, y0) с точкой (x1, y1). StdDraw.point(x, y) рисует точку с центром в точке (x, y). Масштабом координат по умолчанию является единица квадрата (все координаты x- и y-от 0 до 1). Стандартная реализация отображает холст в окне на экране вашего компьютера с черными линиями и точками на белом фоне.

      Фильтрация данных в стандартный чертеж.PlotFilter.java считывает последовательность точек, заданных координатами (x, y), из стандартного ввода и рисует пятно в каждой точке. Он принимает соглашение о том, что первые четыре числа в стандартном вводе определяют ограничивающую рамку, чтобы можно было масштабировать график.
    • Очистить закадровый холст.
    • Рисовать объекты за пределами экрана
    • Скопируйте закадровый холст на экранный холст.
    • Подождите немного.

    Для поддержки этих шагов StdDraw имеет несколько методов:

    • Очистить закадровый холст белым цветом.
    • Нарисуйте черный шар в новом месте закадрового холста.
    • Скопируйте закадровый холст на экранный холст.
    • Подождите немного.

    Чтобы создать иллюзию движения, BouncingBall.java повторяет эти шаги для всей последовательности положений мяча.

    • Первый пример.MouseFollower.java — это HelloWorld взаимодействия с мышью. Он рисует синий шар с центром в месте расположения мыши. Когда пользователь удерживает кнопку мыши, цвет шарика меняется с синего на голубой.
    • Простой аттрактор.OneSimpleAttractor.java имитирует движение синего шарика, притягивающегося к мыши. Он также учитывает силу сопротивления.
    • Много простых аттракторов.SimpleAttractors.java имитирует движение 20 синих шариков, которые притягиваются к мыши. Он также учитывает силу сопротивления. Когда пользователь нажимает, шарики разлетаются случайным образом.
    • Springs.Springs.java реализует систему Spring.

    Стандартный звук.

    StdAudio — это библиотека, которую можно использовать для воспроизведения звуковых файлов и управления ими. Он позволяет воспроизводить, манипулировать и синтезировать звук.

    Смотреть сейчас Это руководство содержит связанный с ним видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Чтение входных данных и Написание выходных данных в Python

    Чтобы программа была полезной, она обычно должна взаимодействовать с внешним миром, получая входные данные от пользователя и отображая данные о результатах обратно пользователю. В этом руководстве вы узнаете о вводе и выводе Python.

    Ввод может поступать от пользователя непосредственно через клавиатуру или из внешних источников, таких как файлы или базы данных. Выходные данные могут отображаться непосредственно на консоли или в среде IDE, на экране через графический интерфейс пользователя (GUI) или снова во внешнем источнике.

    В предыдущем руководстве этой вводной серии вы:

    • Сравнение различных парадигм, используемых языками программирования для реализации определенной итерации.
    • Узнал об итераторах и итераторах — двух концепциях, лежащих в основе определенной итерации в Python.
    • Связал все вместе, чтобы узнать о циклах for в Python

    К концу этого руководства вы будете знать, как:

    • Принимать пользовательский ввод с клавиатуры с помощью встроенной функции input()
    • Отображение вывода на консоль с помощью встроенной функции print()
    • Форматировать строковые данные с помощью f-строк Python

    Без дальнейших церемоний, давайте приступим!

    Бесплатный бонус: нажмите здесь, чтобы получить памятку по Python и изучить основы Python 3, такие как работа с типами данных, словарями, списками и функциями Python.

    Чтение ввода с клавиатуры

    Программы часто должны получать данные от пользователя, обычно путем ввода с клавиатуры. Один из способов сделать это в Python — использовать input() :

    Функция input() приостанавливает выполнение программы, чтобы пользователь мог ввести строку ввода с клавиатуры. Как только пользователь нажимает клавишу Enter, все введенные символы считываются и возвращаются в виде строки:

    Обратите внимание, что возвращаемая строка не включает новую строку, сгенерированную, когда пользователь нажимает клавишу Enter.

    Если вы включите необязательный

    аргумент, затем функция input() отображает его как подсказку, чтобы пользователь знал, что вводить:

    input() всегда возвращает строку. Если вам нужен числовой тип, вам нужно преобразовать строку в соответствующий тип с помощью встроенной функции int() , float() или complex() :

    В приведенном выше примере выражение число + 100 в строке 3 недопустимо, поскольку число является строкой, а 100 — целым числом. Чтобы избежать этой ошибки, строка 8 преобразовывает число в целое число сразу после сбора пользовательского ввода. Таким образом, к расчетному числу + 100 в строке 10 нужно добавить два целых числа. Благодаря этому вызов print() выполняется успешно.

    Примечание к версии Python. Если вы обнаружите, что работаете с кодом Python 2.x, вы можете столкнуться с небольшой разницей в функциях ввода между версиями Python 2 и 3.

    raw_input() в Python 2 считывает ввод с клавиатуры и возвращает его. raw_input() в Python 2 ведет себя точно так же, как input() в Python 3, как описано выше.

    Но в Python 2 также есть функция input() . В Python 2 функция input() считывает ввод с клавиатуры, анализирует и оценивает его как выражение Python и возвращает результирующее значение.

    В Python 3 нет ни одной функции, которая делала бы то же самое, что и input() в Python 2. Вы можете имитировать эффект в Python 3 с помощью выражения eval(input()) . Однако это представляет собой угрозу безопасности, поскольку позволяет пользователям запускать произвольный, потенциально вредоносный код.

    Для получения дополнительной информации о eval() и связанных с ним потенциальных угрозах безопасности ознакомьтесь с Python eval(): динамическое вычисление выражений.

    С помощью input() вы можете собирать данные от своих пользователей. Но что, если вы хотите показать им какие-либо результаты, рассчитанные вашей программой? Далее вы узнаете, как отображать выходные данные для пользователей в консоли.

    Запись вывода в консоль

    Помимо получения данных от пользователя, программа также обычно должна предоставлять данные обратно пользователю. Вы можете отображать данные программы на консоли в Python с помощью print() .

    Чтобы отобразить объекты на консоли, передайте их в виде списка аргументов, разделенных запятыми, функции print() .

    print( , . )

    Отображает строковое представление каждого из них на консоль. (Документация)

    По умолчанию print() разделяет объекты одним пробелом и добавляет новую строку в конец вывода:

    Вы можете указать любой тип объекта в качестве аргумента для print() . Если объект не является строкой, функция print() преобразует его в соответствующее строковое представление перед отображением:

    Как видите, даже сложные типы, такие как списки, словари и функции, могут отображаться в консоли с помощью print() .

    Печать с расширенными функциями

    print() принимает несколько дополнительных аргументов, обеспечивающих скромный контроль над форматом вывода. Каждый из них представляет собой особый тип аргумента, называемый аргументом ключевого слова. Позже в этой вводной серии вы встретите руководство по функциям и передаче параметров, чтобы вы могли больше узнать об аргументах ключевых слов.

    А пока вот что вам нужно знать:

    • Аргументы ключевых слов имеют форму = .
    • Любые ключевые аргументы, передаваемые функции print(), должны стоять в конце после списка отображаемых объектов.

    В следующих разделах вы увидите, как эти ключевые аргументы влияют на вывод консоли, создаваемый функцией print() .

    Разделение печатаемых значений

    Добавление ключевого аргумента sep= приводит к тому, что Python разделяет объекты с помощью одинарного пробела, а не по умолчанию:

    Чтобы сжать объекты вместе без пробела между ними, укажите пустую строку ("") в качестве разделителя:

    Вы можете использовать ключевое слово sep, чтобы указать любую произвольную строку в качестве разделителя.

    Управление символом новой строки

    Аргумент ключевого слова end= приводит к завершению вывода вместо символа новой строки по умолчанию:

    Например, если вы отображаете значения в цикле, вы можете использовать end, чтобы значения отображались в одной строке, а не в отдельных строках:

    Вы можете использовать ключевое слово end, чтобы указать любую строку в качестве ограничителя вывода.

    Отправка вывода в поток

    print() принимает два дополнительных аргумента ключевого слова, оба из которых влияют на то, как функция обрабатывает поток вывода:

    file= : по умолчанию print() отправляет свой вывод в поток по умолчанию с именем sys.stdout , который обычно эквивалентен консоли. Аргумент file= заставляет print() отправлять вывод в альтернативный поток, указанный вместо этого.

    flush=True: обычно print() буферизует свой вывод и периодически записывает в выходной поток. flush=True указывает, что Python принудительно очищает поток вывода при каждом вызове функции print() .

    Эти два аргумента ключевых слов представлены здесь для полноты картины. На этом этапе обучения вам, вероятно, не нужно слишком беспокоиться о потоках вывода.

    Использование форматированных строк

    Хотя вы можете углубиться в изучение функции Python print(), форматирование вывода консоли, которое она предоставляет, в лучшем случае находится в зачаточном состоянии. Вы можете выбрать способ разделения печатных объектов и указать, что будет в конце печатной строки. Вот и все.

    Во многих случаях вам потребуется более точный контроль над внешним видом данных, предназначенных для отображения. Python предоставляет несколько способов форматирования выходных строковых данных. В этом разделе вы увидите пример использования f-строк Python для форматирования строк.

    Примечание. Синтаксис f-строки — это один из современных способов форматирования строк. Для углубленного обсуждения вы можете ознакомиться с этими руководствами:

    Вы также получите более подробный обзор двух подходов к форматированию строк, f-strings и str.format() , в руководстве по выводу форматированных строк в Python, которое следует за этим руководством в этой вводной серии.

    В этом разделе вы будете использовать f-строки для форматирования вывода. Предположим, вы написали код, запрашивающий у пользователя имя и возраст:

    Вы успешно собрали данные от своего пользователя, и вы также можете отобразить их на их консоли. Чтобы создать красиво отформатированное выходное сообщение, вы можете использовать синтаксис f-строки:

    f-строки позволяют заключать имена переменных в фигурные скобки ( <> ), чтобы вставлять их значения в создаваемую строку. Все, что вам нужно сделать, это добавить букву f или F в начало вашей строки.

    Далее предположим, что вы хотите сообщить пользователю, сколько ему будет лет через 50 лет. F-строки Python позволяют вам сделать это без особых накладных расходов! Вы можете добавить любое выражение Python между фигурными скобками, и Python сначала вычислит его значение, а затем вставит его в вашу f-строку:

    Вы добавили 50 к значению возраста, которое вы получили от пользователя и преобразовали в целое число с помощью int() ранее. Весь расчет происходил внутри второй пары фигурных скобок в вашей f-строке. Довольно круто!

    Примечание. Если вы хотите узнать больше об использовании этого удобного метода форматирования строк, вы можете углубиться в руководство по f-строкам Python 3.

    F-строки Python, возможно, являются наиболее удобным способом форматирования строк в Python. Если вы хотите учиться только одним способом, лучше всего придерживаться f-строк Python. Однако этот синтаксис доступен только начиная с Python 3.6, поэтому, если вам нужно работать с более старыми версиями Python, вам придется использовать другой синтаксис, например, метод str.format() или строковый оператор по модулю.

    Ввод и вывод Python: заключение

    В этом руководстве вы узнали о вводе и выводе в Python и о том, как ваша программа Python может взаимодействовать с пользователем. Вы также изучили некоторые аргументы, с которыми можно работать, чтобы добавить сообщение в приглашение ввода или настроить, как Python отображает вывод для ваших пользователей.

    Вы научились:

    • Принимать пользовательский ввод с клавиатуры с помощью встроенной функции input()
    • Отображение вывода на консоль с помощью встроенной функции print()
    • Форматировать строковые данные с помощью f-строк Python

    В следующем учебном пособии этой вводной серии вы узнаете о еще одном методе форматирования строк и глубже погрузитесь в использование f-строк.

    Смотреть сейчас Это руководство содержит связанный с ним видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Чтение входных данных и Написание выходных данных в Python

    Раз в несколько дней получайте короткие и интересные трюки с Python. Никакого спама никогда. Отписаться в любое время. Куратор: команда Real Python.

    О Джоне Стурце

    Джон — заядлый питонист и член учебной группы Real Python.

    Понятие функции является одним из самых важных в математике. Обычное использование функций в компьютерных языках заключается в реализации математических функций. Такая функция вычисляет один или несколько результатов, которые полностью определяются переданными ей параметрами.

    Это математика, но мы говорим о программировании и Python. Так что же такое функция в программировании? В самом общем смысле функция — это структурный элемент в языках программирования для группировки множества операторов, чтобы их можно было использовать в программе более одного раза. Единственным способом добиться этого без функций было бы повторное использование кода путем его копирования и адаптации к различным контекстам, что было бы плохой идеей. Следует избегать избыточного кода — в данном случае повторяющегося кода! Использование функций обычно повышает понятность и качество программы. Это также снижает затраты на разработку и обслуживание программного обеспечения.

    Функции известны в языках программирования под разными именами, например, как подпрограммы, подпрограммы, процедуры, методы или подпрограммы.

    Живое обучение Python

    Нравится эта страница? Мы предлагаем живые обучающие курсы Python, охватывающие содержание этого сайта.

    Мотивирующий пример функций

    Давайте посмотрим на следующий код:

    ВЫВОД:

    Давайте внимательно посмотрим на приведенный выше код:

    Вы можете видеть в коде, что мы приветствуем трех человек. Каждый раз мы используем три вызова печати, которые почти одинаковы. Только название другое. Это то, что мы называем избыточным кодом. Мы повторяем код раз. Этого не должно быть. Это тот момент, когда функции могут и должны использоваться в Python.

    Мы могли бы использовать подстановочные знаки в коде вместо имен. На следующей диаграмме мы используем часть головоломки. Мы пишем код только один раз и заменяем часть головоломки на соответствующее имя:

    Конечно, это был неправильный код Python. В следующем разделе мы покажем, как это сделать в Python.

    Функции в Python

    В следующем коде используется функция с именемgreet. Предыдущий фрагмент головоломки теперь является параметром с именем «имя»:

    ВЫВОД:

    Мы использовали функцию в предыдущем коде. Мы видели, что определение функции начинается с ключевого слова def. Общий синтаксис выглядит следующим образом:

    Код с картинки можно увидеть в следующем:

    ВЫВОД:

    Мы дважды вызываем функцию в программе. Функция имеет два параметра, которые называются x и y. Это означает, что функция f ожидает два значения, или, лучше сказать, «два объекта». Во-первых, мы вызываем эту функцию с f(a, 2+a) . Это означает, что a переходит в x, а результат 2+a (5) «переходит» в переменную y. Механизм присвоения аргументов параметрам называется передачей аргументов. Когда мы достигнем оператора return, объект, на который ссылается z, будет возвращен, что означает, что он будет присвоен переменной res1. После выхода из функции f переменная z и параметры x и y будут автоматически удалены.

    Ссылки на объекты можно увидеть на следующей диаграмме:

    Следующий блок кода Python содержит пример функции без оператора return. Мы используем оператор pass внутри этой функции. pass является нулевой операцией. Это означает, что при его выполнении ничего не происходит. Он полезен в качестве заполнителя в ситуациях, когда оператор требуется синтаксически, но код выполнять не нужно:

    Более полезная функция:

    ВЫВОД:

    """ возвращает температуру в градусах Фаренгейта """ — это так называемая строка документации. Используется функцией справки:

    ВЫВОД:

    Наш следующий пример может быть интересен изучающим Python, заботящимся о калориях. У нас также было упражнение в главе «Условные операторы» нашего руководства по Python. Теперь мы создадим функциональную версию программы.

    Индекс массы тела (ИМТ) — это значение, полученное из массы (w) и роста (l) человека. ИМТ определяется как отношение массы тела к квадрату роста и выражается универсально

    Вес указан в кг, а длина в метрах.

    Нам нравится писать функцию для оценки значений ИМТ в соответствии со следующей таблицей:

    Ниже показан код, который напрямую вычисляет ИМТ и оценивает ИМТ, но не использует функции:

    ВЫВОД:

    Превратите предыдущий код в правильные функции и вызовы функций.

    Давайте проверим эти функции:

    ВЫВОД:

    Живое обучение Python

    Нравится эта страница? Мы предлагаем живые обучающие курсы Python, охватывающие содержание этого сайта.

    Предстоящие онлайн-курсы

    с 16 мая 2022 г. по 20 мая 2022 г.
    с 29 августа 2022 г. по 2 сентября 2022 г.
    с 17 октября 2022 г. по 21 октября 2022 г.

    28 марта 2022 г. — 01 апреля 2022 г.
    30 мая 2022 г. — 03 июня 2022 г.
    29 августа 2022 г. — 02 сентября 2022 г.
    17 октября 2022 г. — 21 октября 2022 г.

    с 16 мая 2022 г. по 20 мая 2022 г.
    с 29 августа 2022 г. по 2 сентября 2022 г.
    с 17 октября 2022 г. по 21 октября 2022 г.

    30 марта 2022 г. – 01 апреля 2022 г.
    01 июня 2022 г. – 03 июня 2022 г.
    31 августа 2022 г. – 02 сентября 2022 г.
    19 октября 2022 г. – 21 октября 2022 г.

    Аргументы по умолчанию в Python

    Когда мы определяем функцию Python, мы можем установить значение по умолчанию для параметра. Если функция вызывается без аргумента, параметру будет присвоено это значение по умолчанию. Это делает параметр необязательным. Другими словами: параметры по умолчанию — это параметры, которые не нужно задавать, если вызывается функция. В этом случае используются значения по умолчанию.

    Мы продемонстрируем принцип работы параметров по умолчанию на простом примере. Следующая функция hello , которая не очень полезна, приветствует человека. Если имя не указано, оно будет приветствовать всех:

    ВЫВОД:

    Подводный камень по умолчанию

    В предыдущем разделе мы узнали о параметрах по умолчанию. Параметры по умолчанию довольно просты, но довольно часто новички в Python сталкиваются с ужасным и совершенно неожиданным сюрпризом. Этот сюрприз возникает из-за того, как Python обрабатывает аргументы по умолчанию и эффекты, связанные с изменяемыми объектами.

    Изменяемые объекты — это объекты, которые можно изменить после создания. В Python словари являются примерами изменяемых объектов. Передача изменяемых списков или словарей в качестве аргументов функции по умолчанию может иметь непредвиденные последствия. Программист, использующий списки или словари в качестве аргументов функции по умолчанию, ожидает, что программа будет создавать новый список или словарь каждый раз, когда вызывается функция. Однако это не то, что происходит на самом деле. Значения по умолчанию не будут созданы при вызове функции. Значения по умолчанию создаются ровно один раз, когда функция определена, то есть во время компиляции.

    Давайте посмотрим на следующую функцию Python «спамер», которая способна создать «мешок», полный спама:

    Вызов этой функции один раз без аргумента возвращает ожидаемый результат:

    ВЫВОД:

    Сюрприз проявляется, когда мы снова вызываем функцию без аргумента:

    ВЫВОД:

    Большинство программистов ожидали того же результата, что и при первом вызове, т. е. ['спам']

    Чтобы понять, что происходит, вы должны знать, что происходит, когда функция определена. Компилятор создает атрибут __defaults__ :

    ВЫВОД:

    Всякий раз, когда мы будем вызывать функцию, пакет параметров будет назначен объекту списка, на который ссылается спамер.__defaults__[0] :

    ВЫВОД:

    Теперь вы знаете и понимаете, что происходит, но вы можете спросить себя, как решить эту проблему. Решение состоит в использовании неизменяемого значения None по умолчанию. Таким образом, функция может динамически (во время выполнения) установить мешок в пустой список:

    ВЫВОД:

    Живое обучение Python

    Нравится эта страница? Мы предлагаем живые обучающие курсы Python, охватывающие содержание этого сайта.

    Строка документа

    Первый оператор в теле функции обычно представляет собой строковый оператор, называемый Docstring, доступ к которому можно получить с помощью function_name.__doc__ . Например:

    ВЫВОД:

    Параметры ключевых слов

    Использование параметров ключевого слова – это альтернативный способ вызова функций. Определение функции не меняется. Пример:

    ВЫВОД:

    Параметрами ключевых слов могут быть только те, которые не используются в качестве позиционных аргументов. Выгоду мы видим на примере. Если бы у нас не было параметров с ключевыми словами, для второго вызова функции потребовались бы все четыре аргумента, даже если для аргумента c требуется только значение по умолчанию:

    ВЫВОД:

    Живое обучение Python

    Нравится эта страница? Мы предлагаем живые обучающие курсы Python, охватывающие содержание этого сайта.

    Возвращаемые значения

    В наших предыдущих примерах мы использовали оператор return в функции sumsub, но не в Hello. Итак, мы видим, что оператор return не является обязательным. Но что будет возвращено, если мы явно не укажем оператор возврата. Посмотрим:

    ВЫВОД:

    Если мы запустим этот небольшой скрипт, будет напечатано None, то есть функция без возврата возвращает специальное значение None. None также будет возвращено, если у нас есть просто return в функции без выражения:

    ВЫВОД:

    В противном случае будет возвращено значение выражения, следующего за return. В следующем примере будет напечатано 9:

    Нам нужно иметь возможность считывать каждое входное значение дважды: один раз, чтобы вычислить среднее значение (кумулятивную сумму), и еще раз, чтобы подсчитать, сколько из них было выше среднего. Мы могли бы прочитать каждое значение в переменную, но мы не знаем, сколько дней потребуется для запуска программы, поэтому мы не знаем, сколько переменных нужно объявить.

    Нам нужен способ объявить множество переменных за один шаг, а затем иметь возможность хранить их значения и обращаться к ним.

    Задача: возможно ли решить вышеуказанную проблему, используя только методы из предыдущих заметок, без использования массивов? Как?

    Массивы

    массив — это объект, в котором хранится множество значений одного типа. Массив элемент — это одно значение в массиве. Массив index — это целое число, указывающее позицию в массиве. Как и String, массивы используют индексирование с отсчетом от нуля, то есть индексы массива начинаются с 0. Ниже показаны индексы и значения в массиве с 10 элементами типа < tt>целое.

    индекс 0 1 2 3 4 5 6 7 8 9
    value 12 49 -2 26 5 17 -6 84 72 3

    Объявление и создание массива


    Это просто объявляет переменную, которая может содержать массив, но не создает сам массив.
    Например, чтобы объявить переменную numbers, которая может содержать массив целых чисел, мы должны использовать:


    Поскольку массивы являются объектами, мы создаем массивы с помощью new.
    При создании массива вы указываете количество элементов в массиве следующим образом:

    индекс 0 1 2 3 4 5 6 7 8 9
    value 0 0 0 0 0 0 0 0 0 0


    Каждый элемент в массиве инициализируется нулем или любым значением, которое считается "эквивалентным" нулю для типа данных (false для boolean и null для String).

    Сохранение значений и доступ к элементам

    индекс 0 1 2 3 4 5 6 7 8 9
    value 27 0 0 -6 0 0 0 0 0 0

    При объявлении массива каждому элементу массива присваивается начальное значение по умолчанию.
    Для целых чисел значение по умолчанию равно 0. Как вы думаете, какое значение по умолчанию используется для двойных чисел?

    Упражнение: начальные значения массива по умолчанию
    Напишите программу, которая объявляет массив double длины 4, печатает значения, присваивает значение каждому элементу и снова печатает значения.
    Теперь сделайте то же самое для массива элементов String.

    Массивы и циклы

    Мы можем использовать целочисленную переменную в качестве индекса массива. Если мы используем цикл for для подсчета от 0 до самого высокого индекса, то мы можем обрабатывать каждый элемент массива. Например, следующий код суммирует элементы массива numbers.

    Мы начинаем с 0, потому что индексы начинаются с 0. Мы заканчиваем сразу перед 10, потому что 10 — это длина нашего массива numbers, а последний индекс на единицу меньше длины массива.
    [Массивы предоставляют много возможностей для ошибок один за другим из-за того, как работают индексы.]

    Если бы мы изменили массив numbers, чтобы он содержал другое количество элементов, этот код больше не работал бы. К счастью, Java предоставляет простой способ получить длину массива, добавив .length после переменной массива, например:

    Обратите внимание, что для массивов мы не используем круглые скобки после длины.
    Это отличается от способа определения длины строк.

    Упражнение: Инициализировать и показать целочисленный массив
    Напишите программу, которая вводит длину массива int от пользователя и присваивает 1 по индексу 0, присваивает 2 по индексу 1, присваивает 3 по индексу 2 и так далее. Один цикл должен присваивать значения каждому элементу массива. Второй цикл должен печатать значения массива с пробелами между значениями.

    Упражнение: Инициализировать и показать двойной массив
    Напишите программу, которая вводит длину массива двойных от пользователя и значение для инициализации массива. Один цикл должен присвоить значение каждому элементу массива. Второй цикл должен печатать значения массива с пробелами между значениями.

    Температурная программа

    Рассмотрите взаимодействие в начале этих заметок. Вот псевдокод, который следует последовательности взаимодействий, используя массив для управления значениями, которые вводит пользователь.Обратите внимание, что мы не можем подсчитать, сколько элементов выше среднего, пока не вычислим среднее значение, и мы не можем вычислить среднее значение, пока не введем все элементы.

    1. Введите количество дней от пользователя.
    2. Объявите и создайте массив int с числом дней в качестве длины.
    3. Для каждого индекса в массиве:
      1. Введите температуру от пользователя.
      2. Сохранить температуру в массиве по этому индексу.
        1. Добавьте значение этого индекса к сумме.
          1. Если значение этого индекса больше среднего:
            1. Увеличить значение счетчика.

            Мы могли бы объединить первые два цикла в один цикл, но чище делать их по отдельности.
            Вот программа, соответствующая псевдокоду.

            Упражнение: дисперсия и стандартное отклонение
            Измените программу температуры так, чтобы она также вычисляла дисперсию и стандартное отклонение температур.
            Чтобы вычислить дисперсию, необходимо суммировать:

            Дополнительные функции массива

            В Java есть множество других возможностей для программирования с массивами. Мы просто приводим здесь некоторые примеры и информацию. Дополнительную информацию см. в учебнике.

            Если вы заранее знаете, какие значения будут в массиве, вы можете указать эти значения при объявлении массива, например:

            Существует особый вид цикла (цикл for-each) для обработки каждого значения в массиве. Вот пример для программы «Температура». Конечно, лучше выбрать имя, чем foo.

            Класс Arrays предоставляет несколько удобных статических методов для работы с массивами. Для их использования необходимо добавить Arrays. перед названием метода (и импортировать пакет java.util).

            Имя метода Описание
            copyOf(array, newSize) возвращает копию массива с новым размером
            equals( array1, array2) возвращает true, если все элементы равны
            fill(массив, значение)< /td> присваивает каждому элементу массива значение
            sort(array) переставляет значения для перехода от наименьшего к наибольшему
            toString(array) возвращает String представление массив

            Задание: массив простых чисел
            Напишите программу для инициализации массива первыми 10 простыми числами: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29.
            Используйте цикл for-each для суммирования значений в массиве.
            Выведите массив с помощью метода Arrays.toString.

            Массивы и методы

            Как и другие типы, массивы можно передавать в качестве параметров методам. Предположим, нам нужен метод для суммирования значений в массиве double. Это потребует передачи массива в качестве параметра и возврата результата double.

            В данном случае имя параметра — vals, но, как и для всех переменных параметров, вы можете выбрать любое имя по своему усмотрению. Обратите внимание, что [ ] является частью типа параметра. double[ ] vals следует читать как "двойной массив с именем vals".

            Упражнение: Метод усреднения массива
            Напишите метод, который возвращает среднее значение в массиве int. Включите и используйте этот метод в программе Температура.

            Массивы также могут быть возвращены методом. Предположим, нам нужен метод, который преобразует String в массив char. Это потребует передачи String в качестве параметра и возврата массива char.

            Обратите внимание, что [ ] является частью типа возвращаемого значения, а токен является именем параметра String. Внутри метода нам нужно убедиться, что массив имеет ту же длину, что и String; код получает это значение с помощью метода length. Обратите внимание, что метод length используется дважды: один раз, чтобы указать длину нового массива, а другой — в проверке цикла.

            Упражнение: Создайте метод массива int
            Напишите метод, который возвращает новый массив int заданного размера и с инициализацией каждого элемента заданным значением. Обратите внимание, что этот метод требует два параметра. Включите и используйте этот метод в программе Температура.

            Ссылки

            Когда вы передаете массив в качестве параметра, Java не создает новую копию массива. Это было бы очень неэффективно для больших массивов. Вместо этого переменная параметра хранит ссылку (или указатель) на тот же массив. Это означает, что если метод изменяет массив, то эти изменения будут видны коду, вызывающему метод. Рассмотрим следующую программу.

            Вывод этой программы:


            Обратите внимание, что метод setToZero не изменяет value1 на ноль.Когда параметр является примитивным типом, значение копируется. Это иллюстрирует ситуацию до и после оператора value2 = 0;. Значения для value1 и value2 хранятся в двух разных местах.

            До
            После
            value1 3.14 value1 3.14
            value2 3.14 value2 0.0


            Однако метод set2Zero изменил элемент array1 на ноль. Когда параметр является массивом, копируется ссылка, а не массив. Это иллюстрирует ситуацию до и после оператора array2[index] = 0;. И массив1, и массив2 ссылаются на один и тот же массив.

            1. Сколько переменных целочисленного массива есть в этой программе?
            2. Сколько объектов целочисленного массива есть в этой программе?
            3. Что печатает эта программа?
            4. После вывода первой строки к скольким массивам может получить доступ эта программа?
            5. После того, как будет напечатана последняя строка, к скольким массивам может получить доступ эта программа?
            6. Допустим, мы добавим строку: в конце программы. Сколько массивов теперь может получить доступ к этой программе?
            1. Напишите метод doubleDoubleArray, который удваивает каждый элемент в массиве double.
              Этот метод должен иметь параметр массива и возвращаемый тип void.
              Напишите программу для проверки метода, печатающую массив до и после вызова метода.
            2. Напишите аналогичный метод doubleIntArray, который удваивает каждый элемент в массиве int.
            3. Можете ли вы написать единственный метод, который может принимать массив double или массив int в качестве параметра и удваивать элементы массива?

            Алгоритмы обхода массива

            Дополнительная тема: Чтение файла в массив

            Если вы выполняли некоторые действия, вы, вероятно, обнаружили, что вводить значения для массивов вручную утомительно. Программе было бы удобнее читать значения из файла. Дополнительную информацию об обработке файлов можно найти в главе 6 учебника.

            файл — это набор информации, который хранится на компьютере и которому присвоено имя. Например, hamlet.txt может быть именем файла, содержащего текст Hamlet. Hello.java может быть именем файла с вашей программой "Hello World". Мы будем работать с текстовыми файлами, включая файлы с расширением .txt, а также файлы .java и .html.

            1. Открыть файл для чтения (или записи).
            2. Чтение данных из файла (или запись данных в файл).
            3. Закройте файл.

            В Java мы будем использовать объекты File для представления файлов и объекты Scanner для открытия, чтения и закрытия файлов. Предположим, у нас есть файл temperature.txt, который содержит следующую информацию, необходимую программе Temperature.

            Предполагая, что этот файл находится в той же папке, что и программа Temperature, объект File может быть создан с помощью этого оператора.

            Для большинства целей нам не нужен объект File, за исключением создания объекта Scanner, поэтому два приведенных выше оператора можно закодировать в один оператор.

            Мы можем использовать объект Scanner для файла так же, как объект Scanner для клавиатуры, за исключением того, что нам не нужно печатать подсказки. Вот программа Temperature, которая считывает информацию из файла.


            Обратите внимание, что необходим дополнительный оператор импорта; это потому, что класс File является частью пакета java.io. Также обратите внимание, что в заголовке метода необходимо предложение throws. Это связано с тем, что Java требует, чтобы вы обращали внимание на возможность FileNotFoundException. Было бы лучше использовать оператор try/catch для решения этой проблемы, но это выходит за рамки данного курса.

            • Измените файл, чтобы он содержал недопустимые данные. Что происходит?
            • Измените программу так, чтобы она считывала температуры из файла, пока есть допустимые записи для чтения, а затем отображала результаты.
              • Измените программу, чтобы она печатала температуры по мере их считывания.
              • Удалите первую строку (количество дней) из файла Temperature.txt.
              • Замените первый цикл for на:
                while(input.hasNextInt())
              • Создайте массив размером MAX_SIZE, константой, инициализированной до 100.
              • Сохраняйте подсчет количества прочитанных значений (переменная count уже занята).
                Используйте его как индекс для хранения элементов в массиве и для вычисления среднего значения.Не используйте temps.length
              • Распечатайте количество считанных значений температуры вместе со средней температурой.
              • Измените цикл while, чтобы не считывалось больше MAX_SIZE чисел.

              Задание: Поиск Гамлета
              Напишите программу, которая считывает 32230 токенов из hamlet.txt в массив String. Запросить у пользователя слово для поиска. Подсчитайте и распечатайте, сколько раз встречается это слово. Вы можете попробовать два слова: "haue" (более 100 раз) и "againe" (более 10 раз).

              Дополнительная тема: многомерные массивы

              Во многих приложениях данные имеют несколько измерений. Таблицы, изображения. и видео являются тремя распространенными примерами. Здесь мы будем использовать пример файла iris.txt. Если вы хотите узнать больше о том, что означают эти числа, вы можете прочитать это.

              Первая строка iris.txt указывает, что данные состоят из 150 строк (или строк) и 5 ​​столбцов. Многомерный массив может быть объявлен так, чтобы мы могли получить доступ к элементу по строке и столбцу. Предполагая, что эти числа хранятся в переменных с именами rows и columns, мы можем объявить двумерный массив следующим образом:

              Обратите внимание, что в объявлении есть две пары квадратных скобок. Также обратите внимание, что указаны две длины. Для трехмерного массива нам потребуются три пары скобок и так далее для более высоких измерений.

              Элемент в десятой строке и третьем столбце будет назначен и доступен:

              Для обоих параметров используется индексация с отсчетом от нуля. Конечно, было бы очень утомительно писать 750 строк кода для присвоения значения каждому элементу массива iris. Обычно используются вложенные циклы.

              1. Для каждого индекса строки:
                1. Для индекса каждого столбца:
                  1. Что-то делать с элементом в этой строке и столбце

                  Если объект Scanner для чтения из iris.txt хранится в переменной input, то следующий код заполнит массив (при условии, что первые два числа были потреблены).

                  Подобный двойной цикл может быть закодирован для другой обработки данных. Предположим, вы хотите вычислить среднее значение каждого из столбцов. Для пяти столбцов можно объявить пять переменных, но для пяти средних лучше объявить массив с пятью элементами. В следующем коде дополнительный массив сначала используется для хранения сумм по каждому столбцу, а затем деление приводит к среднему значению.

                  Когда у вас много данных, часто полезно посмотреть, как они выглядят. В качестве последнего примера рассмотрим, как подсчитать, сколько раз каждое значение встречается в файле iris.txt. При проверке каждое значение имеет не более одного десятичного знака, поэтому, если мы умножим на 10 и округлим, то разные значения будут соответствовать разным целым числам. Все значения в файле iris.txt положительные, а наибольшее значение равно 7,9, поэтому целые числа будут находиться в диапазоне от 1 до 79. Это означает, что для подсчета каждого значения можно использовать массив целых чисел длиной 80.

                  Например, предположим, что значение равно 2,3. Умножение на 10 дает 23. Это означает, что мы должны добавить 1 к целочисленному массиву с индексом 23. Вот код, который подсчитывает все 750 значений.

                  Читайте также: