Python输入数据类型处理

时间:2014-01-13 17:33:54

标签: python validation input error-handling

我花了一个小时或更长时间在这里寻找答案。我找到了一些有用的东西,但没有具体回答我的问题。我使用的是Python 3.3.3。我是新手所以请保持温柔。

我正在尝试创建一个接受用户输入的程序,但是我需要检查输入的数据类型,然后根据该数据类型采取某种行动。

除此列表中的字符串之外的任何字符串:

valid_help_string_list = ['\'help\'', '\'HELP\'', 'help', 'HELP']

应该导致打印:

'请输入有效的条目'或类似的内容。

任何整数(大于0但小于500)都应该使用float()来使行排成一行。

任何浮动(超过0.0但低于500.0)都有效。

为了这个项目,我假设没有人使用它将重量低于100磅或超过500.

任何不属于这些类别的内容也应该向用户提供相同的“请输入有效回复”错误消息。

我认为对于一个新手而言,这个项目很简单。该程序旨在让您输入您的重量,然后根据该重量创建一个象形图,并将其全部保存在我为其设置的.txt文件的下一个打开行。或者,如果您想查看象形图的图例,您应该能够在该列表中找到的任何变体中键入帮助。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

默认情况下,用户输入将是一个字符串,因此我们需要检查它是否可以变为整数或浮点数。因为你想要在浮点数中转换整数,所以不需要做任何复杂的事情:

def validate_input(val, min_v=100, max_v=500):
    try:
        val = float(val)
    except ValueError:
        print("Not a valid entry")
    else:
        if not min_v < val <= max_v:
            print("Value should be between {} and {}".format(min_v, max_v))
        else:
            return val
    return False

现在你的调用循环可以读取:

while True:
    val = input("...")
    if val in valid_help_string_list:
        # print help
    else:
        val = validate_input(val)
        if val:
            break
# use val

请注意,这取决于validate_input返回False或大于0的数字; Python将零回报解释为False而未达到break,因此我建议保留min_v >= 0