限制和验证 python 中的输入



我试图限制输入的字符长度,然后验证它是否是三个白色字符之一。最后一部分的挣扎:

while True:
try:
letter=input("Please enter a character: ") #most intuitive way for me was the assert function but very happy to hear any other ways
assert len(letter) !=1
except AssertionError:
print("Please type only ONE character")
else:
whitespace=["n"," ","t"] #i believe the list specification here makes the not in code invalid? believe the two may not be compatible but errors not reached there yet
if whitespace not in letter:
print("Your character in lower case is: "+str(letter).lower())
else:
print("You typed a white space character!")

欢迎来到 Stackoverflow!

看起来错误在if whitespace not in letter:行上。这实际上应该是相反的方式:if item not in list:.你有if list not in item:.

此外,如果我稍微重新格式化您的代码,可能会对您有所帮助。

while True:
letter = input('Please enter a character: ')
if len(letter) != 1:
print('Please type only ONE character')
continue
if letter in ['n', ' ', 't']:
print("You typed a white space character!")
continue
lowercase_letter = letter.lower()
print(f'Your character in lower case is: {lowercase_letter}')

如果你还没有看过pylint,我建议你看看它。它可以帮助您将代码格式化为 PEP8 标准。它也非常擅长指出代码中的一些简单错误。

引发异常用于向调用函数报告错误 - 即您无法执行函数应该执行的作业,因为输入或系统状态不符合函数的要求。

捕获异常用于处理您知道如何在更高级别函数中处理的特定错误。例如,如果您尝试读取文件而该文件不存在。在您的程序中,这意味着用户尚未在配置文件中设置特定标志...因此,您可以捕获该异常并让用户知道如何解决问题。

引发Exception并在同一个函数中捕获它(至少在这种情况下(只是编写if语句的一种非常复杂的方法。

在编写if-else语句时,最好尝试使if分支为正。这意味着如果可以的话,避免if not ...: else:

在您的代码中,letter已经是一个字符串对象 - 因此无需使用str(letter)创建新的字符串对象。在python中,一切都是对象,甚至是文字。

continue语句跳转到循环的下一个迭代。continue之后的任何内容都不会在循环的当前迭代中执行。您还可以查看完成循环执行break语句。作为练习,您可以查看在代码中添加额外的检查,以查看用户是否键入了"quit",然后break。你认为会发生什么?

if letter.lower() == 'quit':
break

这必须在检查单个字母之前添加,否则您将永远无法进行此检查。

最后,而不是在打印语句中使用字符串连接(使用str + str(。您可以使用 f 字符串,格式化字符串,如示例f'Hi my name is {name} and I am from {home}'所示,其中namehome是字符串变量。

希望这有帮助!

我建议你不要使用异常,因为它们非常不稳定。相反,我会使用 if/else 条件,如下所示:

letter = input('Please enter a character: ')
if len(letter) == 1:
if letter in 'nt ':
print('You typed a white space character!')
else:
print('Your character in lowercase is {}'.format(letter.lower()))
else:
print('Please type only ONE character')```

相关内容

  • 没有找到相关文章

最新更新