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)