Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

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

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

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

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

По дате
По рейтингу
Аватар пользователя

Проблема заключается в том, что ваш цикл for итерирует по каждому символу в строке map, а не по строкам в map. В результате, ваш код ожидает, что каждый символ будет либо /, либо w, и никогда не достигнет условия изменения значения word.

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

Вот как ваш код может выглядеть с исправлениями:

123456789101112131415161718192021222324
 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, чтобы избежать проблемы с отступами.

Аватар пользователя
Ученик

Вы забыли добавить отступы перед блоком кода внутри цикла. В 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