- Ну, во-первых, цикл ввода цвета не делает то, что вы хотите.
'и' в 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 ().