目前正在进行任务并且有点卡住。寻求一些帮助来解决这个问题。我试图尝试一个功能,它将两个值作为用户输入的杂志和赎金。如果可以在杂志中找到赎金中的字符我想要返回它是否属实,否则如果在杂志字符串中找不到赎金字符串则返回false。赎金分为字典{key,vaue},例如用户输入:
输入杂志:你好
输入赎金:你好
{' h':1,':1,' l':2,' o':1}
{' h':1,':1,' l':1,' o':1}
这应该返回true,但它返回false,因为它不计算第二个' l'在'你好'。我做错了什么?
def compare(magazine, ransom):
matches = {}
for ch in ransom:
if ch in magazine:
if ch in matches:
matches[ch] += 1
else:
matches[ch] = 1
if ransom in matches:
return True
else:
return False
答案 0 :(得分:1)
如果匹配中有赎金:
首先,这种比较看似错误,赎金应该是一个由用户输入的字符串,匹配应该是字典。
在您的代码中:
ransom: 'hello'
matches: {'h': 1, 'e': 1, 'l': 2, 'o': 1}
所以你的if条件就像:
if 'hello' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}:
# this line will not be executed
应该是这样的:
if 'h' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}:
# this line will be executed
比较这个的好方法:
# 1. Processing ransom
{'h': 1, 'e': 1, 'l': 2, 'o': 1}
# 2. Processing magazine
{'h': 2, 'e': 3, 'l': 2, 'o': 1}
# 3. Comparing each character and counts of both one by one in a for-loop
赎金分为字典{key,vaue}
注意:这种假设的方式可能是错误的。字典比较将忽略字符串的顺序,并且比较字符逐个计数而没有顺序。
# Those examples could give unexpected answers
compare('hello there', 'olleh')
compare('hello there', 'olleeeh')