2012-02-03 18 views
3

私は自分自身でPythonを教えようとしています。私はこれを行うために "Python The Hard Wayを学んでください"という演習を使っています。whileループはPythonで終了しません

今、私はwhileループを含む演習に取り組んでいます。ここでは、スクリプトからwhileループを取り、それを関数に変換して別のスクリプトで関数を呼び出します。最終的なプログラムの唯一の目的は、項目をリストに追加してから、リストをそのまま印刷することです。

私の問題は、一度関数を呼び出すと、埋め込みループが無限に続くことになります。

私は自分のコード(下記参照)を何度も分析しており、明らかに間違ったものは何も見つかりません。

def append_numbers(counter): 
    i = 0 
    numbers = [] 

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

     i += 1 
     print "Numbers now: ", numbers 
     print "At the bottom i is %d" % i 

count = raw_input("Enter number of cycles: ") 

print count 
raw_input() 

append_numbers(count) 
raw_input

答えて

15

私はあなたがこれを望むと信じています。

count = int(raw_input("Enter number of cycles: ")) 

整数への入力を変換せずに、あなたはcount変数内の文字列で終わる、つまりプログラムが入力を要求するときに1を入力した場合、どのような数になりは'1'です。

文字列と整数の比較はFalseです。したがって、while i < counter:の条件は、iが整数であるため、counterはプログラム内の文字列であるため、常にFalseになります。

count変数の値を確認する代わりに、print repr(count)を使用した場合は、プログラムでこれをデバッグすることができます。プログラムの場合は、1を入力すると'1'と表示されます。私が提案した修正プログラムでは、1と表示されます。しばらくは永遠にループし、なぜ

+0

ありがとうございました!プログラムは今働いています。 – detroitwilly

-3

文字列を返すが、iは整数です。 raw_inputの代わりにinputを使用してください。

+4

'。エバールは悪いです...しないでください。 –

+1

そうではありません。 – jdi

+0

これは、Python 3では 'raw_input'キーワードを取り除いた場合にのみ当てはまります。 –

1

整数への入力文字列を変換する...上記count=int(count)

-1

がクリアされました。それは多くの(本当に大きいです= ASCIIコード)のためにループ

しかし、単にあなたができる一方を修正する:

`evalの(raw_input(プロンプト))`と同等ですinput`
while i<int(counter): 
    print "At the top i is %d" % i 
    numbers.append(i) 
関連する問題