如果字典中出现字符,则“加密”字符串

时间:2019-06-30 07:57:58

标签: python string dictionary encryption

我遇到了字典问题。

所以我的字典在字母中有一个char作为键,而一个数字作为值。

我需要输入一个字符串,然后如果该字符串中的一个字符出现在我的字典中,则需要用相应的键值替换该字符。

例如,这是我的字典:a:1, b:2, c:3, d:4。对于这样的字符串:dan,我将得到输出:41n

如果字母不在词典中,那么它会保持原样。

这是我的尝试:

    def build_encrypt_code():
        d1 = {}
        dictLength = int(input("How many keys do you want in your dict? "))
        for i in range(dictLength):
            keyLetter = str(input("Please enter a char to represent a key: "))
            valueNum = int(input("please enter a number to represent the key's value: "))
            d1[keyLetter] = valueNum
        return d1

    def encrypt(d1, strToEncrypt):
        for i in strToEncrypt:
            if i == d1.keys():
                encrpytedStr = strToEncrypt.replace(i, d1[i])
                return encrpytedStr
            else:
                return i

    d1 = build_encrypt_code()
    strToEncrypt = str(input("Enter string to encrypt: "))
    print(encrypt(d1, strToEncrypt))
  1. 我问用户他想要字典多长并创建字典
  2. 我要求输入一个char作为键,并选择num作为对应的值
  3. 我通过检查字符串是否在d1.keys()中来对得到的字符串进行加密
  4. 然后我调用所有函数以返回加密的字符串

我不确定我哪里错了。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我对您的代码进行了两次编辑。

1。。通过第一次编辑,您可以使用键while True解析键和值而无需询问用户他想要多少键,并在找到退出命令时停止(例如字符串{{ 1}})。

还要检查长度(stop是单个字符,keyLetter是单个数字,这要归功于两个valueNum,如果出现以下情况,则提示用户再次插入值)他们之前失败了

这是主观的 ;如果之前需要固定大小,则最好使用代码。

while len() != 1

2。。但是,第二项编辑是强制性的,并且是软件失败的地方。

def build_encrypt_code():
    d1 = {}
    exitCmd = 'stop'
    print('Enter {} to interrupt parsing'.format(exitCmd))

    while True:
        keyLetter = ''
        while len(keyLetter) != 1:
            keyLetter = str(input("Please enter a char to represent a key: "))
            if keyLetter.lower() == exitCmd:
                break

        valueNum = ''
        while len(str(valueNum)) != 1:
            valueNum = int(input("please enter a digit to represent the key's value: "))

        d1[keyLetter] = valueNum

    return d1

在此功能中,您循环遍历字符串中的所有字符(def encrypt(d1, strToEncrypt): for i in strToEncrypt: if i == d1.keys(): encrpytedStr = strToEncrypt.replace(i, d1[i]) return encrpytedStr else: return i 是一个字符),然后将一个字符与KeysView进行比较。此外,您然后在if内部返回,但这样做只会做一个循环然后中断(并且,因为if条件始终为False,您的i将始终是您的第一个字符)。

这是加密功能的工作代码:

encryptedStr

我们循环遍历每个字符,如果它是def encrypt(d1, strToEncrypt): encryptedStr = strToEncrypt for char in strToEncrypt: if char in d1.keys(): encryptedStr = encryptedStr.replace(char, str(d1[char])) return encryptedStr KeysView,则可以将该字符替换为您的数字的字符串版本(与该字符关联),然后在的末尾返回加密的字符串。