我写了一个代码,它返回在输入字符串中多次出现的不同的不区分大小写的字母字符和数字的计数。这是我的代码:
def duplicate_count(text):
sum_low = 0
dic_low = []
sum_up = 0
dic_up = []
sum_num = 0
dic_num = []
total = 0
for i in text:
if i.isalpha():
if i.islower() and text.count(i) > 1 and i not in dic_low:
dic_low.append(i)
sum_low = sum_low + 1
elif i.isupper() and text.count(i) > 1 and i not in dic_up:
dic_up.append(i)
sum_up = sum_up + 1
elif i.isdigit() and text.count(i) > 1 and i not in dic_num:
dic_num.append(i)
sum_num = sum_num + 1
total = sum_low + sum_up + sum_num
print (total)
问题是,我注意到当我在“if i.isalpha()”之后错过括号时,这段代码与字母字符完美配合,但似乎忽略了数字,所以例如如果我通过“aabbcdeBBAA”就打印出“4” ,但如果参数是“11336”,则打印“0”。后来我发现括号已被遗漏并纠正,代码开始正常工作,但我仍然不明白问题是什么。没有任何TraceBack,所以我猜问题是缺少括号。为什么它会产生如此大的差异?
PS:对不起,如果代码太奇怪了,我是编程新手,刚开始学习编码。 谢谢!
答案 0 :(得分:7)
i.isalpha
是一个对象(字符串isalpha
的方法i
)。它不是Null
,也不对应于0
,""
,[]
等虚假值,因此如果检查其布尔值,则将其评估为True
。
只有添加()
,您实际上调用该方法。
一个实用的提示:有一个共同的初学者'错误的文件句柄:myfile.close
没有关闭文件myfile
,只有myfile.close()
。但是第一个语句在语法上是有效的,不会引发错误。您可能想知道为什么您刚写的文件是空的......
答案 1 :(得分:2)
如果您写i.isalpha
表示您指的是该函数,而不是实际调用该函数,则需要在调用函数的末尾添加()
>>> i = 'some text'
>>> obj = i.isalpha # just reference not actually call
>>> obj
<function str.isalpha>
>>> obj() # adding '()' executes the function
False
>>> i.isalpha()
False