设置为函数调用的变量返回非

2024-03-28 15:44:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我所做的是请求用户的原始输入来确定密码的消息和密钥,如下所示:

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()

这将收集消息和密钥,并将其传递到translate\u消息中进行实际加密。你知道吗

下面是我的获取消息功能:

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\u message的值不正确,它将再次调用get\u message,否则get\u message将返回原始值。你知道吗

以下是您的信息:

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

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

正常情况下,该操作运行正常,返回的键和消息值与正常值相同。当我故意输入不正确的值来测试我的验证时,问题就来了。你知道吗

以下是translate\u消息返回的值,没有错误的值(它只返回两个值):

'test_message', 22

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

None, 22

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

key=get\u key()

等于零?我检查了get_message()中的逻辑,但我看不出当返回值应该返回给用户正确的猜测时,返回值在哪里等于零。你知道吗

感谢您的帮助,如果有更好的方法来实现这种逻辑,我想知道!我对python编程相当陌生。你知道吗

谢谢!你知道吗


Tags: orkey用户消息messageinputgetreturn
1条回答
网友
1楼 · 发布于 2024-03-28 15:44:58

由于您的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循环,并将其返回给调用者。你知道吗

相关问题 更多 >