Python бесконечный цикл while внутри функции - PullRequest
0 голосов
/ 25 марта 2012

Независимо от того, что я пытаюсь, я получаю бесконечный цикл с этой функцией:

  # Excercise 33 - LPTHW

i = 0 
numbers = []

#Ec 1
#numb = 6
#iplus = 10

def theloop(numb):
        global i
        #i = 0
        #number = []
        while i < numb:
            print "At the top of 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

theloop(7)

Когда я запускаю скрипт, он просто продолжает печатать:

At the top of i is 0
At the top of i is 0
...

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

Ваш код работает для меня как написано, но выглядит странно с отступом из-за использования смешанных символов табуляции и пробелов.Когда я читаю ваш сценарий с использованием .readlines, вы видите это:

 '    def theloop(numb):\n',
 '    \t\tglobal i\n',
 '    \t\t#i = 0\n',
 '            #number = []\n',
 '    \t\twhile i < numb:\n',
 '     \t\t\tprint "At the top of i is %d" % i\n',
 '        \t\tnumbers.append(i)\n',
 '    \n',
 '        \t\ti = i + 1\n',

Поэтому я бы рекомендовал везде переключаться на четыре пробела и делать еще один шаг.Обратите внимание на разницу в количестве вкладок между оператором print и оператором добавления / приращения.

1 голос
/ 25 марта 2012

, если вы смешали пробелы и табуляции, попробуйте запустить ваш скрипт так:

python -tt yourscript.py ##this will raise error if you've mixed spaces and tabs

это то, что я получаю после запуска вашего скрипта, и оно не бесконечно.

At the top of i is 0
Numbers now:  [0]
At the bottom i is 1
At the top of i is 1
Numbers now:  [0, 1]
At the bottom i is 2
At the top of i is 2
Numbers now:  [0, 1, 2]
At the bottom i is 3
At the top of i is 3
Numbers now:  [0, 1, 2, 3]
At the bottom i is 4
At the top of i is 4
Numbers now:  [0, 1, 2, 3, 4]
At the bottom i is 5
At the top of i is 5
Numbers now:  [0, 1, 2, 3, 4, 5]
At the bottom i is 6
At the top of i is 6
Numbers now:  [0, 1, 2, 3, 4, 5, 6]
At the bottom i is 7
The numbers: 
0
1
2
3
4
5
6
0 голосов
/ 25 марта 2012

Это выглядит как ошибка отступа после следующих строк:

   while i < numb:
        print "At the top of i is %d" % i
        numbers.append(i)

Как сказал Джеймс, здесь все отлично работает, когда вы его вставляете, так что вы можете проверить, есть ли у вас правильный уровень отступа в вашем реальном коде.

...