2015-10-25 100 views
-2

我的代碼需要詢問用戶3個號碼。如果數字超過1001,請告訴他們"no way, try a different number" 我的問題是:我無法弄清楚如何定義我的變量prompt,並且在運行我的代碼時獲取下面的stacktrace名稱「提示」未定義

代碼:

def get_int(prompt, minval, maxval): 
    """gets a value for an input. if its too small or large gives error""" 
    n= int(input("Choose a number between 1 and 100: ")) 
    maxval= n > 100 
    minval= n< 1 
    prompt = n 

    int_choice.append(n) 
    return None 


int_choice=[]# list for adding inputs 

for i in range (3): 
    get_int(prompt, minval, maxval) 

    if n== minval or n== maxval: 
     print("no way, try a diffrent number") 
    int_choice.append(n) 
    print("you chose: ", int_choice) 

堆棧跟蹤:

>line 18, in <module> 
get_int(prompt, minval, maxval) 
NameError: name 'prompt' is not defined 
is the error message 
+0

在調用get_int之前,將prompt提示爲promt =「」(在for循環中的get_int(提示符,最小值,最大值)之前) – labheshr

+0

您希望'prompt'具有什麼值?你打算讓你的代碼做什麼? – BrenBarn

+0

不只是提示值被破壞,所有的腳本都在使用外部的get_int變量 – AndreL

回答

0

這是我怎麼會接近get_int功能:

def get_int(prompt, minval, maxval): 
    '''Prompt for integer value between minval and maxval, inclusive. 
    Repeat until user provides a valid integer in range. 
    ''' 
    while 1: 
     n = int(input(prompt)) 
     if (n < minval): 
      print("value too small") 
      print("value must be at least {0}".format(minval)) 
     elif (n > maxval): 
      print("value too large") 
      print("value must be not more than {0}".format(maxval)) 
     else: 
      print("value accepted") 
      return n 
    pass 
    # TODO: raise a ValueError or a RuntimeError exception 
    # if user does not provide valid input within a preset number tries 

if __name__ == "__main__": 
    # Example: test the get_int function 
    # Requires user interaction. 
    # Expect out-of-range values 0, 101, -5, etc. should be rejected. 
    # Expect range limit values 1 and 100 shoudl be accepted. 
    # Expect in-range values like 50 or 75 should be accepted. 
    minval = 1 
    maxval = 100 
    test1 = get_int("Choose a number between {0} and {1}: ".format(
     minval,maxval), minval, maxval) 
    print("get_int returned {0}".format(test1)) 

內部功能get_intpromptminvalmaxval參數已經被定義因爲它們在參數列表中。將prompt自變量傳遞給input()函數,然後將minvalmaxval限制用於無限while循環內的範圍檢查。該函數返回範圍內的有效數字。如果用戶輸入超出範圍的整數,我們再次詢問它們,直到它們提供可接受的輸入。所以調用者保證獲得一個在指定範圍內的整數。

這不是理想的設計,因爲如果用戶不想輸入數字,但他們想要「導航回去」......這超出了此方法的範圍。但有一種更高級的編程技術稱爲異常處理(例如,請閱讀try/catch/throw7.4. The try statement

在函數的外部,調用get_int時,minvalmaxval被定義爲主模塊名稱空間中的全局變量。爲了測試,我只是在交互模式下運行,接受一個單一的值。測試了python 2.7和python 3.2。

如果你以前從未見過"xxxxx {0} xxxx".format(value)字符串格式化表達式,這在python幫助文件部分6.1.2. String Formatting6.1.3.2. Format examples中有描述。