-2

我的代码需要向用户询问 3 个数字。如果数字超过100或低于1,告诉他们"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
4

1 回答 1

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_int,已经定义了promptminvalmaxval参数,因为它们在参数列表中。将prompt参数传递给input()函数,然后使用minvalandmaxval限制在无限 while 循环中进行范围检查。该函数返回范围内的有效数字。如果用户输入的整数超出范围,我们会再次询问他们,直到他们给出可接受的输入。所以调用者保证得到指定范围内的整数。

这不是理想的设计,因为如果用户不想输入数字,但他们想“导航回来”......所以这超出了这种方法的范围。但是有一种更高级的编程技术,称为异常处理(请阅读//try例如)7.4。尝试语句catchthrow

在函数之外,在哪里get_int被调用,minvalmaxval被定义为主模块命名空间中的全局变量。对于测试,我只是在交互模式下运行,接受一个值。在 python 2.7 和 python 3.2 上测试。

如果您以前从未见过"xxxxx {0} xxxx".format(value)字符串格式化表达式,请参阅 python 帮助文件第6.1.2 节。字符串格式6.1.3.2。格式示例

于 2015-10-26T01:41:04.073 回答