用Python创建一个确认功能

3
def confirm_choice():
    confirm = input("[c]Confirm or [v]Void: ")
    if confirm != 'c' and confirm != 'v':
        print("\n Invalid Option. Please Enter a Valid Option.")
        confirm_choice() 
    print (confirm)
    return confirm

当输入无效时,例如输入字母'k'后跟一个有效输入'c',该函数将打印两个输入'c'和'k'。
输出:
c
k

如何修改上述程序,使其仅返回“ c”或“ v”,并在输入无效时重复执行该函数。

3
可能是如何使用try..except或if...else验证用户输入?的重复内容。 - jeremycg
2个回答

7
递归是不必要的;使用while循环更容易实现此操作:
while True:
    confirm = input('[c]Confirm or [v]Void: ')
    if confirm.strip().lower() in ('c', 'v'):
        return confirm
    print("\n Invalid Option. Please Enter a Valid Option.")

有没有一种方法可以在不按“Enter”键的情况下完成这个操作(即只需按“c”或“v”)? - AstroFloyd
1
@AstroFloyd 请参考这个问题中读取单个字符的方法。 - tzaman
谢谢,这让我找到了 PyPI 上的 getch 包:https://pypi.org/project/getch/,它基本上允许我用 getch()getche() 替换 input() - AstroFloyd

4
你在递归调用confirm_choice()后忘记了返回,因此它跳出了if块并执行。
print (confirm)
return confirm

这将打印出第一个无效输入。

def confirm_choice():
    confirm = input("[c]Confirm or [v]Void: ")
    if confirm != 'c' and confirm != 'v':
        print("\n Invalid Option. Please Enter a Valid Option.")
        return confirm_choice() 
    print (confirm)
    return confirm

应该正确地运作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接