2015-10-25 46 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中有描述。