为何将elif改为if结果不同?交互统计中Other始终为0的问题
问题分析与修复
你的代码里Other计数始终为0的核心原因是elif的逻辑判断写错了:
elif values[1] == "HBOND" or "WEAK_HBOND" or "POLAR" or "WEAK_POLAR":
在Python中,or会逐个判断表达式的布尔值。这里除了第一个values[1] == "HBOND"是有效判断,后面的"WEAK_HBOND"等非空字符串本身会被视为True。也就是说,不管values[1]实际是什么,这个elif条件永远成立,导致else分支完全不会被触发,Other自然一直是0。
修复后的代码
推荐用更简洁的in操作符来判断,避免重复写values[1] ==:
Hydrophilic = 0 Hydrophobic = 0 Other = 0 with open(filename) as f: lines = f.readlines() for line in lines: values = line.split(",") # 避免格式错误的行导致索引越界 if len(values) < 2: continue interaction = values[1].strip() # 去除可能的空格/换行符干扰 if interaction == "HYDROPHOBIC": Hydrophobic += 1 elif interaction in ("HBOND", "WEAK_HBOND", "POLAR", "WEAK_POLAR"): Hydrophilic += 1 else: Other += 1 sizes = {'Hydrophilic': Hydrophilic, 'Hydrophobic': Hydrophobic, 'Other': Other} print(sizes)
额外优化说明
- 加入
len(values) < 2的判断,防止文件中存在格式错误的行抛出IndexError - 用
.strip()处理values[1],避免数据中附带的空格、换行符干扰判断逻辑
修复后,所有不符合前两类的交互都会被正确统计到Other中,匹配你的预期输出。
内容的提问来源于stack exchange,提问作者amy-elouise
相关产品推荐
相关产品推荐

