我试图让我的程序计算除字符串中的数字之外的所有内容,并将其存储在字典中。
到目前为止,我有这个:
string = str(input("Enter a string: "))
stringUpper = string.upper()
dict = {}
for n in stringUpper:
keys = dict.keys()
if n in keys:
dict[n] += 1
else:
dict[n] = 1
print(dict)
我只想量化字母数字,但我无法弄清楚如何排除非字母字符。
答案 0 :(得分:1)
基本上涉及多个步骤:
您可以使用多种选项来执行这些操作。我只提出一个选项,但请记住,可能还有其他(和更好的)替代方案。
from collections import Counter
the_input = input('Enter something')
Counter(char for char in the_input.upper() if char.isalpha())
例如:
Enter something: aashkfze3f8237rhbjasdkvjuhb
Counter({'A': 3,
'B': 2,
'D': 1,
'E': 1,
'F': 2,
'H': 3,
'J': 2,
'K': 2,
'R': 1,
'S': 2,
'U': 1,
'V': 1,
'Z': 1})
所以它显然有效。在这里,我使用collections.Counter
来计算和使用str.isalpha
作为条件的生成器表达式来消除不需要的字符。
请注意,您的代码中存在一些不良习惯会使您的生活变得更加复杂:
dict = {}
会影响内置dict
。所以最好选择一个不同的名字。string
是内置模块的名称,因此这里的名称可能更好(但不是str
,这也是内置名称。)stringUpper = string.upper()
。在Python中,你通常不使用camelCase,而是使用_
分隔单词(即string_upper
),但由于你只使用它来循环,你也可以直接使用for n in string.upper():
。n
等变量名称不是很有帮助。通常,在迭代字符串时可以将它们命名为char
或character
,或者在迭代“常规”迭代时为item
命名。答案 1 :(得分:0)
在迭代时,检查lower()
和upper()
对于一个字符是否相同。如果它们彼此不同,则为字母。
if n.upper() == n.lower():
continue
这应该做到。