#python #loops #input #while-loop #break
#python #циклы #ввод #цикл while #сломать
Вопрос:
Итак, я работаю над фрагментом кода, который мне дали в качестве задания. У меня возникли проблемы со второй частью кода else. Когда входные данные нечетные, они переходят к этой части кода и не прерываются при перезапуске цикла. Я знаю, что в этой части есть недостаток, и мне было интересно, может ли кто-нибудь помочь мне увидеть это. (Извините, если этот код кажется очень любительским, я учусь.
Я пытался изменить местоположение для ввода, но безрезультатно.
def part1c():
def get_int(prompt):
while True:
try:
return int(butt(prompt))
except ValueError:
pass
def get_ch(prompt):
while True:
res = butt(prompt).strip()
if res:
return res[:1]
def make_row(w , edge, center):
return edge*(w>0) center*(w-2) edge*(w>1)
import time
def print_rectangle(h, w, c):
top_row = make_row(w, c, c)
mid_row = make_row(w, c, ' ')
rows = [top_row]*(h>0) [mid_row]*(h-2) [top_row]*(h>1)
print('n'.join(rows))
while True:
print_rectangle(h, w, c)
time.sleep(2)
def main():
h = get_int('Size of box in rows? ')
w = get_int('Size of box in columns? ')
c = get_ch('Character to use: ')
print_rectangle(h, w, c)
while True:
print('Draw boxes:(Enter 0 to stop)')
butt=int(input('If box has an odd number(s), type it.'
' If not, type the even number(s):') )
if butt == 0:
print('Thank you, next')
break
else:
if butt % 2== 0:
pass
rows=int(input('Size of box in rows? '))
cols= int(input('Size of box in columns? '))
for r in range(rows):
for c in range(cols):
print('*', end='')
print()
else:
butt_is_zero = True
while butt_is_zero:
import sys
# Python 2/3 compatibility shims
if sys.hexversion >= 0x3000000:
butt = input
rng = range
else:
butt = raw_input
rng = xrange
if __name__=="__main__":
main()
if butt==1:
butt_is_zero = False
get_int()
get_ch()
make_row()
print_rectangle()
part1c()
часть 1c()
Комментарии:
1. Не определяйте функции в циклах
2. Это исправило проблему, я не думал, что это произойдет! Спасибо!
Ответ №1:
единственное, что вы можете попробовать, это изменить
else:
while True:
import sys
Для
else:
butt_is_zero = True
while butt_is_zero:
import sys
затем, чтобы прервать цикл while
if butt==1:
butt_is_zero = False
Также приведенное выше сообщение ^^ не определяет функции внутри цикла, вместо этого размещайте их вне цикла и вызывайте их по мере необходимости.
пример
import time
def print_rectangle(h, w, c):
top_row = make_row(w, c, c)
mid_row = make_row(w, c, ' ')
rows = [top_row]*(h>0) [mid_row]*(h-2) [top_row]*(h>1)
print('n'.join(rows))
while True:
print_rectangle(h, w, c)
time.sleep(2)
Комментарии:
1. Итак, я попробовал это и вывел функции из цикла, хотя при импорте времени конечный результат печатает одно и то же поле бесконечное количество раз, и цикл все равно не прерывается. Я обновил код. Еще раз спасибо. Я бы дал вам более потрясающий соус, если бы вы могли помочь мне снова найти в нем что-то неправильное.