用列表内容验证用户输入的最佳方法是什么?

时间:2018-08-20 20:57:44

标签: python error-handling

相当多的Python新手在这里尝试学习。我有一个同事启动的脚本,我正在努力向其中添加新功能。我想验证用户输入是否在我拥有的两个列表之一之内。

我从用户那里得到一个原始输入,要求一个站点名称,我想添加代码来检查用户输入是否在预定义列表中sites_2017和sites_2018(稍后在代码中使用) ,如果不是,则返回错误;如果不是,则继续执行脚本的其余部分。我一直在搜索,发现很多不同的while循环答案和函数,但是到目前为止,没有一个引用多个列表来进行匹配。

只是想尽办法,找出最适合的代码,以及在当前代码中的while循环中的其他地方,等等。

# Ask user input for what they'd like to do? Render or audit? _Step user through process_

import os
import subprocess

getuser = raw_input("Please enter your username :")

print("1. render_device")
print("2. audit_deivce")
askuser = raw_input("Would you like to render_device or audit_deivce? : ")

#Render:

if askuser == "1":
        get_site_name = raw_input("Please enter the site name you'd like to render :")

        sites_2017 = ["bob", "joe", "charlie"]
        sites_2018 = ["sarah", "kelly", "christine"]

2 个答案:

答案 0 :(得分:1)

已更新为可发表评论

您将要在此处利用in,最好从两个列表中创建一个集合,就像@abarnert在评论中提到的那样。您可以将其包装在函数内部,并在不满足条件的情况下递归调用该函数(请注意,出于Python 3的兼容性,我已将raw_input()更改为input()):

getuser = input("Please enter your username :")

print("1. render_device")
print("2. audit_device")

askuser = input("Would you like to render_device or audit_device? : ")

def verify_input(sites_set):

    get_site_name = input("Please enter the site name you'd like to render :")

    if get_site_name in sites_set:
        print('Proceed')
        return
    else:
        print('Not in either list!')
        verify_input(sites_set)

if askuser == "1":

        sites_2017 = ["bob", "joe", "charlie"]
        sites_2018 = ["sarah", "kelly", "christine"]

        verify_input(set(sites_2017 + sites_2018))

编辑

但是,更简单的实现是只使用while循环:

getuser = input("Please enter your username :")

print("1. render_device")
print("2. audit_device")

askuser = input("Would you like to render_device or audit_device? : ")

if askuser == "1":

        sites_2017 = ["bob", "joe", "charlie"]
        sites_2018 = ["sarah", "kelly", "christine"]

        sites_set = set(sites_2017 + sites_2018)
        proceed = False

        while not proceed:

            get_site_name = input("Please enter the site name you'd like to render :")

            if get_site_name in sites_set:
                print('Proceed')
                proceed = True
            else:
                print('Not in either list!')

答案 1 :(得分:0)

在python中,您可以使用成员资格测试运算符in。因此,除了使用循环检查外,您还可以组合列表并检查成员资格,如下所示:

if get_site_name in sites_2017 + sites_2018: