Петля неожиданно выходит из 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='')