gpt4 book ai didi

python - 设置为函数调用的变量返回 None

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:24 25 4
gpt4 key购买 nike

我正在用 python 编写一个简单的 ceaser 密码程序,这个概念让我困惑了很长一段时间。

我所做的是要求用户提供 raw_input 以确定密码的消息和 key ,如下所示:

def user_input():
ask_user = raw_input("Do you want to encrypt or decrypt a message?")
if ask_user in "encrypt e".split():
message = get_message()
key = get_key()
translate_message(message, key)
else:
print 'Type encrypt or e for encryption, or decrypt or d doe decryption'
user_input()

这会收集消息和 key ,并传递到 translate_message 以进行实际加密。

这是我的 get_message 函数:

def get_message():
get_user_message = raw_input('enter in your message\n')
vm = validate_message(get_user_message)
if not vm:
print 'Please enter a valid message'
get_message()
else:
print get_user_message
return get_user_message

我想验证输入以确保用户输入了正确的值。如果根据 validate_message 值不正确,则再次调用 get_message,否则 get_message 返回原始值。

这里是 validate_message:

def validate_message(message):
if not re.match(r'^[A-Za-z]+$', message):
return False
return True

只是一个简单的检查(我喜欢我的函数做一件事)

通常情况下,这运行良好并且键值和消息值像往常一样返回。当我故意输入不正确的值来测试我的验证时,问题就来了。

这是没有错误值的 translate_message 返回的内容(它只返回两个值):

'test_message', 22

当我输入不正确的值时,就会出现困惑。假设我输入 3333(由于值不正确,将调用 get_message()),直到用户输入正确的输入。如果用户在成功输入值之前输入了任何类型的错误值,translate_message 将返回 None

None, 22

在 get_message() 函数中,我在返回值之前添加了一个打印语句,它按预期打印出正确的值。那为什么是

key = get_key()

等于无?我遍历了 get_message() 中的逻辑,但当它应该返回用户正确的猜测时,我看不到返回值在哪里等于 None。

感谢任何帮助,如果有更好的方法来实现这种类型的逻辑,我很想知道!我是 Python 编程的新手。

谢谢!

最佳答案

由于您的 return 被埋在 if 语句的 else 子句中,执行从函数的底部掉下来,Python 返回None 默认情况下发生这种情况。

您对 get_message() 的递归调用不会返回到原始调用者(在本例中为 user_input 函数),除非您实际从递归调用中返回值语句return get_message()

但是,您可能想为此考虑一个循环而不是递归;当使用递归进行输入验证时,敲击键盘的猴子最终可能会导致堆栈溢出。这是此迭代版本的示例:

def get_message():
while 1:
get_user_message = raw_input('enter in your message\n')
vm = validate_message(get_user_message)
if not vm:
print 'Please enter a valid message'
else:
print get_user_message
return get_user_message

只要您有有效数据,return 就会跳出 while 循环,并将其返回给调用者。

关于python - 设置为函数调用的变量返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com