我正在用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编程相当陌生。你知道吗
谢谢!你知道吗
由于您的
return
被隐藏在if
语句的else
子句中,因此执行从函数的底部掉下来,并且在发生这种情况时,Python默认返回None
。你知道吗对
get_message()
的递归调用将不会返回到原始调用方(在本例中是user_input
函数),除非使用语句return get_message()
实际返回递归调用的值。你知道吗但是,您可能需要考虑使用循环而不是递归;当使用递归进行输入验证时,猴子敲击键盘可能最终导致堆栈溢出。下面是一个迭代版本的示例:
只要有有效数据,
return
就会跳出while
循环,并将其返回给调用者。你知道吗相关问题 更多 >
编程相关推荐