Python 3.11.1中如何将变量保存到文本文件?斜边存储异常问题
问题描述
我是编程新手学生,正在做一个练习:从文本文件读取直角三角形的两条直角边长度,计算斜边后,将两条直角边和斜边值保存回原文本文件。目前已实现斜边计算模块,能读取文件并计算斜边,在Idle中正常显示结果,但保存时直角边能正常写入,斜边却被存为<bound method TriangleTxtLoad.add_hypotenuse of <__main__.TriangleTxtLoad object at 0x000002330DE4B590>>这样的内容,不知道哪里出错了。
斜边计算模块(my_module.py)
# Imports import math # Class class RightTriangle: def __init__(self, side_01, side_02): self.side_01 = side_01 self.side_02 = side_02 def __str__(self): triangle_values = f"side_01 = {self.side_01} side_02 = {self.side_02}" return triangle_values def calculate_hypotenuse(self): return float(math.sqrt(math.pow(self.side_01, 2) + math.pow(self.side_02, 2)))
读取并保存的主程序
# Imports from my_module import * # Class for Txt file class TriangleTxtLoad: def __init__(self): self.triangle_measurements = input("Enter the name of the text file with the triangle measurements: ") measurement_file = open(self.triangle_measurements, "r") self.side_01 = float(measurement_file.readline()) self.side_02 = float(measurement_file.readline()) measurement_file.close() def __str__(self): triangle_values = f''' side_01 = {self.side_01} side_02 = {self.side_02} ''' return triangle_values def add_hypotenuse(self): triangle = RightTriangle(self.side_01, self.side_02) hypotenuse = triangle.calculate_hypotenuse() print(f"The hypotenuse of the triangle with these side lengths is {hypotenuse}") def save_measurements(self): measurement_file = open(self.triangle_measurements, mode='w') measurement_file.write(str(self.side_01)) measurement_file.write("\n") measurement_file.write(str(self.side_02)) measurement_file.write("\n") measurement_file.write(str(self.add_hypotenuse)) measurement_file.write("\n") measurement_file.close() print() myTriangle = TriangleTxtLoad() print(f"Side 1 is {myTriangle.side_01}") print(f"Side 2 is {myTriangle.side_02}") myTriangle.add_hypotenuse() print(myTriangle) myTriangle.save_measurements()
问题原因与修复方案
问题原因
你在save_measurements方法里写的是str(self.add_hypotenuse),这里的add_hypotenuse是一个方法对象,而非计算出的斜边值,转成字符串后自然会输出方法的内存地址信息;同时当前add_hypotenuse方法仅负责打印斜边,没有返回实际计算值,无法直接用于保存。
修复步骤
- 修改
add_hypotenuse方法,让它返回计算好的斜边值:
def add_hypotenuse(self): triangle = RightTriangle(self.side_01, self.side_02) hypotenuse = triangle.calculate_hypotenuse() print(f"The hypotenuse of the triangle with these side lengths is {hypotenuse}") return hypotenuse # 添加返回值
- 在
save_measurements方法里,调用self.add_hypotenuse()(加括号执行方法)拿到斜边值再写入:
def save_measurements(self): measurement_file = open(self.triangle_measurements, mode='w') measurement_file.write(str(self.side_01)) measurement_file.write("\n") measurement_file.write(str(self.side_02)) measurement_file.write("\n") measurement_file.write(str(self.add_hypotenuse())) # 执行方法获取结果 measurement_file.write("\n") measurement_file.close()
可选优化(更合理的写法)
可以在初始化时就计算斜边并保存为实例属性,避免重复计算:
class TriangleTxtLoad: def __init__(self): self.triangle_measurements = input("Enter the name of the text file with the triangle measurements: ") measurement_file = open(self.triangle_measurements, "r") self.side_01 = float(measurement_file.readline()) self.side_02 = float(measurement_file.readline()) measurement_file.close() # 初始化时计算斜边并保存为属性 self.hypotenuse = RightTriangle(self.side_01, self.side_02).calculate_hypotenuse() def add_hypotenuse(self): print(f"The hypotenuse of the triangle with these side lengths is {self.hypotenuse}") return self.hypotenuse def save_measurements(self): measurement_file = open(self.triangle_measurements, mode='w') measurement_file.write(f"{self.side_01}\n") measurement_file.write(f"{self.side_02}\n") measurement_file.write(f"{self.hypotenuse}\n") measurement_file.close()
内容的提问来源于stack exchange,提问作者Cloud
相关产品推荐
相关产品推荐

