2014-03-26 68 views
0

初學者在這裏。 :)2代碼工作,第三個不

所以我想實現的是這樣的:

用戶輸入一個數字。它吐出了數字的^ 3。如果用戶輸入一個字母,它會打印出錯誤信息。

代碼#1的偉大工程:

def thirdpower(): 
try: 
    number = int(raw_input("Enter a number : ")) 
    n=number**3 
    print "%d to the 3rd power is %d" % (number,n) 
except ValueError: 
    print "You must enter an integer, please try again." 
    thirdpower() 

thirdpower() 

但我想嘗試用while語句做同樣的事情,因爲我想用它來練習。我知道這樣更詳細些,但我認爲這是一個很好的做法。

number=raw_input("Please Enter an integer") 
while number.isalpha(): 
    print "You have entered letter. Please try again" 
    number=raw_input("Please Enter an integer") 

n=int(number)**3 
print "%d to the 3rd power is %d" %(int(number), n) 

我的問題是這樣的。如果我刪除while聲明中的number=raw_input("Please Enter an integer")並將其替換爲break,則代碼不起作用。

這裏是我的意思是:

number=raw_input("Please Enter an integer") 
while number.isalpha(): 
    print "You have entered letter. Please try again" 
    break #This break here ruins everything :(

n=int(number)**3 
print "%d to the 3rd power is %d" %(int(number), n) 

任何人都可以解釋,爲什麼?

回答

2

A break語句跳出一個循環。

在這種情況下,如果用戶鍵入一個字母,循環運行print語句,然後立即到達break並終止而不是一遍又一遍循環。 (當你把它的if語句,該方案並不總是達不到裏面break是比較有用的。)

但使用break不會停止投放計劃的其餘部分,所以Python仍然試圖運行線6由於number變量包含一個字母,程序在嘗試將其轉換爲數字時會崩潰。

如果用戶輸入一個字母,你可能試圖結束程序。在這種情況下,你可以使用內置的sys模塊做這樣的事情:

import sys 

number=raw_input("Please Enter an integer") 
if number.isalpha(): 
    print "You have entered letter. Please try again" 
    sys.exit() 
#... 
+0

如果是這樣的話,應該不是至少打印出'您輸入字母。請再試一次'然後終止? – dyao

+0

@ user3386440你說得對,'print'語句在循環中斷之前運行一次。我編輯了答案來澄清這一點。 –

4

break退出了while循環的,在這一點number仍然是什麼信進入讓你得到試圖使它的int錯誤。