Немного помощи питона - PullRequest
0 голосов
/ 12 мая 2010

Я пытался заставить это работать, но оно просто зависает. Он должен отображать пирамиду, но все, что он делает, это .. останавливается.

from graphics import * 

valid_colours = ['red', 'blue', 'yellow', 'green']
colour = ['', '', '']

while True:
    colour[0] = raw_input("Enter your first colour: ")
    colour[1] = raw_input("Enter your second colour: ")
    colour[2] = raw_input("Enter your third colour: ")
    if ((colour[0] and colour[1] and colour[2]) in valid_colours):
        break 

while True:
    width = raw_input("Enter a width between 2-7: ")
    if width.isdigit(): 
        if (int(width) <= 7 and int(width) >= 2):
            break 

width = int(width)

win = GraphWin("My Mini Project ", 1000, 1000) # 1000 \ 20 = 50
win.setCoords(0 , 0 , 20, 20)
p1 = [0, 2]

while width > 0:
    p = [1, 3]
    loopWidth = 0
    while loopWidth < width:
        loopWidth = loopWidth + 1

        c = 0
        while c <= 10:
            c = c + 1
            if c % 2: 
                colour = "white"
            else:
                colour = "red"

            rectangle = Rectangle(Point(p[0],p1[0]), Point(p[1], p1[1]))
            rectangle.setFill(colour)
            rectangle.setOutline("black")
            rectangle.draw(win)

            p[0] = p[0] + 0.2
            p1[0] = p1[0] + 0.2

        p[0] = p[0] - 2
        p1[0] = p1[0] - 2

        p[0] = p[0] + 2
        p[1] = p[1] + 2

    width = width - 1
    p1[0] = p1[0] + 2
    p1[1] = p1[1] + 2

1 Ответ

1 голос
/ 05 июля 2011
  • Ну, во-первых, цикл ввода цвета не делает то, что вы хотите.

'и' в if ((colour[0] and colour[1] and colour[2]) in valid_colours): сравнивает их значения string друг с другом, где любая непустая строка оценивается как True. Выражение оценивается как color [2], предполагая, что это последняя непустая строка, вы можете доказать это с помощью: print (colour[0] and colour[1] and colour[2])

Изменить на: if (colour[0] in valid_colours and colour[1] in valid_colours and colour[2] in valid_colours):

  • Ваш основной цикл рисования прямоугольника: Целью следующего кода является итерация от 1..width (включительно)

barloopWidth = 0
while loopWidth < width:
    loopWidth = loopWidth + 1
    do stuff using (loopWidth + 1)

поэтому замените его на: для loopWidth в диапазоне (1, ширина + 1):

  • Цикл, повторяющий c и цвет через 6 циклов белого, красного можно переписать с помощью '*' (оператор репликации последовательности):

    для цвета в ['белый', 'красный'] * 6:

Итак, ваш основной цикл становится:

while width > 0:
    p = [1, 3]

    for loopWidth in range(1,width+1):
        for colour in ['white','red']*6:

            #Draw your rectangles

            p[0]  += 2
            p1[0] += 2

        p[0] -= 2
        p1[0] -= 2

        p[0] = p[0] + 2
        p[1] = p[1] + 2

    width = width - 1
    p1[0] += 2
    p1[1] += 2
  • Что касается того, почему он висит в цикле координат вашей пирамиды, отладьте его самостоятельно, используя print: print 'Drawing rectangle from (%d,%d) to (%d,%d)'% (p[0],p1[0],p[1],p1[1])

Для тестирования может оказаться полезным изолировать эту информацию о коде функцией draw_pyramid () от get_colors ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...