#python #loops
Вопрос:
Вот мой код:
def main(): opt = setup() inst = '' if opt == 'Y' or opt == 'y': while not inst == 'end': instlist = [] inst = input('Enter codeline to execute, when done type "end"') if not inst == 'end': instlist.append(inst) i = 0 instlist while i lt; len(instlist): exec(instlist[i]) i = i 1 input()
Код работает без ошибок, но если я вставлю в него «print («привет, мир»)», он будет полностью пустым, пока я не нажму enter, а затем он завершится. Почему он не печатает то, что я ему сказал?
Комментарии:
1. Здесь несколько проблем: вы инициализируете
instlist
пустой список на каждой итерации первого цикла, поэтому он никогда ничего не может содержать. Даже если бы это было так, второй цикл не увеличиваетсяi
, поэтому он будет выполнять только первый элемент навсегда.2. Оказывается, когда я скопировал код для переполнения стека, «i = i 1» не было отступа. Я не знаю, почему, и этого нет в коде.
Ответ №1:
Вы должны вывести instlist = [] за пределы цикла до этого времени.Также вы должны поместить i за пределы цикла, а внутри цикла вы должны увеличить.Также вы должны использовать для i в диапазоне (len(inslist)) для вашего второго цикла.
Комментарии:
1. На самом деле это «для меня в диапазоне (len(instlist)):», я был немного смущен, когда вставил это.
Ответ №2:
Это довольно просто. В вашем цикле while not inst == «конец» вы создали переменную instlist. Каждый раз, когда выполняется цикл while, список очищается и становится пустым списком. Попробуйте объявить его прямо под тем местом, где вы объявили переменную inst.