2014-02-24 101 views
-1

我想打印所有的數字,直到給定的用戶輸入使用while循環。例如:輸入:5 ==> 1 2 3 4 5但下面的程序永遠循環。python字符串和整數比較

user = str(input("Enter : ")) 
i = 1 
while i < user: 
    print(i) 
    i = i + 1 

回答

4

ummm while i < int(user):

+5

倒不如做'用戶= INT(輸入( 「輸入:」))'代替 – lejlot

+0

@lejlot:在Python 2 ,使用'int(raw_input(「Enter:」))'代替。 'input()'已經在輸入中調用了'eval()',所以在任何情況下它都會返回一個只包含數字的輸入的整數。 –

+0

我只是提到這樣一個事實,即將用戶轉換爲int一次比在循環中更好。 – lejlot

1

試試這個:

try: 
    user = int(raw_input('Enter: ')) # Cannot compare a string with an integer. 
except ValueError: 
    print('Input should be an integer!') 

i = 1 
while True: 
    i += 1 
    if i > user: 
     break 
    print(i) 

注:在你的代碼,即使我們明確聲明input爲整數它仍然沒有完全工作,你希望它的方式。這是因爲在您的代碼中,while循環一旦停止,即i等於user(條件是,而小於...,因此不會打印出最終值user。因此,我對其進行了修改,使其在點i大於user更大,這意味着最後打印值將等於user

實施例前面的輸出,其中user = 5

1 
2 
3 
4 

,並用新的代碼:

然而
1 
2 
3 
4 
5 

這是更好地在這裏使用一個for循環,如果你不使用while循環設置:

for i in range(1, user+1): 
    print(i) 
0

在Python 2.x的input將試圖評估用戶輸入什麼,它相當於

user = eval(raw_input(...)) 

在這種情況下,你明確地將任何被提供給一個字符串(與str())。在Python 2.x中,字符串總是比數字大,所以i < user總是True

明智地使用raw_input並轉換爲int。你也可以用for循環簡化代碼:

user = int(raw_input("Enter : ")) 

for i in range(user): 

    print(i) 
0

你是比較一個int的STR,這就是爲什麼你得到一個無限循環。你應該比較同類型的變量

user = int(input("Enter: "))

應該工作

+0

.7輸入爲你提供了一個評估版本的字符串(在這種情況下是一個int ...),,,我猜測OP有一些理由把它轉換成一個字符串......(儘管不知道可能是什麼) –