Циклы в программировании. Цикл while в Python
Циклы являются такой же важной частью структурного программирования, как условные операторы. С помощью циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.
«While» переводится с английского как «пока». Но не в смысле «до свидания», а в смысле «пока имеем это, делаем то».
Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:
while логическое_выражение
Это похоже на условный оператор if . Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if , если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.
В случае while , после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.
Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, «происходит выход из цикла».
Рассмотрите блок-схему цикла while .
На ней ярко-голубыми прямоугольниками обозначена основная ветка программы, ромбом – заголовок цикла с логическим выражением, бирюзовым прямоугольником – тело цикла.
С циклом while возможны две исключительные ситуации:
- Если при первом заходе в цикл логическое выражение возвращает False , то тело цикла не выполняется ни разу. Эту ситуацию можно считать нормальной, так как при определенных условиях логика программы может предполагать отсутствие необходимости в выполнении выражений тела цикла.
- Если логическое выражение в заголовке while никогда не возвращает False , а всегда остается равным True , то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла ( break ) или вызовов функций выхода из программы – quit() , exit() в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.
Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.
Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.
Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:
n = input("Введите целое число: ") while type(n) != int: try: n = int(n) except ValueError: print("Неправильно ввели!") n = input("Введите целое число: ") if n % 2 == 0: print("Четное") else: print("Нечетное")
Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.
Примечание 2. В выражении type(n) != int с помощью функции type() проверяется тип переменной n . Если он не равен int , то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int , то данное логическое выражение возвращает ложь.
Примечание 3. Оператор % в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.
Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n . В заголовке while проверяется тип n . При первом входе в цикл тип n всегда строковый, то есть он не равен int . Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.
Здесь в ветке try совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except пропускается, и поток выполнения снова возвращается к заголовку while .
Теперь n связана с целым числом, следовательно, ее тип int , который не может быть не равен int . Он ему равен. Таким образом логическое выражение type(n) != int возвращает False , и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.
Вернемся назад. Если в теле try попытка преобразования к числу была неудачной, и было выброшено исключение ValueError , то поток выполнения программы отправляется в ветку except и выполняет находящиеся здесь выражения, последнее из которых просит пользователя снова ввести данные. Переменная n теперь имеет новое значение.
После завершения except снова проверяется логическое выражение в заголовке цикла. Оно даст True , так как значение n по-прежнему строка.
Выход из цикла возможен только тогда, когда значение n будет успешно конвертировано в число.
Рассмотрим следующий пример:
total = 100 i = 0 while i 5: n = int(input()) total = total - n i = i + 1 print("Осталось", total)
Сколько раз «прокрутится» цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.
- Сначала переменная i равна 0. В заголовке цикла проверяется условие i < 5 , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.
- Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.
- Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.
- Три меньше пяти. На этой итерации i присваивается 4.
- Четыре по-прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.
«Смысловая нагрузка» данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: «цикл со счетчиком». Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .
В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.
Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:
total = 100 while total > 0: n = int(input()) total = total - n print("Ресурс исчерпан")
Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.
Самое главное для цикла while – чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False . Иначе произойдет зацикливание.
Примечание 1. Не обязательно в выражениях total = total — n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n и i += 1 .
Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i — 5 , или i -= 5 .
Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i . Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).
Практическая работа
- Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.
- Используя цикл while , выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как ** . Фрагмент вывода:
. 32 64 128 256 512 1024 .
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Какое значение 1 2 вернет выражение в среде idle
Python задачки
14.5K subscribers
457 photos
Задачки по питону:
алгоритмы, регулярные выражения, вопросы с интервью, задачи для Junior Python Developer.
About
Blog
Apps
Platform
Python задачки
14.5K subscribers
Python вопрос: С помощью какого из нижеприведенных способов можно открыть файл на запись?
Anonymous Quiz
f = open(“test.txt”,”w”)
f = open(“test.txt”,”write”)
f = open(“w”,”test.txt”)
f = open(“write”,”test.txt”)
Посмотреть ответы
3.7K voters 10.3K views 11:50
Python вопрос: Что произойдет с файлом в результате выполнения данного оператора: f = open (« test.txt »,« w »)?
Anonymous Quiz
Ничего не произойдет, если код, следующий за ним, не записывается в файл
Python сохранит содержимое файла и добавит в конец содержимое следующего кода
Ничего не произойдет
Произойдет перезапись содержимого файла
Посмотреть ответы
3.5K voters 9.8K views 11:55
Ребят, мы с партнерами из @pythonist_ru разработали общий тест на основе вопросов с нашего канала. Пишите в комментариях, нравится ли вам такой формат и что можно улучшить. Планируются тесты разных уровней(junior, middle, senior) и по разным тематикам.
Подскажите код для вывода на Pythone
Подскажите код для вывода данных условий
Перечислите все слова данного предложения, которые состоят из тех же букв, что и первое слово.
Подскажите код для вывода товара из БД интернет магазина
Подскажите код (php) для интернет магазина Код для вывода товара из БД. На пример такого типа .
Подскажите код SQL для вывода отчета в OnNote на Access
у меня отчет отправляет на OneNot 2010- nul Мне говорили что есть код на sql , чтоб оно выводил.
Подскажите,как составить код для написание программы ввода 16ти значного числа и вывода
1. Подготовьте и отладьте программу для ввода трехзначного числа с клавиатуры в 10-ой системе.
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Сообщение было отмечено katya258 как решение
Решение
Если количество вопросов хранится в переменной questions, а количество правильных ответов в переменной correct_ansvers, то
1 2 3 4 5 6 7 8 9 10 11
percents = correct_ansvers / questions if percents 0.55: grade = 2 elif percents 0.75: grade = 3 elif percents 0.86: grade = 4 else: grade = 5 print(f'Оценка: ')
Регистрация: 30.04.2020
Сообщений: 31
Выводит в конце всегда оценку «2»
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Покажите пример использования. Вы, видимо, делаете что-то не так.
Регистрация: 30.04.2020
Сообщений: 31
Полностью весь код?
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Ну если вы не хотите его выкладывать, то хотя бы ту часть, где идёт взаимодействие с моим кодом.
Регистрация: 30.04.2020
Сообщений: 31
otv = input(‘9 вопрос: Если предположить, что класс Mydict наследует класс dict, то каким класс dict является по отношению к классу Mydict? 1) дочерним 2) подклассом 3) базовым 4) Нет правильного варианта ответа’)
if otv in («1», «2», «3», «4»):
a=1
else:
a=0
while a!=1:
otv = input(‘Введите вариант ответа от 1 до 4\n’)
if otv in («1», «2», «3», «4»):
break
if otv == ‘3’:
print (‘Верно!’)
correct_ansvers
elif otv in (‘1’, ‘2’, ‘4’):
print (‘Неверно, правильный вариант ответа 3’)
percents = correct_ansvers / questions
if percents < 0.55:
grade = 2
elif percents < 0.75:
grade = 3
elif parcents < 0.86:
grade = 4
else:
grade = 5
print(f’Оценка: ‘)
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Когда вы пишете сообщение, то на панели форматирования есть кнопка PYTHON нажмите её и впишите свой код в теги. И не забудьте про отступы. А-то такую кашу сложно разобрать.
Регистрация: 30.04.2020
Сообщений: 31
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
otv = input('9 вопрос: Если предположить, что класс Mydict наследует класс dict, то каким класс dict является по отношению к классу Mydict? 1) дочерним 2) подклассом 3) базовым 4) Нет правильного варианта ответа') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '3': print ('Верно!') correct_ansvers elif otv in ('1', '2', '4'): print ('Неверно, правильный вариант ответа 3') percents = correct_ansvers / questions if percents 0.55: grade = 2 elif percents 0.75: grade = 3 elif parcents 0.86: grade = 4 else: grade = 5 print(f'Оценка: ')
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Этот код вообще не должен работать. Он должен падать с ошибкой. Для начала вы должны где-нибудь вверху кода в переменную questions записать количество вопросов и записать в переменную correct_ansvers ноль.
Что по вашему происходит на 12 строке? Там должно быть
correct_ansvers += 1
Регистрация: 30.04.2020
Сообщений: 31
не работает
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Покажите весь код в текущем состоянии.
Регистрация: 30.04.2020
Сообщений: 31
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
questions = 9 a=0 correct_ansvers = 0 otv = input('Это тест по Python. Желаете его пройти? 1) Да 2) Нет') if otv in ("1", "2"): a=1 while a!=1: print ('Введите цифру от 1 до 2') otv = str(input()) if otv in ("1", "2"): a=1 if otv == '1': print('Тогда начнем!') if otv == '2': print ('Очень жаль!') exit (0) otv = input('1 вопрос: Какие из приведенных стилей программирования поддерживает язык Python? 1) Процедурный 2) Объектно-ориентированный 3) Функциональный 4) Смешанный') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '4': print ('Верно!') correct_ansvers += 1 elif otv in ('1', '2', '3'): print ('Неверно, правильный вариант ответа является 4') otv = input('2 вопрос: Какими способом можно объявлять переменные в Python? 1) a=5 2) a=int(5) 3) int a 4) Нет правильного варианта ответа') if otv in ("1", "2", "3", "4"): a=2 else: a=0 while a!=2: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '2': print('Верно!') correct_ansvers += 1 elif otv in ('1', '3', '4'): print ('Неверно, правильные варианты ответа 2') otv = input('3 вопрос: Какая функция отвечает за вывод на экран? 1) file() 2) out(a) 3) print(a) 4) Нет правильного варианта ответа') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите варианты ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '3': print ('Верно!') correct_ansvers += 1 elif otv in ('1', '2', '4'): print ('Неверно, правильный вариант ответа является 3') otv = input('4 вопрос: Какая функция отвечает за открытие файла? 1) file() 2) open() 3) open_file() 4) Нет правильного варианта ответа') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '2': print ('Верно!') correct_ansvers += 1 elif otv in ('1', '3', '4'): print ('Неверно, правильный вариант ответа является 2') otv = input('5 вопрос: Что делает команда import? 1) импортирует файл модуля 2) создает функцию 3) удаляет файл 4) Нет правильного варианта ответа ') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '1': print ('Верно!') correct_ansvers += 1 elif otv in ('2', '3', '4'): print ('Неверно, правильный вариант ответа является 1') otv = input('6 вопрос:Выберете вариант правильного удаления переменной а. 1) del(a) 2) delete(a) 3) delete=a 4) Нет правильного варианта ответа ') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '2': print ('Верно!') correct_ansvers += 1 elif otv in ('1', '3', '4'): print ('Неверно, правильный вариант ответа является 2') otv = input('7 вопрос: Какое значение 1//2 вернет выражение в среде IDLE? 1) 0 2) 0.5 3) 0.50 4) Нет правильного варианта ответа') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '1': print ('Верно!') correct_ansvers += 1 elif otv in ('2', '3', '4'): print ('Неверно, правильный вариант ответа 1') otv = input('8 вопрос: Как называется встроенный в языке Python тип данных неупорядоченной коллекции из нуля или более пар ключ-значение? 1) dict 2) set 3) list 4) frozenset') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '1': print ('Верно!') correct_ansvers += 1 elif otv in ('2', '3', '4'): print ('Неверно, правильный вариант ответа 1') otv = input('9 вопрос: Если предположить, что класс Mydict наследует класс dict, то каким класс dict является по отношению к классу Mydict? 1) дочерним 2) подклассом 3) базовым 4) Нет правильного варианта ответа') if otv in ("1", "2", "3", "4"): a=1 else: a=0 while a!=1: otv = input('Введите вариант ответа от 1 до 4\n') if otv in ("1", "2", "3", "4"): break if otv == '3': print ('Верно!') correct_ansvers += 1 elif otv in ('1', '2', '4'): print ('Неверно, правильный вариант ответа 3') percents = correct_ansvers / questions if percents 0.55: grade = 2 elif percents 0.75: grade = 3 elif parcents 0.86: grade = 4 else: grade = 5 print(f'Оценка: ')
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052
Всё работает. Я проверил. Что не работает у вас?
И ещё, хоть это и не касается темы, но у вас не верны вопросы 2 и 6
Во втором вопросе правильными должны быть варианты 1 и 2, а у вас верный только вариант 2
В шестом вопросе правильным должен быть вариант 4, а у вас верный вариант 2
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как такой код выглядел бы на Pythone?
require’watir-webdriver’ browser = Watir::Browser.new browser.goto "https://www.google.com".
DirectX 9.0 Ищу нормальный рабочий код для вывода текста. В книгах код не работает!
Подскажите нормальный рабочий код для вывода текста на экран. Сложность в том, что при разных.
Javascript-код для вывода дерева элементов страницы, с которой этот код запущен
Всем привет. Возникла трудность при изучении javascript, а именно с темой, связанной с DOM. Не могу.
Подскажите скрипт для вывода прямоугольной части изображения (для миниатюры новости)
Киньте плз хороший, простой в освоении скрипт для обрезки и вывода обрезанного изображения. Нужен.
Модификаторы вывода для printf. Подскажите.
Ситуация такая: заполняю файл периодически новыми данными, они идут в строку через пробелы. Но так.
Подскажите плагин для вывода случайных записей
подскажите пожалуйста плагин, с помощью которого можно реализовать вывод нескольких случайных.
Или воспользуйтесь поиском по форуму:
Введение. Язык программирования Python
В рамках данного курса мы будем изучать программирование на примере современного языка программирования – Python 3. Его основные достоинства:
- Кроссплатформенность и бесплатность.
- Простой синтаксис и богатые возможности позволяют записывать программы очень кратко, но в то же время понятно.
- По простоте освоения язык сравним с бейсиком, но куда более богат возможностями и значительно более современен.
- Богатая стандартная библиотека, возможность разработки промышленных приложений (для работы с сетью, GUI, базами данных и т.д.)
Для программирования на языке Python вам понадобится: 1. Консольный интерпретатор языка. 2. Среда разработки (которая включает в себя текстовый редактор). Для установки консольного интерпретатора языка Python Последний дистрибутив версии 3.7.2 можно скачать со страницы https://www.python.org/downloads/release/python-372/
Между различными версиями языка Python есть существенные различия, поэтому рекомендуется использование версии 3.4.1 или более поздней. В дистрибутивах Linux Python 3 может быть уже установлен в вашей системе. Попробуйте ввести в консоли команду python3. Если команда не работает, попробуйте найти в репозитории и установить пакет python3. Для языка Python существует много разных сред разработки, как коммерческих, так и бесплатных. Можно использовать IDLE – стандартную среду разработки для Python, но мы рекомендуем среду Wing IDE 101 – простую кроссплатформенную бесплатную среду для обучения. Cайт: http://www.wingware.com/downloads/wingide-101 Последняя версия Wing IDE: 6.1.4.
Порядок установки важен: сначала установите интерпретатор, а только потом среду разработки, тогда она автоматически будет поддерживать установленный ранее интерпретатор. После установки Wing IDE из дистрибутива обязательно установите обновления к системе (меню “Help” – “Checkfor updates”).
Структура программы. Понятие переменной. Оператор присваивания.
Для начинающих изучать программирование поясним, что программой называется последовательность команд (операторов), записанная на языке исполнителя программы. В нашем случае исполнителем программ будет Python-интерпретатор, поэтому программы нужно записывать согласно правилам синтаксиса данного языка.
В языке Python у программы нет никакой шаблонной структуры (обязательные к написанию вещи в начале и конце программы). Вам достаточно просто перечислить операторы в том, порядке, в котором вы хотите, чтобы они выполнились. Очень важное правило языка Python заключается в том, что каждый оператор нужно записывать в отдельной строке. Также большое значение имеет количество отступов от начала строки. Об отступах мы расскажем подробнее позднее.
Прежде чем начать рассмотрение операторов языка Python, познакомимся с очень важным в программировании понятием – понятием переменной. Переменной называется именованный объект определённого типа, который может менять своё значение в ходе выполнения программы. С каждой переменной связана область оперативной памяти компьютера, в которую сохраняется текущее значение переменной. Тип переменной определяет множество допустимых значений переменной, а также множество операций, которые можно применить к переменной. Рассмотрим примеры. Пусть переменная имеет целый числовой тип. Тогда очевидно, что к ней можно применять различные арифметические действия, например, сложение, умножение или деление нацело. Если же переменная имеет, например, строковый тип, то понятно, что для неё будут определены совершенно другие операции (например, конкатенация или сцепление).
Для того чтобы задать переменной начальное значение или изменить её текущее значение используется оператор присваивания. Его синтаксис очень простой: записывается имя переменной, затем знак равенства « = », а затем значение, которое мы хотим присвоить данной переменной. Например, запись a = 234 означает, что переменной a присвоено значение 234 .
Переменной не обязательно присваивать константу (конкретное значение). Можно также копировать значение одной переменной в другую. Рассмотрим следующую последовательность операторов присваивания:
a = 234 v = a
В этом случае обе переменные ( a и v ) будут иметь значение 234 .
Также можно присвоить переменной значение какого-то выражения (например, арифметического). В этом случае сначала всё вычисляется, а потом переменной присвоится результат вычислений выражения. Например:
a = 234 + 4
В этом примере переменной присвоится значение 238 .
В состав выражения могут также входить переменные (записываются их имена). В этом случае, при вычислении подставляются их текущие значения. Например:
a = 234 v = a + 3
В этом примере переменной v присвоится значение 237 , поскольку в момент вычисления текущее значение переменной a равно 234 .
Ещё более интересный случай – использование самой переменной в выражении. Например:
a = 234 a = a + 3 v = a + 3
В этом примере происходит следующее. Сначала переменной a присваивается значение 234 . Затем, при вычислении первого выражения используется именно это текущее значение. Результат вычислений 237 , который и записывается в переменную a . Затем при вычислении второго выражения текущее значение переменной a уже равно 237 , поэтому в переменную v запишется 240 .
Теперь рассмотрим пример простейшей программы. Например, было задание вычислить длину гипотенузы прямоугольного треугольника по ее катетам. Запустите текстовый редактор среды программирования и напишите следующий текст:
a = 179 b = 197 c = (a ** 2 + b ** 2) ** 0.5 print(c)
В первой строке переменной a присваивается значение 179 , затем переменной b присваивается значение 197 , затем переменной c присваивается значение арифметического выражения, равного длине гипотенузы (как легко догадаться, ** – это операция возведения в степень, а возведение в степень 0.5 соответствует извлечению квадратного корня). После этого значение переменной c выводится на экран. Далее, найдите в среде кнопку «выполнить программу» (зеленый треугольник в wing). Если вы написали всё без ошибок, то на экране в отдельном окне появится результат работы программы, а в противном случае – сообщение об ошибке.
При выполнении программы значения вычисленных выражений не выводятся на экран, если программу специально не попросить их вывести. Для вывода данных на экран используется специальная функция print .
Вывод данных. Функция print.
Стандартная функция print служит для вывода информации. Правило ее использования: после слова print в скобках через запятую перечисляются параметры, которые мы хотим вывести на экран (напечатать). Число этих параметров не ограничено. Запятая служит разделителем между параметрами:
print(параметр, параметр, . параметр)
Существует три вида параметров: константы, переменные и выражения (например, арифметические выражения).
Константы бывают числовые, логические и строковые. Числовые константы – это просто различные числа, целые и вещественные (вещественные числа ещё называют действительными). Любой текст, набранный с клавиатуры и заключенный в апострофы (одиночные кавычки) или двойные кавычки, называется строковой константой. Если в текст нам нужно поместить апостроф, например, в слове O’key , то его надо заключать в двойные кавычки и наоборот. Пока что ограничимся этими двумя типами констант, а о логических поговорим позднее.
Все параметры в операторе print независимы друг от друга, поэтому в одном и том же операторе могут встречаться параметры разных типов, в произвольном порядке. При выполнении оператора вывода все параметры будут напечатаны в одной строке в том же порядке, в каком они перечислены в списке параметров. Любая константа числовая или строковая будет напечатана так, как вы ее написали в вызове print (в строковой константе начальный и конечный апострофы напечатаны не будут); вместо переменной на экране появится ее значение, а вместо арифметического выражения — результат его вычисления. Рассмотрим пример.
a = 1 b = 2 print(a, '+', b, '=', a + b)
В данном случае будет напечатан текст
1 + 2 = 3
– сначала выводится значение переменной a, затем строка из знака “ + ”, затем значение переменной b , затем строка из знака “ = ”, наконец, значение суммы a + b .
Обратите внимание, выводимые значения разделяются одним пробелом. Но такое поведение можно изменить: можно разделять выводимые значения двумя пробелами, любым другим символом, любой другой строкой, выводить их в отдельных строках или не разделять никак. Для этого нужно функции print передать специальный именованный параметр, называемый sep , равный строке, используемой в качестве разделителя ( sep — аббревиатура от слова separator, т.е. разделитель). По умолчанию параметр sep равен строке из одного пробела и между значениями выводится пробел. Чтобы использовать в качестве разделителя, например, символ двоеточия нужно передать параметр sep , равный строке ‘:’ :
print(a, b, c, sep=':')
Аналогично, для того, чтобы совсем убрать разделитель при выводе нужно передать параметр sep , равный пустой строке:
print(a, '+', b, '=', a + b, sep='')
Для того, чтобы значение каждого параметра выводилось с новой строки, нужно в качестве параметра sep передать строку, состоящую из специального символа новой строки, которая задается так:
print(a, b, sep='\n')
Символ обратного слэша в текстовых строках является указанием на обозначение специального символа, в зависимости от того, какой символ записан после него. Наиболее часто употребляется символ новой строки ‘\n’ . А для того, чтобы вставить в строку сам символ обратного слэша, нужно повторить его два раза: ‘\\’ .
Вторым полезным именованным параметром функции print является параметр end , который указывает на то, что выводится после вывода всех значений, перечисленных в функции print . По умолчанию параметр end равен ‘\n’ , то есть следующий вывод будет происходить с новой строки. Этот параметр также можно исправить. Например, для того, чтобы убрать все дополнительные выводимые символы можно вызывать функцию print так:
print(a, b, c, sep='', end='')
Здесь в апострофы помещена пустая строка (отсутствие символов), а не пробел.
Ввод данных. Функция input.
Вернёмся к рассмотренному выше примеру простейшей программы (о прямоугольном треугольнике). Неудобство написанной программы заключается в том, что если мы захотим вычислить гипотенузу другого треугольника, то нам придётся менять значения катетов в тексте программы. Это неудобно, лучше, чтобы текст программы не менялся, а программа запрашивала бы у пользователя данные, необходимые для решения задачи, то есть запрашивала бы значения двух исходных переменных a и b . Для этого будем использовать функцию input() , которая считывает строку с клавиатуры и возвращает значение считанной строки, которое сразу же присвоим переменным:
a = input() b = input()
Правда, функция input всегда возвращает текстовую строку, а нам нужно сделать так, чтобы переменные имели целочисленные значения. Поэтому сразу же после считывания выполним преобразование типов при помощи функции int , и запишем новые значения в переменные a и b .
a = int(a) b = int(b)
Можно объединить считывание строк и преобразование типов, если вызывать функцию int для того значения, которое вернет функция input :
a = int(input()) b = int(input())
Теперь мы можем, не меняя исходного кода программы, многократно использовать ее для решения различных задач. Для этого нужно запустить программу и после запуска программы ввести с клавиатуры два числа, нажимая после каждого числа клавишу Enter. После этого переменные получат соответствующие значения.
Основные типы данных. Операции. Преобразование типов.
Выше мы упоминали числовые и строковые типы переменных. Остановимся на них более подробно. Числа записываются последовательностью цифр, также перед числом может стоять знак минус, а строки записываются в одинарных кавычках. 2 и ‘2’ – это разные объекты, первый объект – число, а второй – строка.
Кроме целых чисел есть и другой класс чисел: действительные (вещественные) числа, представляемые в виде десятичных дробей. Они записываются с использованием десятичной точки, например 2.0 . В каком-то смысле 2 и 2.0 имеют равные значение, но это – разные объекты.
Основные операции для чисел:
- A + B — сумма;
- A — B — разность;
- A * B — произведение;
- A / B — частное;
- A ** B — возведение в степень. Полезно помнить, что квадратный корень из числа x — это x ** 0.5 , а корень степени n – это x ** (1 / n) .
Есть также унарный вариант операции « – » (минус), то есть операция с одним аргументом. Она возвращает число, противоположное данному. Например: -A .
Полезной в арифметических выражениях часто бывает и функция abs(x), где x — произвольное арифметическое выражение. Она возвращает значение модуля x (|x|).
В выражении может встречаться много операций подряд. Как в этом случае определяется порядок действий? Например, чему будет равно 1 + 3 * 2 ** 3 + 1 ? В данном случае ответ будет 26, так как сначала выполняется возведение в степень, затем – умножение, затем — сложение.
Более общие правила определения приоритетов операций такие:
- Выполняются возведения в степень справа налево, то есть 3 ** 3 ** 3 — это число 3 в степени 27 , а не 27 в степени 3 .
- Выполняются унарные минусы (отрицания).
- Выполняются умножения и деления слева направо. Операции умножения и деления имеют одинаковый приоритет.
- Выполняются сложения и вычитания слева направо. Операции сложения и вычитания имеют одинаковый приоритет.
Операции деления
Операция деления / всегда возвращает значение типа float , независимо от того, какого типа делимое и делитель (операнды). Также функция возведения в степень возвращает значение типа float , если показатель степени — отрицательное число. Но есть и специальная операция целочисленного деления, выполняющегося с отбрасыванием дробной части, которая обозначается // . Она возвращает целое число: целую часть частного. Обратите внимание на результат деления при отрицательном делимом. Например:
>>> 17 // 3 5 >>> -17 // 3 -6
Другая близкая ей операция: это операция взятия остатка от деления, обозначаемая % :
>>> 17 % 3 2 >>> -17 % 3 1
Обратите внимание, что 3 % 5 = 3 , а не 0 или 2 .
Основные операции над строками:
- A + B — конкатенация (сцепка одной строки с другой, то есть строка В будет приписана в конец строки А);
- A * n — повторение строки A n раз, значение n должно быть целого типа. Например, нельзя вычислить ‘ABC’; * 10.0 .
>>> 'Hello'+'world' Helloworld >>> A = 'ABC' >>> A * 4 ABCABCABCABC
Подумайте, что надо было сделать, чтобы слова Hello и world были разделены пробелом в результирующей строке.
Преобразование типов
Иногда бывает полезно целое число записать, как строку. И, наоборот, если строка состоит из цифр, то полезно эту строку представить в виде числа, чтобы дальше можно было выполнять с ней арифметические операции. Для этого используются функции, одноименные с именем типа, то есть, int для целых чисел, float для вещественных чисел, str для строк. Например, int(‘123’) вернет целое число 123 , а str(123) вернет строку 123 .
Пример полной программы
Пусть нам дана следующая задача: найти сумму цифр заданного четырёхзначного числа и вывести полученный результат. Решение этой задачи состоит из следующих этапов – ввод исходного числа, выделение из него отдельных цифр, нахождение суммы и вывод результата. Первое, третье и четвёртое из перечисленных действий являются очевидными. Рассмотрим, как делается второе (выделение цифр).
Очевидно, что для получения младшей цифры числа нужно взять остаток от деления его на 10 , а для получения старшей цифры – нужно число нацело поделить на 1000 . Для того же, чтобы получить вторую с конца цифру (число десятков), можно выполнить следующие два действия – сначала разделить число на 10 нацело, а потом из полученного числа взять остаток от деления на 10 . Если применить описанные действия к числу 3254 , то после деления нацело на 10 останется число 325 , и остатком от деления на 10 будет цифра 5 , которую нам как раз и требовалось найти. Теперь запишем полный код программы.
n = int(input()) c1 = n // 1000 c2 = n // 100 % 10 c3 = n // 10 % 10 c4 = n % 10 print('сумма цифр числа', n, 'равна', c1 + c2 + c3 + c4)