【问题标题】:User Input Against a List - Python针对列表的用户输入 - Python
【发布时间】:2018-12-15 04:40:26
【问题描述】:
characters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "-", "'", " ", "*"]
def enter_first_name():
while True:
    first_name = input("Enter your first name: ").lower().rstrip().lstrip()
    for i in first_name:
        if i in characters:
            print(i)
            return first_name
        else:
            print("ERROR! Invalid entry.")

print(i) 用于检查它是否正常工作,但它打印的只是用户输入的任何名称的第一个字母。其目的是,例如,如果有人不小心在他们的名字中输入了一个数字(任何未包含在列表字符中的符号),它会返回“错误!无效条目”。并提示他们再次输入他们的名字。

我做错了什么以及如何检查输入中的每个字母以确保它是有效的输入?

谢谢!

【问题讨论】:

  • 尝试从 if 语句中删除 return first_name,并将其放在 for 循环之外
  • 首先,characters 应该是一个集合,用于 O(1) 查找,其次,如果用户输入了有效字符,您将在循环的第一次迭代后返回。

标签: python python-3.x


【解决方案1】:

您需要删除return first_name。除非函数 100% 完成,否则永远不要调用 return。在这里,您在第一次循环迭代时调用它,这意味着该函数将在检查名字中的第一个字符后完成。

characters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "-", "'", " ", "*"]
def enter_first_name():
    while True:
         first_name = input("Enter your first name: ").lower().rstrip().lstrip()
         for i in first_name:
             if i in characters:
                 print(i)
            else:
                 print("ERROR! Invalid entry.")

当您删除 return first_name 时,它会按预期验证每个字符。

输出:

Enter your first name: trevor
t
r
e
v
o
r
Enter your first name: trevor!
t
r
e
v
o
r
ERROR! Invalid entry.
Enter your first name:

【讨论】:

  • 这实际上永远不会返回经过验证的输入,这可能是函数的重点。
【解决方案2】:

您可以使用all 检查您输入的所有字符是否都在白名单中。

from string import ascii_lowercase

characters = set(ascii_lowercase + " -*'")

def enter_first_name():
    while True:
        first_name = input("Enter your first name: ").lower().strip()
        if all(i in characters for i in first_name)
                return first_name
        else:
            print("ERROR! Invalid entry.")

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 2017-12-17
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多