13. Цикл for – это не только повторение несколько раз

1. Нарисовать 10 окружностей с центром в точке 400, 300 с увеличивающимся радиусом (первая – 10, вторая – 20 и т.д.)
2. Нарисовать 10 окружностей в ряд горизонтально
3. Нарисовать 10 окружностей в ряд вертикально
4. Нарисовать 10 окружностей в ряд, с увеличивающимся радиусом

Нарисуем 10 окружностей с увеличивающимся радиусом:

def paint(event):
    for z in range(12):
        x = 400
        y = 300
        r = z*10
        canv.create_oval(x-r,y-r,x+r,y+r)

А можно и по-другому:

def paint(event):
    for r in range(10,100,10):
        x = 400
        y = 300
        canv.create_oval(x-r,y-r,x+r,y+r)

Первое аргумент в range – это начальное значение, второй – конечное, третий – шаг. Таким образом r принимает значение 10, потом 20 и т.д. до 100. Но до 100 ли?

5. *Сколько окружностей нарисовано? Сколько должно быть? Почему?

Нарисуем 12 окружностей в ряд:

def paint(event):
    for i in range(10):
        x = 20+i*60
        y = 300
        r = i*3
        color = choice(colors)
        canv.create_oval(x-r,y-r,x+r,y+r,fill = color)
6. *Нарисовать в ряд 10 окружностей с увеличивающимся радиусом так, чтобы они касались друг друга
7. Нарисовать 5 рядов по 10 окружностей (радиуса 20, чтобы поместились)
8. Нарисовать 5 рядов по 10 окружностей так, чтобы в каждом был только один цвет заливки, но выбран он должен быть случайным образом. Т.е. при каждом запуске – новые цвета. Но для каждого ряд – цвет один.
9. Нарисовать 5 рядов окружностей. В первом 3, во втором 6, в третьем 9 и т.д.
10. Нарисовать 5 рядов по 10 окружностей или квадратов. Выбирать фигуру случайным образом

Для того, чтобы выполнить эти задания нам потребуется использовать цикл в цикле:

def paint(event):
    for y in range(100,400,50):
        for x in range(100,600,30):
            r = 10
            color = choice(colors)
            canv.create_oval(x-r,y-r,x+r,y+r,fill = color)

Еще один пример для разбора:

def paint(event):
    for y in range(100,400,50):
        color = choice(colors)
        for x in range(100,y+200,30):
            r = 10
            canv.create_oval(x-r,y-r,x+r,y+r,fill = color)

Используем случайное число для выбора фигуры:

def paint(event):
    for y in range(100,400,50):
        for x in range(100,y+200,30):
            color = choice(colors)
            r = 10
            if rnd(2) == 1:
                canv.create_oval(x-r,y-r,x+r,y+r,fill = color)
            else:
                canv.create_rectangle(x-r,y-r,x+r,y+r,fill = color)

Как вы можете видеть, появилось новое слово: else. Код, написанный в блоке else выполнится в том случае, если условие под if – ложно (см. справочник: оператор ветвления). Также обратите внимание на два знака «равно» в строке if rnd(2) == 1. (см. справочник операторы)

11. Разобрались сами – поможем другому. Программисту нужно было написать программу для рисования десяти квадратов, вложенных друг в друга, но получается только один:

from tkinter import *
root = Tk()
root.geometry('800x600')
canv = Canvas(root,bg='white')
canv.pack(fill=BOTH,expand=1)

def paint(event):
    canv.delete(ALL)
    x = 300
    y = 200
    for r in range(10,100,10):
        canv.create_rectangle(x-r,y-r,x+r,y+r, fill = 'lightgreen')

canv.bind('<Button-1>',paint)
mainloop()
12. Еще одна программа (часть программы), которая работает неправильно. Нужно было нарисовать 10 рядов по 10 окружностей:

def paint(event):
    r = 10
    for x in range(30,350,22):
    for y in range(30,350,22):
    color = choice(colors)
    canv.create_oval(x-r,y-r,x+r,y+r,fill = color)

Проверьте себя: вы должны понимать, почему на экране появится число 100:
k = 0
for x in range(10):
    for y in range(10):
        k += 1
print(k)

Проверьте себя: вы должны понимать, почему на экране появится число 10:
for x in range(10):
    k = 0
    for y in range(10):
        k += 1
print(k) 

Проверьте себя: вы должны понимать, почему на 10 раз экране появится число 10:
for x in range(10):
    k = 0
    for y in range(10):
        k += 1
    print(k)

One thought on “13. Цикл for – это не только повторение несколько раз

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *