消息"加密"通过一组给定的规则返回不完整的结果

时间:2015-09-07 01:52:54

标签: python for-loop encryption

我必须创建一个函数,该函数接收用户想要加密的消息并返回加密的字符串。加密遵循一系列规则:

  • 字符:在字母和大写[A-Z]中,替换为:小写字符,然后添加^字符
  • 字符:在字母和小写[a-z]中,替换为:不要更改
  • 字符:1,替换为:@
  • 字符:2,替换为:#
  • 字符:3,替换为:$
  • 字符:任何其他字符,替换为:*

到目前为止,这是我的代码。它只会返回'p^',所以我认为我的第一个if语句和返回值有问题。如果有人能引导我朝着正确的方向前进,我会感激它!

def encryptMessage(secretMsg):

secretMsg = str(secretMsg)
u = secretMsg.upper()
symbol = "^"
for x in secretMsg:
    if u in secretMsg:
        return u.lower() + symbol
        secretMsg += x
    return secretMsg
    if u.lower():
        return secretMsg
    elif 1 in secretMsg:
        return secretMsg.replace(1, "@")
    elif 2 in secretMsg:
        return secretMsg.replace(2, "#")
    elif 3 in secretMsg:
        return secretMsg.replace(3, "$")
    num = u > 3
    if num in secretMsg:
        return secretMsg.replace(num, "*")
return secretMsg

示例:

注意:这些是程序应返回的示例,而不是程序运行的实际实例。

>>> encryptMessage("my123password")
'my@#$password'
>>> encryptMessage("Dan()123Barrun")
'd^an**@#$b^arrun'
>>> encryptMessage("PASS99cats")
'p^a^s^s^**cats'

1 个答案:

答案 0 :(得分:1)

让我们从顶部开始,继续努力。

首先,这不是加密。

这只是在文本中添加随机字符,而不是将数据转换为密文,然后可以通过密钥对其进行解密。如果有什么我称之为混淆。

现在我们已经解决了这个问题,让我们告诉你为什么你的代码无效。

def encryptMessage(secretMsg):
    secretMsg = str(secretMsg)
    u = secretMsg.upper()
    symbol = "^"
    for x in secretMsg:
        if u in secretMsg:
            return u.lower() + symbol # Your function stops here b/c return
            secretMsg += x
        return secretMsg # Use print() to display, return will stop your function.
        # Nothing below here is executed because of the return above.
        if u.lower(): # This is always True unless u is empty.
            return secretMsg # Function will then stop here.
        elif 1 in secretMsg: # This will raise an error, make that 1 a string
            return secretMsg.replace(1, "@") # Same here
        elif 2 in secretMsg: # here
            return secretMsg.replace(2, "#") # here
        elif 3 in secretMsg: # here
            return secretMsg.replace(3, "$") # and here
        num = u > 3 # This will return True if u > 3 or False if u <= 3, not any number greater than u.
        if num in secretMsg:
            return secretMsg.replace(num, "*")
    return secretMsg

请通过this stackoverflow postthis video来研究退货声明。

由于您对反馈非常感激,因此我决定更进一步帮助您,并为您提供更好的方法来帮助您学习该课程。

import string # This module holds lists of characters that you would find useful.

def encryptMessage(original_message):
    original_message = str(original_message)
    secret_message = []
    conversions = {"1": "@", "2": "#", "3": "$"}
    for letter in original_message:
        if letter in string.ascii_uppercase:
            secret_message.append(letter.lower() + "^")
        elif letter in '123':
            secret_message.append(conversions[letter])
        elif letter in string.ascii_lowercase:
            secret_message.append(letter)
        else:
            secret_message.append("*")
    return ''.join(secret_message)

如果您想知道变量conversions是什么,则称为dictionary

如果您想知道[]括号表示的内容,则表示list。请注意,.append()是一个函数,它在列表或兼容数据结构的末尾添加一个新元素,而''.join()是一个将列表连接成一个字符串的函数。

如果你想知道我在用string.ascii_uppercase做什么,我正在调用string模块中定义的变量。有关模块的更多信息,请查看the documentation

有关如何使用Python控制流语句的更多信息,请阅读here