我正在编写一个python程序来查找单词中的字符序列。但是程序给出了意外的结果。我发现了一个类似的程序,可以很好地工作。对我来说,我认为这两个程序非常相似,但不知道为什么其中一个不起作用
# Display the character sequence in a word
dict={}
string=input("Enter the string:").strip().lower()
for letter in string:
if letter !=dict.keys():
dict[letter]=1
else:
dict[letter]=dict[letter]+1
print(dict)
def char_frequency(str1):
dict = {}
for n in str1:
keys = dict.keys()
if n in keys:
dict[n] += 1
else:
dict[n] = 1
return dict
print(char_frequency('google.com'))
输入字符串:google.com
{'g': 1, 'c': 1, 'm': 1, 'o': 1, 'l': 1, '.': 1, 'e': 1}
{'c': 1, 'e': 1, 'o': 3, 'g': 2, '.': 1, 'm': 1, 'l': 1}
以上是正确的输出。
现在我心中的问题。
一世。为什么第一个程序无法正常运行?
ii。这两个程序的意识形态是否不同?
实际上,您使用的if语句有一个小错误。请看下面的修改程序。
注意:另外,请确保不要将诸如dict之类的预定义数据类型名称用作变量名称。我已将其更改为d。
>>> d = {}
>>>
>>> string=input("Enter the string:").strip().lower()
Enter the string:google.com
>>>
>>> for letter in string:
... if letter not in d.keys():
... d[letter] = 1
... else:
... d[letter] = d[letter] + 1
...
>>> print(d)
{'g': 2, 'o': 3, 'l': 1, 'e': 1, '.': 1, 'c': 1, 'm': 1}
>>>
您还可以查看在终端上执行的以下语句。
将键与d.keys()进行比较将始终返回,False
因为这里的key是一个字符串,而d.keys()始终是dict_keys
(Python3)和list
(Python2)类型的对象。
>>> d = {"k1": "v1", "k3": "v2", "k4": "Rishi"}
>>>
>>> d.keys()
dict_keys(['k1', 'k3', 'k4'])
>>>
>>> "k1" in d
True
>>>
>>> not "k1" in d
False
>>>
>>> "k1" == d.keys()
False
>>>
>>> "k1" not in d
False
>>>
您的2个问题的答案:
因为该语句letter != dict.keys()
始终True
如此,所以键数不会增加。只需将其更改为即可letter not in dict.keys()
。最好使用d
代替,dict
这样语句看起来像letter not in d.keys()
。
这两个程序的逻辑相同,即遍历字典,检查字典中是否存在键。如果不存在,请创建一个带有count的新键,1
否则将相关计数增加1
。
非常感谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句