14. Повторять, пока получается. Цикл while в Python

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

from tkinter import *
from random import randrange as rnd, choice

root = Tk()
root.geometry('800x600')

canv = Canvas(root,bg='white')
canv.pack(fill=BOTH,expand=1)
 
colors = ['red', 'orange', 'yellow', 'green', 'blue']


def paint(event):
    canv.delete(ALL)
    while color != 'red':
        x = rnd(100,700)
        y = rnd(100,500)
        r = rnd(10,70)
        color = choice(colors)
        canv.create_oval(x-r,y-r,x+r,y+r,fill = color)
                 
canv.bind('<Button-1>',paint)
mainloop()

Однако, вместо результата мы видим ошибку. Python сообщает нам, что прежде, чем мы будем использовать color, мы должны поместить туда какое-либо значение:

def paint(event):
    color = ''
    canv.delete(ALL)
    while color != 'red':
        x = rnd(100,700)
        y = rnd(100,500)
        r = rnd(10,70)
        color = choice(colors)
        canv.create_oval(x-r,y-r,x+r,y+r,fill = color)

Цикл while будет работать, пока истинно условие, записанное в его заголовке. В данном случае, пока цвет не окажется красным.

Усложним задачу: выводить на экран случайные круги, пока не будет нарисовано два красных:

def paint(event):
    k = 0
    canv.delete(ALL)
    while k < 2:
        x = rnd(100,700)
        y = rnd(100,500)
        r = rnd(10,30)
        color = choice(colors)
        if color == 'red':
            k += 1
        canv.create_oval(x-r,y-r,x+r,y+r,fill = color)

Еще больше усложним задачу, и будем рисовать круги, пока не будет нарисовано два красных и два синих:

def paint(event):
    k_red = 0
    k_blue = 0
    canv.delete(ALL)
    while k_red < 2 or k_blue < 2:
        x = rnd(100,700)
        y = rnd(100,500)
        r = rnd(10,30)
        color = choice(colors)
        if color == 'red':
            k_red += 1
        if color == 'blue':
            k_blue += 1
        canv.create_oval(x-r,y-r,x+r,y+r,fill = color)
1. Рисовать случайные круги, пока не будет нарисован зеленый круг
2. Рисовать случайные круги, пока не будет нарисован зеленый или светло-зеленый круг
3. Рисовать случайные круги, пока не будет получен круг, радиусом больше 28
4. Рисовать случайные круги, пока не будет нарисовано три зеленых круга
5. Рисовать случайные круги, пока не будет нарисовано три зеленых или три синих круга
6. Рисовать случайные круги, пока не будет нарисовано три зеленых и три синих круга
7. Рисовать случайные круги, пока не будет нарисовано два красных подряд
8. Рисовать случайные круги, пока не будет нарисовано три красных круга. Если за это время будет нарисован хотя бы один зеленый, то начинать считать красные сначала
9. Рисовать случайные круги. После того, как будет нарисовано 3 красных – красные и розовые больше не рисовать. После того, как будет нарисовано 3 синих – не рисовать синие и голубые. После того, как будет нарисовано 3 зеленых – не рисовать зеленые и светло-зеленые. Закончить, когда будет нарисовано 7 серых или светло-серых кругов.
10. Программисту нужно было написать программу, которая рисует круги, пока не будет нарисован большой и красный круг. Но программа не запускается. Помогите найти ошибку.
colors = ['violet', 'brown', 'red', 'orange', 'yellow', 'green','blue']
def paint(event):
    canv.delete(ALL)
    k = 0
    while color != 'red' and r < 50:
        x = rnd(100,700)
        y = rnd(100,500)
        r = rnd(10,70)
        k += 1
        color = choice(color)
        canv.create_oval(x-r,y-r,x+r,y+r,fill = color)
        canv.create_text(x,y, text = str(k))

One thought on “14. Повторять, пока получается. Цикл while в Python

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

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