Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Нужна помощь с кодом Python(pygame)

Виталий Чебровский Знаток (391), на голосовании 2 года назад
Хотел сделать что бы по надписи отрисовывалась карта, но почему то мой цикл зациклен.
Как его разциклить что бы ничего не сломать я не знаю. Помогите с этим.

Вот отрывок кода:

map = """
wwwwwwwww/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
wwwwwwwww/"""

line = 1
xw = 0
word = 0

for word in map: ------------------------------------------------- ТУТ ЗАЦИКЛЕНО. ПОМОГИТЕ.
if word == "/":
line += 1
xw = 0
if word == "w":
yw = line*80
pygame.draw.rect(screen, BLACK, (xw*80, yw, 80, 80))

xw += 1
Голосование за лучший ответ
Стань уже добрым! Ученик (203) 2 года назад
Вы забыли добавить отступы перед блоком кода внутри цикла. В Python отступы очень важны и определяют область видимости кода. Попробуйте добавить отступы внутри цикла и проверить, работает ли код:

map = """
wwwwwwwww/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
wwwwwwwww/"""

line = 1
xw = 0
word = 0

for word in map:
if word == "/":
line += 1
xw = 0
if word == "w":
yw = line*80
pygame.draw.rect(screen, BLACK, (xw*80, yw, 80, 80))
xw += 1
Антон Михайлов Гуру (2635) 2 года назад
Проблема заключается в том, что ваш цикл for итерирует по каждому символу в строке map, а не по строкам в map. В результате, ваш код ожидает, что каждый символ будет либо /, либо w, и никогда не достигнет условия изменения значения word.

Чтобы исправить эту проблему, вам нужно сначала разделить строку map на строки, используя символ переноса строки \n в качестве разделителя. Вы можете сделать это с помощью метода split().

Вот как ваш код может выглядеть с исправлениями:
 map_str = """\ 
wwwwwwwww/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
waaaaaaaw/
wwwwwwwww/"""

map_lines = map_str.split('\n') # разбиваем строку на строки

line = 1
xw = 0

for row in map_lines:
for word in row:
if word == "/":
line += 1
xw = 0
if word == "w":
yw = line * 80
pygame.draw.rect(screen, BLACK, (xw * 80, yw, 80, 80))
xw += 1
В этой версии кода мы сначала разбиваем строку map_str на строки map_lines с помощью метода split(). Затем мы используем вложенный цикл for для итерации по каждому символу в каждой строке. Переменная row содержит текущую строку, которую мы обрабатываем. Переменная word содержит текущий символ, который мы обрабатываем.

Я также добавил символ \ в начале строки map_str, чтобы избежать проблемы с отступами.
Похожие вопросы