我遇到了字典问题。
所以我的字典在字母中有一个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))
d1.keys()
中来对得到的字符串进行加密我不确定我哪里错了。任何帮助都会很棒。
答案 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,则可以将该字符替换为您的数字的字符串版本(与该字符关联),然后在的末尾返回加密的字符串。