2015-08-03 4 views
1

Мой код не останавливается. Я надеюсь, кто-то сможет объяснить, что я делаю неправильно.Проблема с циклами while

то, что я пытаюсь сделать, это запустить программу, дать ей число и пропустить цикл до тех пор, пока это число не будет достигнуто. Я даю программу х, х дается подсчету. и он должен проверять i до x каждый раз.

numbers = [] 
x = raw_input("> ") 
def counting(num): 
    i = 0 
    while i < num: 
     print "At the top i is %d" % i 
     numbers.append(i) 

     i = i + 1 
     print "Numbers now: ", numbers 
     print "At the bottom i is %d" % i 
counting(x) 
print "The numbers: " 

for num in numbers: 
    print num 

ответ

3

x = int(raw_input("> ")), вы сравниваете строку с int. Вы можете также использовать диапазон:

def counting(num): 
    for i in range(num): 
     print "At the top i is %d" % i 
     numbers.append(i) 
     print "Numbers now: ", numbers 
     print "At the bottom i is %d" % (i + 1) 

Если вы действительно хотите print "At the bottom i is %d" % i печатать только последний i, переместить его за пределы цикла .:

def counting(num): 
    for i in range(num): 
     print "At the top i is {}".format(i) 
     numbers.append(i) 
     print "Numbers now: {}".format(numbers) 
    print "At the bottom i is {}".format(i) 
+0

Получил, спасибо! –

+0

Не стоит беспокоиться, что такое 'print '. В нижней части i есть% d" ', который должен выводиться, последний' i' или только i + 1 для каждой итерации? –

+0

i + 1. показать, как цикл увеличивается и заканчивается. –

1

В Python 2, raw_input() возвращает строку (например, Python 3's input()). Вы отправляете это прямо в свою функцию подсчета.

Также в Python 2 вы можете сравнить строки и целые числа, и Python не будет жаловаться. Это дает неожиданные результаты, когда вы пытались работать только с одним или другим, что, вероятно, связано с тем, что Python 3 вызывает ошибку при сравнении строк и целых чисел.

Смежные вопросы