Java Core для самых маленьких. Часть 3. Переменные / Хабр
В предыдущей статье мы говорили о типах данных, а теперь поговорим о вытекающей из этого теме, о переменных.
Переменная — это поименованная область памяти, в которую мы можем сохранить данные, осуществлять доступ к этим данным или изменять их. Простыми словами, переменная в программировании, и в Java в том числе, является основной единицей хранения информации. В Java у переменной должен быть тип, имя и значение.
На скриншоте выше продемонстрирован пример создания переменных.
Тип — это тип данных переменной, которую необходимо создать. В примере используются примитивные типы данных, рассмотренные в предыдущей статье. Однако, переменная может быть не только примитивного типа. Переменная может являться экземпляром какого-либо класса. Изучать классы мы будем в следующих статьях.
Имя или Идентификатор — любую переменную нужно как-то обозвать. А даем мы имя переменной сразу после указания типа данных. Важно! Именем переменной может быть любая последовательность букв, цифр, но имя не может начинаться с цифры! При наименовании переменной так же учитывается регистр символов. abc и ABC будут разными именами. Еще можно встретить переменные, имя которых начинается с символа валюты доллара: $
Например: double $pi = 3.14;
Такое можно увидеть в авто-генерируемых участках кода. Живые люди, насколько мне известно, так не пишут.
Давайте сразу научимся давать имена переменным правильно. Существует документ Java Code Conventions. В нем указаны правила к написанию кода на Java. Нужно это для того, что бы Java код в разных проектах был написан в едином стиле. Таким образом, новоприбывший на проект программист не будет отвлекаться на новый стиль кода, ведь он будет оформлен так же, как и на других проектах. Эти правила работают и при нейминге переменных.
Итак, переменные принято называть в lowerCamelCase стиле. Сейчас покажу как хорошо, а как плохо:
Как вы могли заметить, в примере, в имени переменной используется символ подчеркивания _
. На практике допускается использовать такой символ только для имен констант. Чем константа отличается от переменной? Переменная на то и переменная, что ее значение изменчиво и всегда можно присвоить другое:
Вот было значение 1998, а на следующей строке стало 2000. А вот с константой так не получится. Константа гарантирует, что ее значение не изменится на протяжении всего времени выполнения программы. Как создать константу? Очень просто:
Нужно всего лишь дописать ключевое слово final
перед типом данных переменной. Для простоты понимания, мы как бы «финализируем» значение переменной и говорим, что это значение конечное.
Обратим внимание на имя константы. Когда мы даем имя константе, то должны делать это в стиле SCREAMING_SNAKE_CASE. Давайте исправим мой код:
В целом, вас никогда не погладят по головке за правильный нейминг в коде. Подразумевается, что это нечто естественное при написании кода. Как правила этикета у людей. А вот если вы будете называть ваши переменные и константы абы как, получите незамедлительного леща.
Инициализация переменных
У всех переменных из моих примеров уже было присвоено начальное значение. Процесс присвоения начального значения называется инициализацией переменной. И не обязательно инициализировать переменную во время ее объявления. Java позволяет сделать это и позже.
Во-первых, можно объявлять переменные через запятую (если они одинакового типа):
При этом, смотрите, мы можем некоторые из них инициализировать прямо во время объявления. А теперь инициализируем оставшиеся:
Для инициализации переменных типа char
я использовал цепочку присваиваний. Да, и так тоже можно. Хотя используется очень редко.
Если мы попытаемся провести какую-то операция с переменной, у которой нет значения, то получим ошибку.
Оператор присваивания
Важно запомнить, что если вы где-то в коде Java, а также во многих других языках, увидите знак равенства =
, вы должны понимать, что это не сравниваются два значения. Вы должны понимать что это оператор присваивания. Его задача: взять значение, которое стоит справа от него, и записать в память переменной, которая стоит слева от него, или другими словами присвоить. Важно, чтобы значения справа и слева были одного типа данных в противном случае получаем ошибку.
Литералы
Видели, в моих примерах выше, я писал значение переменной с типом long
не просто 1998
а 1998L
? Сейчас расскажу, что это за L
в конце.
В Java постоянные значения задаются литеральным представлением. Простым языком, при помощи определенных символов мы можем указывать тип данных. Вот например, при работе с целочисленными литералами нам не нужны никакие литералы. Мы просто пишем число 1998;
и Java понимает, что это целочисленное значение.
Целочисленные литералы по умолчанию создаются в виде значения типа int
, и это значение можно присваивать всем целочисленным типам данных без проблем, в случае, если это значение не выходит за пределы допустимых значений (в предыдущей статье мы говорили о диапазонах значений у разных типов данных). Но что делать, если мы хотим указать целое число, которое больше пределов числа типа int
? В этом случае есть возможность создать литерал типа long
просто указав в конце символ L
. Я мог и не писать 1998L
, потому что число 1998
вполне помещается в диапазон значений типа данных int
. А теперь, я вдруг захотел присвоить переменной типа long
значение, скажем, в девять миллиардов. Число не маленькое и оно выходит за пределы максимального значения типа int
.
Вот тут нам понадобится литерал типа long
. При помощи символа L
, в конце целочисленного значения, мы явно указывается, что это значение будет типа long
, а следовательно и с большим диапазоном значений.
Так, что еще за символы подчеркивания в значении переменной? Это всего-навсего декор. С JDK 7 допустимо указывать знаки подчеркивания, для разбиения больших чисел на разряды, для удобства чтения.
В вышеописанных примерах были литералы для целочисленных десятичных значений. А еще мы можем присвоить целому числу литерал в виде восьмеричного значения. Для этого вам нужно добавить в самом начале значения 0. Но в таком случае, логично, что это значение не сможет содержать цифры 8 и 9, поскольку они выходят за пределы восьмеричной системы счисления.
Мало того, еще мы можем использовать литерал шестнадцатеричных значений. Такие значения обозначают с начальным 0x или 0X, а цифры в пределах от 10 до 15 заменяются символами ABCDEF английского алфавита.
С JDK 7 есть возможность указывать целочисленные литералы в двоичном виде. Для этого вначале значения нужно указать 0b или 0B и соответственно в значениях можно использовать только цифры 0 и 1. В реальности, вам навряд ли понадобятся литералы шестнадцатеричных, восьмеричного или двоичных значений. Однако, знать о них нужно.
Литералы дробных чисел
Литералы дробных чисел могут быть представлены в привычном для нас виде. Они состоят из целой и дробной части, которые разделены точкой. Например: 10.9;
.
Но существует и экспоненциальная форма записи этих чисел в виде 2. 34e12;
Где число после символа ‘e’ обозначает степень 10-ти. Простыми словами, мы записали 2 целых и 34 сотых умноженное на 10 в 12 степени.
По умолчанию литералы дробных чисел имеют тип double
, если хотим создать литерал типа float
, нужно указать символ f
или F
в конце значения. Как я уже сказал, по умолчанию, литерал будет типа double
, однако мы все же можем указать это явно, дописав в конце значения символ d
или D
. Особого смысла это иметь, конечно же, не будет.
Как и в случае с целочисленными значениями, литералы с плавающей точкой поддерживают нижнее подчеркивание начиная с JDK 7.
Логические литералы
С логическими литералами все просто, они поддерживают только два логических значения true
или false
.
Символьные литералы
Для символьных литералов, которые присутствуют на вашей клавиатуре вы можете использовать одинарные кавычки, обернув ими необходимый вам символ введенный с клавиатуры.
Я не просто так обратил ваше внимание на символы с клавиатуры. Ведь существуют и такие символы, которых на клавиатуре нет, да и на символы они не похожи. Сейчас разберемся.
Как я уже говорил, тип char
целочисленный и может хранить в себе символы кодировки Unicode. Unicode — это стандарт кодировки символов, который присваивает каждому символу код, в виде положительного целочисленного значения. Поэтому, тип char
не может хранить отрицательные значения. А также, над типом char
можно выполнять операции сложения и вычитания. Не представляю, зачем кому-то может понадобиться выполнять арифметические операции над типом char
, но знайте, Java это позволяет. Мало того, коды символов английского алфавита (и многих других), расположены в порядке возрастания. Например, символу a соответсвует код 97, символу b — код 98. На основе этого можно сортировать символы по алфавиту.
А вот если символ нельзя ввести непосредственно с клавиатуры, то для ввода таких символов используют ряд управляющих последовательностей. Например, символ переноса строки ‘\n’. Существуют последовательности, которые существуют для ввода значений в восьмеричной и шестнадцатеричной форме. Например, мы захотели ввести букву tu катаканы смайлик: ツ. Берем и пишем:
В данной таблице вы можете посмотреть наиболее используемые последовательности символов:
Когда-то давно, я писал статью про экранирование символом. Настоятельно рекомендую прочитать, как дополнительный материал. Узнаете много интересного.
Строковый литерал
Можно заключить последовательность символов в двойные кавычки и получить так называемую строку.
Про строки будет отдельная статья, через одну если быть точным. Там нам будет о чем поговорить, а пока просто имейте ввиду что ""
— это строковый литерал.
Динамическая инициализация
Пару слов о таком термине как динамическая инициализация. Ничего сложного, только звучит страшно.
Переменную можно инициализировать другой переменной. Также, допускается инициализация переменной результатом какого-то выражения.
Главное, чтобы тип данных выражения / инициализирующей переменной совпадал с типом данных целевой переменной.
Преобразование и приведение типов
Знаю, вы уже подустали, сделали массу перерывов и подходов. Обещаю, это последняя тема в этой статье.
Часто программисты сталкиваются с ситуацией, когда переменной одного типа приходится присваивать значение другого типа. Если оба типа данных совместимы, их преобразование будет выполнено автоматически. Для автоматического преобразования должно выполняться 2 условия:
Не так страшен черт, как его малюют. Все очень просто. Например, тип long
достаточно велик чтобы поместить в себя тип int
и прочие целочисленные типы данных которые меньше long
.
На картинке выше, вы можете увидеть, какие типы данных вы можете преобразовать автоматически. Исходя из этого изображения, мы можем в переменную типа float
поместить значение типа long
. Звучит странно, давайте проверим:
Все работает. К сожалению, автоматическое преобразование не способно покрыть все потребности. Например если нужно тип int
преобразовать в byte
.
Чтобы выполнить преобразование двух несовместимых типов данных, нужно воспользоваться приведением типов. Это явное преобразование одного типа в другой. И выглядит это вот так:
Нужно понимать, что преобразование вы проводите на свой страх и риск. Вы должны быть уверенным в том, что преобразуемое значение помещается в диапазон целевого типа. В противном случае вы получите некорректные данные.
Подводим итоги
В этой статье мы поговорили о многих важных вещах. Узнали, как создавать переменные и константы в Java, и чем они отличаются. Узнали о способах инициализации переменных. Разобрались с тем, что такое литералы и какие они бывают. А так же выполнили преобразование и приведение типов данных.
Скажем спасибо Егору за предоставленный материал.
В следующей статье мы будем изучать массивы. Если переменная — это вагон, то поездом будет массив. В общем, будет опять многобукав и многомерные массивы. Всем спасибо за внимание. Учитесь старательно!
Урок 4. Переменные и типы данных Java
Java — это типизированный язык, мы уже упоминали об этом ранее, это означает, что каждая переменная должна быть объявлена перед использованием: поэтому мы должны присвоить ей имя и тип.
Содержание
- Что такое тип
- Примитивные типы в Java
- Литералы
- long и int в Java
- Значение с плавающей запятой Java
- Символьные и строковые литералы
- Строки и числа
- Часто задаваемые вопросы
Тип — это набор характеристик, которым должно соответствовать любое значение, принимаемое переменной. Например: «быть целым числом», «быть последовательностью символов Юникода» и т. Д.
Примитивные типы в JavaТип переменной может быть создан разработчиком путем композиции из предопределенного набора типов, обычно называемых примитивными типами.
В Java есть 8 примитивных типов, и каждый из них предназначен для представления определенного типа информации и использования определенного количества памяти.
Кроме того, говоря об объявлении переменных, мы сказали, что «локальные» переменные должны быть инициализированы, чтобы избежать ошибок компиляции, это неверно для переменных экземпляра, для которых для каждого примитивного типа указано значение по умолчанию.
Тип | Кол-во памяти | Представленная информация | Значение по умолчанию |
byte | 8 бит | Переменная представляет значения в диапазоне от -128 до 127(включая крайние значения) | 0 |
short | 16 бит | Целые числа в диапазоне от -32768 до 32767 | |
int | 32 бит | Целые числа в диапазоне от -2147483648 до 2147483647 | 0 |
long | 64 бит | Целые числа в диапазоне от -9223372036854775808 до 9223372036854775807. 0.0L | |
float | 32 бит | Числа с плавающей запятой одинарной. В 32-битной версии, представляемый диапазон должен вычисляться с учетом знакового бита, 23-битной мантиссы и 8-битной экспоненты со значениями от -126 до 127. 0.0f | 0.0f |
double | 64 бит | Числа с плавающей запятой двойной. Точность представления чисел увеличивается за счет увеличения количества используемых битов. | 0.0d |
boolean | не указано, но достаточно одного бита | он служит для представления только двух значений: истина или ложь ( true false). Значение по умолчанию false | false |
char | 16 бит | Он используется для хранения символов кодировки Unicode ) в диапазоне [‘\u0000’, ‘\uffff’](в шестнадцатеричном формате). | \u0000 |
Следует добавить, что каждая переменная объектного типа (т. е. не примитивного типа) по умолчанию инициализируется специальным значением null.
Следует отметить, что сама официальная документация Java сообщает, что, хотя значения по умолчанию гарантированы для всех неинициализированных полей, не инициализировать переменные — плохая практика, и поэтому вам следует избегать этого.
Литералы
Примитивные типы — это элементы, с помощью которых могут быть построены все другие объекты, которые будут использоваться в программах, поэтому их следует рассматривать как специальные типы данных языка. Для этого необходимо использовать определенные методы, чтобы иметь возможность определять значения в коде.
Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска..
long и int в JavaЗначения для типов int и long могут быть выражены как целые числа с основанием 10, используя обычную позиционную запись:
int number= 42;
или в шестнадцатеричном представлении (Hex, base 16) с использованием суффикса ‘0x’ или двоичном (base 2, из версии 7 java) с использованием суффикса ‘0b’:
int number= 0x2A; // шестнадцатеричный int number= 0b00101010;// двоичный
Эти же литералы могут также использоваться для выражения байтовых и коротких значений, в то время как для выражения длинных значений используется буква ‘L’ (строчный символ также допустим, но не рекомендуется из-за его плохой читаемости, так как его можно спутать с числом ‘1’):
long bigLUE = 4242424242L;Значение с плавающей запятой Java
Значения нецелочисленного типа могут быть аналогичным образом выражены путем разделения десятичной части символом ‘. ’ (точка) и будут считаться типом double, если буква ‘F’ (или ‘f’) не будет отложена.
Литералы double могут оканчиваться буквой «D» (или «d»), если для удобства чтения это считается целесообразным (но не обязательно).
Также допускается так называемая научная запись для чисел с плавающей запятой, которая заключается в использовании буквы E(e), за которой следует число, выражающее степень 10, которая умножается на число, указанное перед ним:
double mille = 1000.0; double milleSci = 1.0e3; float milleFloat = 1000.0f;
Начиная с версии 7 Java, можно использовать символ подчеркивания (‘_’) во всех числовых литералах для повышения их читабельности, например, путем разделения тысяч:
float milleEasy = 1_000. 0f;
символ ‘_’ используется только для облегчения чтения и может использоваться только между парами чисел (не как первый или последний символ, не рядом с ‘.’ или другими символами, разрешенными в обозначениях).
Значения символьного типа могут быть выражены с помощью символов Unicode (UTF-16), заключенных в одинарные кавычки, которые в конечном итоге могут быть выражены в форме кодировки с использованием «escape-последовательности Unicode»:
char simbol = 'ñ'; char code = '\u00F1';
Также поддерживаются некоторые специальные представления (известные как escape-последовательности):
Побег | символ |
\b | backspace (назад) |
\t | табуляция |
\n | перевод строки (конец строки) |
\f | перевод страницы (конец страницы / новая страница) |
\r | возврат каретки |
\’ | отображение одинарной кавычки |
\” | отображение двойной кавычки |
\\ | обратная косая черта ( \) |
В Java, в дополнение к 8 примитивным типам, типы String и Number (и производные) также должны считаться специальными типами данных (обычно называемыми простыми объектами данных), которые каким-то образом действуют как аналог примитивных данных, где есть необходимость использовать объект, а не тип напрямую (разница станет понятнее в следующих уроках).
На данный момент достаточно знать, что переменные типа String- это последовательности, char которые можно инициализировать с помощью кавычек (двойных кавычек):
String author = «admin»;
В то время как типы Integer, Byte, Long, Float и Double(аналоги тех же примитивных типов, записанные первой строчной буквой) могут быть инициализированы теми же литералами, что и для соответствующих собственных типов, но все они по умолчанию инициализируются литералом null (читать null ), если мы явно не присваиваем им значение.
Компилятор почти всегда может автоматически преобразовывать примитивные типы в соответствующие им простые объекты (операция, называемая упаковкой и распаковкой), только некоторые особые случаи являются исключениями.
Часто задаваемые вопросы
В какой кодировке хранятся символы в переменной типа char:
Какие категории типов данных поддерживаются в Java:
Размер переменной типа char равен:
Список типов, в переменных которых хранят только целые числа:
У каждого примитивного типа есть аналог среди ссылочных (объектных) типов?
Размер переменной типа short равен:
Список типов, переменных которые могут хранить дробные числа:
Размер переменной типа int равен:
Типы данных
В C++ все переменные должны быть объявлены перед использованием. Переменная — это только имя, присвоенное ячейке памяти, все операции, выполняемые над переменной, влияют на эту ячейку памяти. Существует много разных типов данных. Переменные классифицируются в соответствии с их типом данных, который определяет тип информации, которая может храниться в них.
Типы данных в C++ подразделяются на три группы: Встроенные (примитивные), Пользовательские и Производное
В области числовой информации, например, есть целые числа и дробные числа. Есть отрицательные числа и положительные числа. Затем есть текстовая информация. Например, имена и адреса хранятся в виде групп символов. Когда вы пишете программу, вы должны определить, с какими типами информации она, скорее всего, столкнется.
Хотя C++ предлагает множество типов данных, в самом широком смысле их всего два: числовой и символьный . Числовые типы дара разбиты на две дополнительные категории: целые и с плавающей запятой. Целые числа — это целые числа, такие как 12, 157, -34 и 2. Числа с плавающей запятой имеют десятичную точку, например 23,7, 189,0231 и 0,987.
Целочисленные типы данных
Целочисленные переменные могут содержать только целые числа.
Целое число Пример
целоеExample.cpp
ПРИМЕЧАНИЕ.
- Размеры и диапазоны типов данных, показанные в таблице 2-6, являются типичными для многих систем. В зависимости от вашей операционной системы размеры и диапазоны могут отличаться.
- Литералы: Любое постоянное значение, записанное в программе.
- Оператор sizeof сообщит количество байтов памяти, используемых любым типом данных или переменной.
Целочисленные примеры
4 бита | |||||
---|---|---|---|---|---|
Целое число без знака | Целое число со знаком | ||||
Положительное целое число | Положительное целое число | Отрицательное целое число | |||
Двоичный | Десятичный | Двоичный | Двоичный | Десятичный | Десятичный |
0000 | 0 | 0 000 | 0 | 1 000 | -8 |
0001 | 1 | 0 001 | 1 | 1 001 | -7 |
0010 | 2 | 0 010 | 2 | 1 010 | -6 |
0011 | 3 | 0 011 | 3 | 1 011 | -5 |
0100 | 4 | 0 100 | 4 | 1 100 | -4 |
0101 | 5 | 0 101 | 5 | 1 101 | -3 |
0110 | 6 | 0 110 | 6 | 1 110 | -2 |
0111 | 7 | 0 111 | 7 | 1 111 | -1 |
1000 | 8 | 0 указывает положительный | 1 указывает отрицательное значение | ||
1001 | 9 | ||||
1010 | 10 | ||||
1011 | 11 | ||||
1100 | 12 | ||||
1101 | 13 | ||||
1110 | 14 | ||||
1111 | 15 |
Поскольку у типов данных есть минимальный и максимальный диапазон, вы не можете представить или сохранить все возможные числа в переменных.
Переполнение
Переполнение — это ситуация, когда вы пытаетесь сохранить число, превышающее максимальный диапазон для типа данных. Когда вы пытаетесь сохранить слишком большое положительное или отрицательное число, двоичное представление числа искажается, и вы получаете бессмысленный или ошибочный результат.
Недополнение
Недополнение — это ситуация, когда вы пытаетесь сохранить число, превышающее минимальный диапазон для типа данных. Когда вы пытаетесь сохранить слишком маленькое положительное или отрицательное число, двоичное представление числа искажается, и вы получаете бессмысленный или ошибочный результат.
Тип данных с плавающей запятой
Типы данных с плавающей запятой используются для определения переменных, которые могут содержать действительные числа. В C++ существует три типа данных, которые могут представлять числа с плавающей запятой.
- плавающий
- двойной
- длинный двойной
Пример данных с плавающей запятой
плавающийExample.cpp
ПРИМЕЧАНИЕ.
- Не существует беззнаковых типов данных с плавающей запятой. На всех машинах переменные типов данных float, double и long double могут хранить положительные или отрицательные числа.
- Компьютеры обычно используют нотацию E для представления значений с плавающей запятой. В нотации E число 47 281,97 будет равно 4,728197E4. Часть числа до E — это мантисса , а часть после E — степень числа 10. Когда число с плавающей запятой сохраняется в памяти, оно сохраняется как мантисса и степень числа 10.
Тип данных Char
Тип данных char используется для хранения отдельных символов. Переменная типа данных char может содержать один символ за раз.
Причина, по которой целочисленный тип данных используется для хранения символов, заключается в том, что символы внутренне представлены числами. Каждому персонажу присваивается уникальный номер. Наиболее часто используемый метод кодирования символов — ASCII , что означает Американский стандартный код для обмена информацией.
Когда символ сохраняется в памяти, фактически сохраняется числовой код. Когда компьютер получает указание вывести значение на экран, он отображает символ, соответствующий числовому коду.
Пример данных Char
charExample.cpp
ПРИМЕЧАНИЕ.
- В C++ символьные литералы заключаются в одинарных кавычек.
- Таблица ASCII
Тип данных bool
Выражения, имеющие истинное или ложное значение, называются Логические выражения . Булевы переменные имеют значение true или false
Пример данных bool
boolExample.cpp
ПРИМЕЧАНИЕ.
- Значение true представлено в памяти числом 1 , а значение false представлено числом 0 .
- Логические значения полезны для оценки условий, которые являются либо истинными, либо ложными .
- Когда формат boolalpha 9Установлен флаг 0004, логические значения вставляются/извлекаются по их текстовому представлению: true или false вместо целочисленных значений.
Объявление переменных с ключевым словом auto
* В C++ 11 представлен альтернативный способ определения переменных с использованием ключевого слова auto и значения инициализации. Вот пример:
       авто количество = 100; ← целое число
* Ключевое слово auto указывает компилятору определить тип данных переменной по значению инициализации:
       авто процентная ставка = 12,0; ← двойной
       auto stockCode = ‘D’; ← char
       auto customerNum = 459L; ← long
Типы данных и преобразование типов — построение графиков и программирование на Python
Обзор
Обучение: 10 мин.
Упражнения: 10 минВопросы
Цели
Объяснить основные различия между целыми числами и числами с плавающей запятой.
Объясните основные различия между числами и символьными строками.
Используйте встроенные функции для преобразования целых чисел, чисел с плавающей запятой и строк.
Каждое значение имеет тип.
- Каждое значение в программе имеет определенный тип.
- Integer (
int
): представляет положительные или отрицательные целые числа, такие как 3 или -512. - Число с плавающей запятой (
float
): представляет действительные числа, такие как 3,14159 или -2,5. - Строка символов (обычно называемая «строка»,
str
): текст.- Записывается либо в одинарных, либо в двойных кавычках (если они совпадают).
- Кавычки не печатаются при отображении строки.
Используйте встроенную функцию
, введите
, чтобы найти тип значения.- Используйте встроенную функцию
type
, чтобы узнать, какой тип имеет значение. - Работает и с переменными.
- Но помните: значение имеет тип — переменная — это просто метка.
печать(тип(52))
<класс 'целое число'>
фитнес = «средний» печать (тип (фитнес))
<класс 'ул'>
Типы управляют тем, какие операции (или методы) могут быть выполнены с заданным значением.
- Тип значения определяет, что программа может с ним делать.
печать(5 - 3)
печать('привет' - 'ч')
-------------------------------------------------- -------------------------- TypeError Traceback (последний последний вызов)в () ----> 1 print('привет' - 'ч') TypeError: неподдерживаемые типы операндов для -: 'str' и 'str'
Вы можете использовать операторы «+» и «*» для строк.
- «Добавление» символьных строк объединяет их.
full_name = 'Ахмед' + ' ' + 'Уолш' печать (полное_имя)
Ахмед Уолш
- Умножение строки символов на целое число N создает новую строку, состоящую из этой строки символов, повторенной N раз.
- Поскольку умножение — это многократное сложение.
разделитель = '=' * 10 печать (разделитель)
==========
Строки имеют длину (а числа — нет).
- Встроенная функция
len
подсчитывает количество символов в строке.
печать (длина (полное_имя))
- Но числа не имеют длины (даже нуля).
печать (длина (52))
-------------------------------------------------- -------------------------- TypeError Traceback (последний последний вызов)в <модуль>() ----> 1 печать (длина (52)) TypeError: объект типа 'int' не имеет len()
Должен преобразовывать числа в строки или наоборот при работе с ними.
- Невозможно добавить числа и строки.
печать (1 + '2')
-------------------------------------------------- -------------------------- TypeError Traceback (последний последний вызов)в () ----> 1 печать (1 + '2') TypeError: неподдерживаемые типы операндов для +: 'int' и 'str'
- Не разрешено, потому что неоднозначно: должно ли
1 + '2'
быть3
или'12'
? - Некоторые типы можно преобразовать в другие типы, используя имя типа в качестве функции.
печать (1 + интервал ('2')) печать (стр (1) + '2')
Может смешивать целые числа и свободно перемещаться в операциях.
- Целые числа и числа с плавающей запятой могут быть смешаны в арифметике.
- Python 3 автоматически преобразует целые числа в числа с плавающей запятой по мере необходимости.
print('половина', 1/2. 0) print('три в квадрате', 3.0 ** 2)
половина равна 0,5 три в квадрате 9,0
- Если мы заставим одну ячейку электронной таблицы зависеть от другой, и обновить последний, прежний обновляется автоматически.
- В языках программирования случается , а не .
переменная_один = 1 переменная_два = 5 * переменная_один переменная_один = 2 print('первая есть', variable_one, 'и вторая есть', variable_two)
первое равно 2, а второе равно 5
- Компьютер считывает значение
variable_one
при выполнении умножения, создает новое значение и присваивает егоvariable_two
. - После этого значение
variable_two
устанавливается в новое значение и не зависит отvariable_one
, поэтому его значение не изменяется автоматически при измененииvariable_one
.
Дроби
Какой тип значения 3. 4? Как узнать?
Решение
Это число с плавающей запятой (часто сокращенно «плавающее»). Это можно узнать с помощью встроенной функции
type()
.печать (тип (3.4))<класс 'плавающий'>
Автоматическое преобразование типов
Какой тип значения 3,25 + 4?
Решение
Это поплавок: целые числа автоматически преобразуются в числа с плавающей запятой по мере необходимости.
Результат= 3,25 + 4 печать (результат, 'есть', тип (результат))7.25 — это <класс с плавающей запятой>
Выберите тип
Тип значения (целое число, число с плавающей запятой или строка символов) вы бы использовали для представления каждого из следующих? Постарайтесь придумать несколько хороших ответов для каждой задачи. Например, в # 1, когда подсчет дней с помощью переменной с плавающей запятой имеет больше смысла, чем использование целого числа?
- Количество дней с начала года.
- Время, прошедшее с начала года до настоящего времени в днях.
- Серийный номер единицы лабораторного оборудования.
- Возраст лабораторного образца
- Текущее население города.
- Средняя численность населения города с течением времени.
Решение
Ответы на вопросы:
- Целое число, поскольку количество дней должно лежать в диапазоне от 1 до 365.
- С плавающей запятой, поскольку требуются дробные дни
- Строка символов, если серийный номер состоит из букв и цифр, иначе целое число, если серийный номер состоит только из цифр
- Это будет варьироваться! Как определить возраст экземпляра? целые дни с момента сбора (целое число)? дата и время (строка)?
- Выберите число с плавающей запятой для представления населения в виде больших агрегатов (например, миллионов) или целое число для представления населения в единицах отдельных лиц.
- Число с плавающей запятой, так как среднее значение может иметь дробную часть.
Типы делений
В Python 3 оператор
//
выполняет деление на целое (целое число), оператор/
выполняет операции с плавающей запятой. деление, а оператор%
(или по модулю ) вычисляет и возвращает остаток от целочисленного деления:печать ('5 // 3:', 5 // 3) печать('5/3:', 5/3) печать('5% 3:', 5% 3)5 // 3:1 5/3: 1,6666666666666667 5 % 3:2Если
num_subjects
— это количество субъектов, принимающих участие в исследовании, аnum_per_survey
— это номер, который может принять участие в одном опросе, напишите выражение, которое вычисляет количество необходимых опросов достучаться до всех один раз.Решение
Нам нужно минимальное количество опросов, которые охватывают всех один раз, т. е. округленное значение
num_subjects/ num_per_survey
. Это эквивалентно выполнению деления этажа с помощью//
и добавления 1. Перед деление нам нужно вычесть 1 из количества предметов, с которыми нужно иметь дело случай, когдаnum_subjects
делится без остатка наnum_per_survey
.количество_субъектов = 600 num_per_survey = 42 num_surveys = (num_subjects - 1) // num_per_survey + 1 print(num_subjects, 'subjects', num_per_survey, 'за опрос:', num_surveys)600 субъектов, 42 на опрос: 15
Строки в числа
Там, где это разумно,
float()
преобразует строку в число с плавающей запятой, иint()
преобразует число с плавающей запятой в целое число:print("строка для плавания:", float("3.4")) print("с плавающей запятой в int:", int(3.4))строка с плавающей запятой: 3.4 плавать в целое: 3Однако, если преобразование не имеет смысла, появится сообщение об ошибке.
print("строка для float:", float("Hello world!"))-------------------------------------------------- -------------------------- ValueError Traceback (последний последний вызов)в <модуле> ----> 1 print("строка для плавания:", float("Привет, мир!")) ValueError: не удалось преобразовать строку в число с плавающей запятой: «Привет, мир!» Учитывая эту информацию, что вы ожидаете от следующей программы?
Что он на самом деле делает?
Как вы думаете, почему это происходит?
print("дробная строка в int:", int("3.4"))Решение
Что вы ожидаете от этой программы? Было бы не так неразумно ожидать, что команда Python 3
int
выполнит преобразовать строку «3.4» в 3.4 и дополнительное преобразование типа в 3. В конце концов, Python 3 выполняет множество других магия — не в этом ли ее очарование?интервал ("3,4")-------------------------------------------------- -------------------------- ValueError Traceback (последний последний вызов)в <модуль> ----> 1 интервал ("3,4") ValueError: неверный литерал для int() с основанием 10: '3. 4' Однако Python 3 выдает ошибку. Почему? Чтобы быть последовательным, возможно. Если вы попросите Python выполнить два последовательных typecasts, вы должны преобразовать его явно в коде.
целое число (с плавающей запятой ("3,4"))
Арифметика с различными типами
Что из следующего вернет число с плавающей запятой
2.0
? Примечание: может быть несколько правильных ответов.первый = 1,0 второй = "1" третий = "1.1"
первое + число с плавающей точкой (второе)
с плавающей запятой (второй) + с плавающей запятой (третий)
первое + целое (третье)
первый + целое (с плавающей запятой (третий))
int(первый) + int(float(третий))
2,0 * секунды
Решение
Ответ: 1 и 4
Комплексные числа
Python предоставляет комплексные числа, которые записываются как
1. 0+2.0j
. Еслиval
— комплексное число, к его реальной и мнимой частям можно получить доступ, используя точечную нотацию какзнач.реал
изнач.имаг
.a_complex_number = 6 + 2j печать (a_complex_number.real) печать (a_complex_number.imag)6,0 2.0
- Как вы думаете, почему Python использует
j
вместоi
для мнимой части?- Что вы ожидаете от
1 + 2j + 3
?- Что вы ожидаете от
4j
? Как насчет4 j
или4 + j
?Решение
- Стандартная математическая обработка обычно использует
i
для обозначения мнимого числа. Однако, по сообщениям СМИ, была ранней конвенцией, созданной из электротехники, которая теперь представляет собой технически дорогую область для изменять. Stack Overflow предоставляет дополнительные пояснения и обсуждение.(4+2к)
4j
иСинтаксическая ошибка: недопустимый синтаксис
. В последних случаяхj
считается переменной и оператор зависит от того, определен лиj
, и если да, то его присвоенное значение.
Ключевые моменты
Каждое значение имеет тип.
Используйте встроенную функцию
, введите
, чтобы найти тип значения.Типы определяют, какие операции можно выполнять над значениями.
Строки можно добавлять и умножать.
Строки имеют длину (а числа — нет).
Должен преобразовывать числа в строки или наоборот при работе с ними.
Может свободно смешивать целые и плавающие числа в операциях.
Переменные изменяют значение только тогда, когда им что-то присваивается.