Почему в цикле python while отсутствует логический оператор? - PullRequest
1 голос
/ 29 марта 2011

Я работаю через трудный путь изучения питона , и в упражнении 33 дополнительный кредит 2 Я пытаюсь использовать либо raw_input, либо argv, чтобы установить переменную, которая будет использоваться в цикл while:

# from sys import argv
# script, my_num = argv

def all_the_numbers(n):
   """increment by 1 up to limit n"""
   i = 0
   numbers = []
   while i < n:
      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 "Please enter an integer: "
# n = raw_input("#")
# n = my_num
n = 10
all_the_numbers(n)

с жестким кодом n = 10 работает как положено; печать строк до 10. Но передача значения как my_num из argv и / или установка переменной из raw_input приводит к бесконечному приращению целых чисел вверх. Чем отличаются последние две формы установки переменных от того, что они не ведут себя точно так же, как жестко заданные настройки одной и той же переменной?

1 Ответ

5 голосов
/ 29 марта 2011

Функция raw_input() возвращает строку , а не целое число.Попробуйте:

n = int(raw_input("#"))

или

n = int(my_num)

Это преобразует строку, возвращаемую raw_input(), в целое число, которое ожидает ваша функция all_the_numbers().

Вот соответствующий отрывок из документации по Python (выделено мной):

Операторы <,>, ==,> =, <= и! = Сравнивают значения двух объектов,Объекты не обязательно должны быть одного типа.Если оба числа, они конвертируются в общий тип.В противном случае <strong>объекты разных типов всегда сравниваются неравно и упорядочены последовательно, но произвольно .

В вашем случае, число и строка упорядочены произвольно, а в вашем случае< сравнение всегда оценивается в True.Программист обязан обеспечить совместимость типов такого сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...