2014-03-01 84 views
1

我想在程序關閉前限制無效輸入的數量。因此,如果輸入無效,我需要程序回到原始輸入問題。我的嘗試的限制將是3.蟒蛇3 - 限制無效輸入

我不確定使用什麼語法或如何構造它。

繼承人我的代碼示例:

min_mile = 0 

def main(): 

    print('hello',name,', today we will be doing some standard to metric conversions.') 
    print('The first conversion will be to convert miles to kilometers.') 
    MileToKm() 


def MileToKm(): 
    mile = float(input('What is the number of miles that you would like to convert? ') 
    mile_conv = mile * 1.6 

    if mile_conv > min_mile : 
     print ('The result would be', format(mile_conv,'.2f'),'kilometers.') 
    else: 
     exit(print('invalid input')) 

main() 

所以現在,如果轉換後的輸入出來作爲否定其視爲無效。我需要對其進行修改,以便在程序關閉前用戶有三次嘗試輸入有效的號碼。

我該怎麼辦?

我在Python 3.3.3

+1

刪除'print'內'退出()'調用。 – jfs

回答

1

變化MileToKm退出路徑是這樣的:

if mile_conv > min_mile : 
    print ('The result would be', format(mile_conv,'.2f'),'kilometers.') 
    return True 

else: 
    return False 

然後換你的函數來處理重試:

def TryMileToKm(): 
    attempts = 0 

    while attempts < 3: 
     attempts += 1 
     if MileToKm(): break 

    if attempts >= 3: 
     print 'Invalid input' 
     exit(1) 

這是不是這樣做的最習慣的方式,但我試圖保持明顯的意圖。

編輯非常好,那就是:

def miles_to_km(miles): 
    return miles * 1.6 

def read_miles(prompt): 
    miles = float(input(prompt)) 
    if miles < 0: raise ValueError() 
    return miles 

def read_miles_retry(prompt, retries = 3): 
    while retries > 0: 
     try: 
      return read_miles(prompt) 
     except: 
      retries -= 1 
      print('Invalid input') 

    raise ValueError() 

def main(): 
    try: 
     kms = miles_to_km(read_miles_retry('Miles? ')) 
     print(kms) 
    except: 
     exit(1) 

main() 
+0

夠公平的。你走了。請注意,在這個版本中,每個功能都有一個責任,並且只需要1個角色。這是主要的改進 – slezica

+0

好吧,我明白這些代碼的一些,你能解釋一些給我的東西嗎?例如,當你將read_miles定義在括號中時(提示)。這樣做的目的是什麼?當你def main()的時候:你試了一下然後kms = miles_to_km(read_miles_retry(miles?)。我不明白這是怎麼工作的。你把變量「kms」設置爲所有這些,但是調用函數的目的是什麼?這個語法我們還沒有在我的課堂上討論過,而我可以推導出它的大部分含義和目的,這遠遠超出我們迄今爲止所學到的任何東西 – krona

+0

函數帶有參數用參數定義函數的語法是'def name(arg1,arg2,... argn)'。在函數體內部,可以使用參數。當從外部調用一個名字的函數時,你可以傳入參數到達body,in你應該嘗試一個Python教程:) – slezica