#python #arrays #python-3.x #pygame #nested-loops
#python #массивы #python-3.x #pygame #вложенные циклы
Вопрос:
У меня есть текстовый документ, в котором записаны только 1 и 0 в виде квадрата 80 на 80, то есть 80 строк и 80 столбцов, в которых записаны только 1 и 0. Мне нужно создать код, который рисует квадрат 80 на 80 и заполняет эти поля красным цветом, вместо которого 1.
import pygame
import os
# create path to find my document
path = os.path.realpath('future.txt')
task = open(path, mode = 'r',encoding = 'utf-8')
#create screen
screen = pygame.display.set_mode((800,800))
white = [255, 255, 255]
red = [255, 0, 0]
x = 0
y = 0
#intepreter string as a list
for line in task:
line = line.replace('n', '')
line = list(line)
# nested loop
for j in range(0,80):
for i in range(0,79):
pygame.draw.rect(screen, white, (x, y, 10, 10), 1)
x = 10
if line[i] == '1':
pygame.draw.rect(screen, red, (x, y, 9, 9))
if x == 800:
x = 0
y = 10
while pygame.event.wait().type != pygame.QUIT:
pygame.display.flip()
Это пока мой код. Версия Python 3.
Комментарии:
1. Пожалуйста, сформулируйте свой вопрос.
2. В моем коде есть сумка. Он рисует только 1-ю строку для моего квадрата pygame. Я думаю, что это произошло в моем вложенном цикле, но я не могу понять, что не так. Мой вопрос в том, где находится эта сумка и как я должен изменить свою программу?
Ответ №1:
Для многого достаточно одного вложенного цикла. Для обхода двумерного массива требуется всего 2 вложенных цикла.
Залоги обходятся:
for line in task: line = line.replace('n', '')
И столбцы пересекаются с помощью
for j in range(0,80):
Измените свой код следующим образом:
y = 0
for line in task:
line = line.replace('n', '')
x = 0
for elem in list(line):
pygame.draw.rect(screen, white, (x, y, 10, 10), 1)
if elem == '1':
pygame.draw.rect(screen, red, (x 1, y 1, 8, 8))
x = 10
y = 10