Петля неожиданно выходит из Python

Я делаю программу, которая берет файл с AZ, написанный в искусстве ASCII. Программа принимает 3 строки ввода: высота, ширина и слово, которое должно быть написано (все пробелы и пробелы). Мне удалось заставить программу печатать первую букву, которая повторяется, но, по некоторым причинам, кажется, что цикл for, который я установил, просто останавливается.

temp = []
hi = input('Height: ')
wi = input('Width: ')
tx = input('Text: ')
fi = open("font.txt")
for n in range(len(tx)):
    for i in tx:
        temp = cd[i]
        var1 = int(temp[0])
        ra1 = (var1 * int(hi))
        ra1n = (ra1 + int(hi))
        temp = []
        lines = fi.readlines()
        print(''.join(lines[ra1:ra1n]), end='')

Это то, что он выводит

Height: 8
Width: 9
Text: WOW

|\     /|
| )   ( |
| | _ | |
| |( )| |
| || || |
| () () |
(_______)

2 ответа

Решение

Вы пытаетесь перечитать font.txt без перемотки позиции файла.

Либо добавить file.seek(0) вызвать или прочитать файл один раз за пределами цикла; с помощью lines = fi.readlines() вне цикла будет более эффективным, чем использование fi.seek(0) каждый раз.

У вас также слишком много петель; вам не нужно зацикливаться range(len(tx)) здесь, потому что вы уже зациклились tx сам.

with open("font.txt") as fi:
    lines = fi.readlines()

for character in tx:
    var1 = int(cd[character])
    ra1 = (var1 * int(hi))
    ra1n = (ra1 + int(hi))
    print(''.join(lines[ra1:ra1n]), end='')

Пытаться file.seek(0) в цикле перед lines = fi.readlines(),

    temp = []
    hi = input('Height: ')
    wi = input('Width: ')
    tx = input('Text: ')
    fi = open("font.txt")
    for n in range(len(tx)):
        for i in tx:
            temp = cd[i]
            var1 = int(temp[0])
            ra1 = (var1 * int(hi))
            ra1n = (ra1 + int(hi))
            temp = []
            fi.seek(0) # Here
            lines = fi.readlines()
            print(''.join(lines[ra1:ra1n]), end='')

или откройте file в цикле.

temp = []
hi = input('Height: ')
wi = input('Width: ')
tx = input('Text: ')
for n in range(len(tx)):
    for i in tx:
        temp = cd[i]
        var1 = int(temp[0])
        ra1 = (var1 * int(hi))
        ra1n = (ra1 + int(hi))
        temp = []
        fi = open("font.txt") # Here
        lines = fi.readlines()
        print(''.join(lines[ra1:ra1n]), end='')
Другие вопросы по тегам