2012-07-18 66 views
1

下面是一段來自Python的代碼,它一直困擾着我。While loop not breaking

var=0 
while (var <1 or var>100): 
    var=raw_input('Enter the block number ') 
    if (var >=1 and var<=100): 
     print '\nBlock Number : ',var 
    else: 
     print 'ERROR!!! Enter again.' 

問題是,while循環連續不斷地迭代。任何人都可以幫助我如何打破循環。

有什麼辦法可以在Python中執行do..while

回答

12

問題是raw_input返回一個字符串。你正在比較一個字符串和一個你可以在Python 2.x中完成的整數(在python 3中,這種比較提高了TypeError),但是結果顯然總是False。爲了使這項工作,你可能要像var=int(raw_input('Enter the block number'))

documentation:不同類型的

對象始終比較不平等,並一致但任意訂製。

+0

'int's總是小於'str's – 2012-07-18 14:20:47

+1

@ColinDunklau - 這是真的嗎?或者是CPython的實現細節?實際上唯一重要的是對象是一致排列的。 – mgilson 2012-07-18 14:26:03

+0

明白了!謝謝你們。 – Abhinav 2012-07-18 14:29:41

4

你不必要地檢查var兩次,你試圖比較int和str(因爲raw_input返回一個字符串),這不正確。試試這個:

var=0 
while True: 
    var=int(raw_input('Enter the block number ')) 
    if (var >=1 and var<=100): 
     print '\nBlock Number : ',var 
     break 
    else: 
     print 'ERROR!!! Enter again.' 
1

你應該將你的字符串轉換爲int。

var=0 
while (var <1 or var>100): 
    # I changed here 
    var=int(raw_input('Enter the block number ')) 
    if (var >=1 and var<=100): 
     print '\nBlock Number : ',var 
    else: 
     print 'ERROR!!! Enter again.' 
0

您正在運行到一個問題,即字符串(如raw_input返回)總是比整數更大:

>>> "25" > 100 
True 

您需要將您的輸入轉換爲整數第一:

var = int(raw_input("Enter the block number ")) 

當然,在面對不好的輸入時,你會想要保持彈性,所以你可能想把整個東西包裝在try塊中。

0

你好,你需要進入 「破發」,也VAR應該是一個整數,見下文

while True: 
var=int(raw_input('Enter the block number ')) 
if (var >=1 and var<=100): 
    print '\nBlock Number : ',var 
    break 
else: 
    print 'ERROR!!! Enter again.' 
    continue 

希望這有助於