2014-02-02 6 views
1
a = raw_input ("enter a number") 
i = 0 
numbers = [] 

while i < a: 
    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 

print "The numbers: " 

for num in numbers: 
    print num 

поэтому я следую за lpthw и просто возился с кодом, почему это происходит, когда я использую raw_input и вводим число, подобное 6, этот цикл превращается в бесконечный цикл? не должно быть i = i + 1, чтобы остановить это?Почему это бесконечный цикл

+6

Поскольку число всегда меньше, чем строки в Python 2. –

+0

я был неправ об этом - ответ, но вы * * смешиваете вкладки и пробелы. Это плохо**. Я не знаю, почему он работает; возможно, это только проблема в вашей копии/вставке для SO, но убедитесь, что вы используете только пробелы. – mhlester

+0

исправить отступы btw ... вроде бы код даже не компилируется. –

ответ

9

В Python 2.7, raw_input возвращает str (строку). Поэтому, сравнивая i < a, вы сравниваете целое число со строкой, и оно будет always return True.

Чтобы это исправить, отдать свой вклад в целое число:

a = int(raw_input(...)) 

Примечание: Как прокомментировал @AshwiniChaudhary, сравнивая (с <, <=, > или >=) целое число со строкой в Python 3.x возбудит исключение:

TypeError: unorderable types: int() <operator> str() 
+1

Также упоминайте тот факт, что такое сравнение вызовет ошибку в Python 3. –

1

raw_input возвращает строку. Ваша переменная a является строкой, а строки python больше, чем int.
Вы должны преобразовать к междунар:

a = int(raw_input("enter a number")) 
1

Если вы используете raw_input, т Курица a будет строкой. Вам нужно int, для сравнения i < a для работы как ожидалось. Используйте input вместо raw_input.

Для дальнейшего использования, input был удален в Python 3 и raw_input переименован в input, так что вам потребуется int(input (...)) в PY3.

1

Вы делаете две вещи, которые могут привести к бесконечному циклу.

  1. Вкладки и пространства смешиваются, питон заботится о отступы, поэтому убедитесь, что я = я + 1 совмещен с numbers.append (I)

  2. Фактическая причина, почему он держит при переходе это то, что когда python собирает raw_input, он преобразует его в строку, а не целое число, поэтому сравнение не работает так, как вы ожидали. Изменение этого и оно будет работать, как ожидалось:

а = Int (raw_input («Введите число»))

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