Python · Синтаксис · Начальный уровень
Цикл while
Упражнения по циклу while в Python: повторение действий, счётчики, суммы чисел, ввод до нужного условия, break, перебор строк и базовая обработка символов.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Счётчики, накопители и паттерн «сторожевого значения»
#Обход строк с помощью while
#Быстрый справочник: цикл while
#Упражнения:
Числа от 1 до 10.
#Выведите на печать (print) числа от 1 до 10 с помощью цикла while .
i = 1
Решение
i = 1
while i <= 10:
print(i)
i += 1
# или для примера можно условие поставить внутри цикла в if условиях
# и прервать цикл через break. В данном случае конечно лучше первый варинт,
# но варианты нужно посмотреть для фантазии:
i = 1
while True:
if i <= 10:
print(i)
i += 1
else:
break
# то же самое, только скомпановано по другому:
i = 1
while True:
if i > 10:
break
print(i)
i += 1
# в таком случае else не нужен (просто лишний), так как
# в случае break цикл прервется.
# это было чтоб вашу фантазию проработать на варианты.
Обратный отсчёт от 10.
#Выведите числа от 10 до 1 в обратном порядке.
i = 10
Решение
i = 10
while i >= 1:
print(i)
i -= 1
# или так можно: использовать условие больше нуля
i = 10
while i > 0:
print(i)
i -= 1
Числа до введённого значения.
#Пользователь вводит число. Выведите все числа от 1 до этого числа.
n = int(input("Введите число: "))
i = 1
Решение
n = int(input("Введите число: "))
i = 1
while i <= n:
print(i)
i += 1
# или так можно: начать с нуля, но печатать следующее число
n = int(input("Введите число: "))
i = 0
while i < n:
i += 1
print(i)
Только чётные до числа.
#Пользователь вводит число. Выведите только чётные числа от 1 до этого числа.
n = int(input("Введите число: "))
i = 1
Решение
n = int(input("Введите число: "))
i = 1
while i <= n:
if i % 2 == 0:
print(i)
i += 1
# второй вариант: сразу идти только по чётным числам
n = int(input("Введите число: "))
i = 2
while i <= n:
print(i)
i += 2
Сумма от 1 до 100.
#Найдите сумму всех чисел от 1 до 100 с помощью цикла while .
i = 1 total = 0
Решение
i = 1
total = 0
while i <= 100:
total += i
i += 1
print("Сумма:", total)
Сумма до введённого числа.
#Пользователь вводит число. Найдите сумму всех чисел от 1 до этого числа.
n = int(input("Введите число: "))
i = 1
total = 0
Решение
n = int(input("Введите число: "))
i = 1
total = 0
while i <= n:
total += i
i += 1
print("Сумма:", total)
# или так можно: прибавлять число и уменьшать его
n = int(input("Введите число: "))
total = 0
while n > 0:
total += n
n -= 1
print("Сумма:", total)
Таблица умножения.
#Пользователь вводит число. Выведите таблицу умножения для этого числа от 1 до 10.
n = int(input("Введите число: "))
i = 1
Решение
n = int(input("Введите число: "))
i = 1
while i <= 10:
print(f"{n} x {i} = {n * i}")
i += 1
# или так можно: сначала посчитать произведение
n = int(input("Введите число: "))
i = 1
while i <= 10:
result = n * i
print(f"{n} x {i} = {result}")
i += 1
Пароль до правильного ввода.
#Пользователь вводит пароль. Запрашивайте пароль снова, пока он не будет равен "python" .
password = input("Введите пароль: ")
Решение
password = input("Введите пароль: ")
while password != "python":
password = input("Неверно. Введите пароль ещё раз: ")
print("Пароль принят")
# ИЛИ
password = input("Введите пароль: ")
while True:
if password == "python":
break
password = input("Неверно. Введите пароль ещё раз: ")
print("Пароль принят")
# ОПЯТЬ ЖЕ ПОВТОРЮ такой момент, с пониманием которого бывают проблеммы:
1) Создавать (или пересоздавать) переменные внутри цикла можно, вроде password = ...
При заходе на новый "круг" цикла, просто значение в переменной заменитсья на новое.
Например, цикл который бесконечно делает print в терминал числа от 1 до 5:
num = 1
while True:
if num == 6:
num = 1
print(num)
num += 1
input() # просто чтоб тормозить выполнение до любого ввода.
# input никуда не сохраняется и не используется.
Сумма чисел до нуля.
#Пользователь вводит числа. Программа должна считать сумму введённых чисел, пока пользователь не введёт 0 .
total = 0
num = int(input("Введите число: "))
Решение
total = 0
num = int(input("Введите число: "))
while num != 0:
total += num
num = int(input("Введите число: "))
print("Сумма:", total)
# или так:
total = 0
while True:
num = int(input("Введите число: "))
if num == 0:
break
total += num
print("Сумма:", total)
Подсчёт цифр в числе.
#Пользователь вводит число. Подсчитайте, сколько цифр в этом числе. Можно без цикла решить любым способом.
num = int(input("Введите число: "))
count = 0
Решение
num = int(input("Введите число: "))
count = 0
if num == 0:
count = 1
else:
if num < 0:
num = -num # меняем знак на + (- на - = +)
while num > 0:
count += 1
num //= 10
print("Количество цифр:", count)
# или так можно без цикла, если помнить про строковое представление числа
num = int(input("Введите число: "))
text = str(abs(num))
count = len(text)
print("Количество цифр:", count)
Слово задом наперёд.
#Выведите слово в терминал задом-наперед несколькими способами: - через срез (чтоб вспомнить); - через цикл while a) сформировав при помощи цикла и индексов новый "перевернутый" объект строки; b) делая print символов с конца без переноса строк в терминале (параметр end= у print)
word = "иладеп"
Решение
# 1)
word = "иладеп"
print(word[::-1])
# 2)
word = "иладеп"
drow = ""
index = len(word) - 1
while index > -1:
drow += word[index]
index -= 1
print(drow)
# 3)
word = "иладеп"
index = len(word) - 1
while index > -1:
print(word[index], end="")
index -= 1
else:
print() # в конце перенести строку в терминале
Текст между одинаковыми символами.
#Тут я наверно заигрался и это задание наверно не простое. Но не страшно, давайте попробуем не спеша пошагово продумать что нужно делать. Условие: Есть строка с любой информацией, например: 'Компания ООО "Рога и Копыта" выиграли тындырындын по закупке чего-то.' Нужно из нее вырезать кусок между какими-то одинаковыми символами. Например в данном случае чтоб получить название компании, нужно вырезать между кавычками. Метод строк split не использовать. Нужно использовать только метод index!! Можете поэкспериментировать и решить задание без цикла и с циклом, как хотите. P.S. Понадобятся срезы, и сделайте запрос текста и запрос символа между повторением которого вырезать через input. P.P.S См. таблицу методов строк. Метод index возвращает индекс ПЕРВОГО вхождения символа в строке (второго не возвращает (если не "намутить" что он станет первым в какой-то промежуточной строке") ).
text = input("Введите текст: ")
symbol = input("Введите символ который по краям фрагмента текста: ")
Решение
text = input("Введите текст: ")
symbol = input("Введите символ который по краям фрагмента текста: ")
start_index = text.index(symbol) + 1 # индекс начала получили
new_text = ""
while start_index < len(text):
char = text[start_index] # берем символ из текста
if char == symbol: # когда встретился "второй" символ то всё.
break
new_text += char
start_index += 1
print(new_text)
# ИЛИ только срезами. Внимательно с индексами и промежуточной строкой.
text = input("Введите текст: ")
symbol = input("Введите символ который по краям фрагмента текста: ")
start = text.index(symbol) + 1 # индекс начала получили
# давайте сразу срежем с этого момента до конца текста:
part = text[start:] # срез с start до конца
stop = part.index(symbol) # получаем индекс второго вхождения symbol
result = text[start:stop + start]
# или
result = part[:stop]
print(result)
Ступеньки из букв.
#Тут всё просто: Есть строка "ступеньки", выведите ее в терминал вот так: с -т --у ---п ----е -----н ------ь -------к --------и
text = "ступеньки"
Решение
text = "ступеньки"
# первый вариант:
index = 0
while index < len(text):
for_print = "-" * index + text[index]
print(for_print)
index += 1
# второй вариант:
index = 0
while index < len(text):
# метод строк rjust добавляет до нужной длины слева то что вы указали в нем
char = text[index]
for_print = char.rjust(index+1, " ")
print(for_print)
index += 1
# второй вариант сокращенно то же самое, к объекту символа применяем метод:
index = 0
while index < len(text):
for_print = text[index].rjust(index+1, " ")
print(for_print)
index += 1
# ступеньки наоборот:
text = text[::-1]
index = 0
while index < len(text):
for_print = text[index].rjust(len(text) - index, " ")
print(for_print)
index += 1
Удаление пунктуации из текста.
#Есть перечень знаков пунктуации и спец. символов: punctuation = "!@#$%^&./,?|" И есть строка текста, в котрой они могут присутствовать. Сформируйте новую строку без знаков пунктуации, оставив только текст, пробелы сохранить. Так нужно вот и всё.
punctuation = "!@#$%^&./,?|" text = "Наверно на этом упражнении закончим. Хватит! Мы хотим отдыхать! #@&#@&!!!"
Решение
punctuation = "!@#$%^&./,?|"
text = "Наверно на этом упражнении закончим. Хватит! Мы хотим отдыхать! #@&#@&!!!"
new_text = ""
idx = 0
while idx < len(text):
char = text[idx]
if char not in punctuation:
new_text += char
idx += 1
else:
text = text.strip() # почистим от пробелов по бокам. Только по бокам.
print(new_text)