Циклы

Циклы - это способ сделать что-то несколько раз. Например, мы можем 3 раза напечатать мяу, не используя цикл:

print("мяу")
print("мяу")
print("мяу")

Код с использованием цикла будет удобнее писать, читать, изменять.

while цикл


i = 3
while i != 0:
	print("мяу")
	i = i - 1

+=, -= - операторы удобны для изменения переменных, так i = i - 1 можно записать i -= 1

i = 0
while i < 3:
	print("мяу")
	i += 1

for цикл


for i in [0, 1, 2]:
	print(i, "мяу")

i последовательно принимает значения из списка [0, 1, 2]. Тип данных list (список). В цикле for удобно использовать неизменяемый тип range (диапазон).

class range(stop)
class range(start, stop[,step])

С использованием range получим:

for i in range(3):
	print(i, "мяу")

Тест ввода пользователя

Допустим, программа ждёт от пользователя положительное целое число. Можно использовать цикл для организации проверки правильности ввода

while True: 
    n = int(input("Введите n: ")) 
    if n > 0: 
        break 
    else: 
        continue
 
for i in range(n): 
    print("мяу")

continue - начать следующую итерацию цикла. break - выйти из цикла.

def main():
	number = get_number()
	meow(number)

def get_number():
	while True:
		n = int(input("Введите n: "))
		if n > 0:
			break
	return n

def meow(n):
	for i in range(n):
		print("мяу")

main()

Тип данных list (список)


students = ["Гермиона", "Гарри", "Рон"]
print(students[0])
print(students[1])
print(students[2])

Список удобно обрабатывать в цикле.

students = ["Гермиона", "Гарри", "Рон"]
for student in students:
	print(student)

len

len - функция возвращает числу элементов. Следующий код печатает имя студента и его положение в списке.

students = ["Гермиона", "Гарри", "Рон"]
n = len(students)
for i in range(n):
	print(i, students[i])

dict тип данных (словарь)

dict - структура данных для связывания ключей с значениями.
Гермиона Гарри Рон Драко
Гриффиндор Гриффиндор Гриффиндор Слизерин
Сопоставим студентам Хогвартса факультеты, используя dict.

students={
	"Гермиона": "Гриффиндор",
	"Гарри": "Гриффиндор",
	"Рон": "Гриффиндор",
	"Драко": "Слизерин"
	}
print(students["Гермиона"])
print(students["Гарри"])
print(students["Рон"])
print(students["Драко"])

Для итерации по списку мы можем использовать цикл.

students={
	"Гермиона": "Гриффиндор",
	"Гарри": "Гриффиндор",
	"Рон": "Гриффиндор",
	"Драко": "Слизерин"
	}

for student in students:
	print(student, students[student], sep=", ")

Переменная student пробегает множество ключей из словаря. Запись students["Ron"] по ключу возвращает значение.

Что если мы хотим иметь больше информации о студентах.

имя факультет патронус
0 Гермиона Гриффиндор Выдра
1 Гарри Гриффиндор Олень
2 Рон Гриффиндор Джек Рассел терьер
3 Драко Слизерин
Мы можем составить список из словарей.

students = [
	{"имя": "Гермиона", "факультет": "Гриффиндор", "патронус":"выдра"},
	{"имя": "Гарри", "факультет": "Гриффиндор", "патронус": "Олень"},
	{"имя": "Драко", "факультет": "Слизерин", "патронус": None}
	]

for student in students:
	print(student["имя"], student["факультет"], student["патронус"], sep=", ")

Марио

В игре Марио прыгает через препятствия. Давайте создадим текстовый представление игры.

Закодируем такой столбец:

def main():
	print_column(3)

def print_column(height):
	for i in range(height):
		print("#")
main()

Давайте теперь создадим горизонтальный ряд.

def main():
	print_row(4)

def print_row(width):
	print("?" * width)

main()

Далее реализуем построение из строк и столбцов

def main():
	print_square(3)

def print_square(size):
	#Для каждой строки в квадрате
	for i in range(size):
		# Для каждого кирпича в строке
		for j in range(size):
			print("#", end="")
		#Печатаем пустую строку
		print()

main()

Можно так реализовать код:

def main():
    print_square(3)


def print_square(n):
    for i in range(3):
        print_row(3)


def print_row(n):
    print("#"*n)

main()