You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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方法仅负责打印斜边,没有返回实际计算值,无法直接用于保存。

修复步骤

  1. 修改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  # 添加返回值
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:33:23