2011-03-28 101 views
1

我通過工作學習Python硬盤的方式,並在運動33加分2我想利用或者raw_inputargv設置將在while循環中使用的變量:爲什麼這個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。但是從argv傳入的值爲my_num和/或從raw_input設置變量會導致向上的無限整數遞增。後兩種設置變量的方式有什麼不同,它們的行爲並不完全像同一個變量的硬編碼設置?

回答

5

raw_input()函數返回一個字符串,而不是一個整數。嘗試:

n = int(raw_input("#")) 

n = int(my_num) 

這由raw_input()返回的字符串轉換爲一個整數,你all_the_numbers()功能的期望。

下面是relevant passage from the Python docs(重點煤礦):

運營商<,>,==,> =,< =和=比較兩個對象的值!這些對象不必具有相同的類型。如果兩者都是數字,則它們被轉換爲通用類型。否則,不同類型的對象總是比較不等,並且一致但是任意排列

在你的情況,數字和字符串是任意排列,並在你的情況<比較始終計算爲True。程序員有責任確保這種比較的類型是兼容的。

+0

謝謝,格雷格。這很有道理;儘管我並沒有懷疑它的結果是一個整體鏈的增加。 – gonzo 2011-03-30 05:24:23