Python循环问题:为何print(lovescore)输出4而非预期的3?
代码输出4的原因
核心问题是你的预期和代码实际逻辑不匹配:代码会统计word1的每个字符在name1中出现的总次数,而非统计word1里有多少个字符在name1中存在。
先列name1 = "Ikechukwu"的所有字符,方便核对:
字符序列:I、k、e、c、h、u、k、w、u
可以看到字母k在name1里一共出现了2次,逐轮跑代码的计数变化如下:
- 处理word1的第一个字符
I:在name1中仅匹配1次,lovescore变为1 - 处理word1的第二个字符
k:在name1中匹配到2次,lovescore累加2后变为3 - 处理word1的第三个字符
e:在name1中仅匹配1次,lovescore累加1后变为4
最终print输出的lovescore就是4。
符合预期的修正方案
如果你想要的逻辑是「word1中的每个字符,只要在name1中出现过就计1分,不管重复出现多少次」,可以修改逻辑,避免对name1里的重复字符重复计数:
name1 = "Ikechukwu" word1 = "Ike" lovescore = 0 # 遍历word1的每个字符 for char in word1: # 仅当字符存在于name1时计1次分,不会重复统计name1里的重复字符 if char in name1: lovescore += 1 print(lovescore) # 输出3,符合预期
或者更简洁的写法,用生成器表达式统计符合条件的字符数:
name1 = "Ikechukwu" word1 = "Ike" lovescore = sum(1 for char in word1 if char in name1) print(lovescore)
注:如果word1本身有重复字符,上述写法会重复计数,可先对word1去重:sum(1 for char in set(word1) if char in name1)
内容的提问来源于stack exchange,提问作者Richfella
相关产品推荐
相关产品推荐

