Python读取Lab5_Data.txt完成指定计算输出的问题求助
解决方案
核心优化点
- 所有处理逻辑放在同一个文件遍历循环中执行:文件对象是迭代器,第一次遍历完指针就移动到文件末尾,你之前写的三个独立for循环只有第一个能读到数据,后两个无数据可处理
- 把5项计算需求拆为独立的小工具函数,每个函数只负责单一功能,主循环只处理行读取和结果输出,不会出现冗余庞大的循环代码
- 每行数据拆分后复用变量,保证同一条行数据的5项结果连续输出
完整可运行代码
import math # 工具函数:判断字符串是否包含元音字母 def has_vowel(input_str): vowels = {'a', 'e', 'i', 'o', 'u'} return any(c.lower() in vowels for c in input_str) # 工具函数:计算球体体积 def calc_sphere_volume(radius): return 4 / 3 * math.pi * (radius ** 3) # 工具函数:判断三个边长能否构成三角形 def can_form_triangle(a, b, c): return a + b > c and a + c > b and b + c > a # 工具函数:计算三个数的平均值 def calc_avg(a, b, c): return (a + b + c) / 3 # 主逻辑 if __name__ == '__main__': with open('Lab5_Data.txt', 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 拆分单行数据为字母部分和数字部分 parts = line.split() letter_seq = parts[0] nums = list(map(int, parts[1:])) radius, a, b, c = nums[0], nums[1], nums[2], nums[3] # 输出5项结果 print(f"The string in lowercase is {letter_seq.lower()}") if has_vowel(letter_seq): print(f"{letter_seq} contains vowels") else: print(f"{letter_seq} does not contain any vowels") volume = calc_sphere_volume(radius) print(f"The volume of the sphere with radius {radius} is {volume}") if can_form_triangle(a, b, c): print(f"{a}, {b}, {c} can make a triangle") else: print(f"{a}, {b}, {c} cannot make a triangle.") avg_val = calc_avg(a, b, c) print(f"The average of {parts[1]}, {parts[2]}, {parts[3]} is {avg_val}")
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

