2011-03-28 8 views
1

私はwhileループで使用される変数を設定するraw_inputまたはargvのいずれかを利用しようとしているハードな方法をPYTHON学ぶを通じて作業、および運動33内の余分な信用2よ:このPython 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に設定したりすると、整数が無限に増加します。後者の2つの設定変数の違いは、同じ変数のハードコーディングされた設定とまったく同じようには動作しません。

答えて

5

raw_input()関数は、の文字列を返します。整数ではありません。試してみてください:

n = int(raw_input("#")) 

または

n = int(my_num) 

これはあなたのall_the_numbers()機能が期待整数へraw_input()によって返される文字列に変換します。

はここだrelevant passage from the Python docs(強調鉱山):

演算子<、>、==、> =、< =、および= 2つのオブジェクトの値を比較します!。オブジェクトは同じタイプである必要はありません。両方が数字の場合は、共通タイプに変換されます。それ以外の場合は、のオブジェクトは常に異なるものと比較され、一貫して順序付けされますが、任意にとなります。あなたのケースでは

、数値と文字列を任意に命じ、そしてあなたのケースで<比較は常にTrueに評価されています。そのような比較のタイプが互換性があることを保証するのはプログラマの責任です。

+0

ありがとう、グレッグ。それはたくさんの意味があります。結果として整数の連鎖が増えていると私は疑っていませんでした。 – gonzo

関連する問題