Python中if/elif返回值展示异常:CSV转换结果全为4的问题排查
问题分析与修复
核心问题
seyrogus函数逻辑错误:
你写的seyrogus函数接收整个数字列表,一进入循环就处理列表第一个元素(CSV里的1),计算1*3+1=4后直接return,导致每次调用都返回4,完全没处理其他数字。这个函数应该用来处理单个数字,而非整个列表。displayData调用参数错误:
在displayData的循环里,你调用seyrogus(numbers)时传的是整个列表,而不是当前循环到的单个数字numbers[counter]。
修正后的代码
def getData(): numbers = [] # 用with语句自动关闭文件,更安全 with open("numbers.csv", "r") as file: for line in file: data = line.strip() numbers.append(int(data)) return numbers # 修改为接收单个数字作为参数 def seyrogus(num): if num % 2 != 0: return int(num * 3) + 1 elif num % 2 == 0: return int(num / 2) def displayData(numbers): print("Original Numbers\tConverted Numbers") # 直接遍历列表元素,更简洁 for num in numbers: print(f"{num}\t\t{seyrogus(num)}") def main(): numbers = getData() displayData(numbers) main()
额外优化点
- 用
with语句管理文件,避免手动关闭文件时的资源泄漏问题。 - 遍历列表时直接用
for num in numbers,比通过counter索引更直观简洁。 - getData函数中
line.strip()已处理空格和换行,无需重复调用data.strip()。
内容的提问来源于stack exchange,提问作者Mateo
相关产品推荐
相关产品推荐

