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

勾股定理进阶计算器开发:特定条件下函数无法循环返回主菜单问题

解决勾股定理计算器主菜单循环返回问题

我来帮你搞定这个主菜单循环返回的问题!看起来你应该是在计算流程结束后,没有正确让程序回到主菜单的循环逻辑里,或者是函数调用的层级导致流程卡住了。下面我给你写一个完整的面向类与函数的进阶版本,完美支持主菜单循环、多类型计算,还能处理用户输入异常:

完整实现代码

import math

class PythagorasCalculator:
    @staticmethod
    def calculate_hypotenuse(a, b):
        """计算斜边c"""
        return math.sqrt(a**2 + b**2)
    
    @staticmethod
    def calculate_leg_a(b, c):
        """已知斜边c和直角边b,计算直角边a"""
        if c <= b:
            raise ValueError("斜边长度必须大于直角边长度!")
        return math.sqrt(c**2 - b**2)
    
    @staticmethod
    def calculate_leg_b(a, c):
        """已知斜边c和直角边a,计算直角边b"""
        if c <= a:
            raise ValueError("斜边长度必须大于直角边长度!")
        return math.sqrt(c**2 - a**2)

def get_valid_number(prompt):
    """获取用户输入的有效数字,处理输入异常"""
    while True:
        try:
            num = float(input(prompt))
            if num <= 0:
                print("请输入正数!")
                continue
            return num
        except ValueError:
            print("输入无效,请输入数字!")

def main_menu():
    """主菜单逻辑"""
    calculator = PythagorasCalculator()
    running = True
    
    while running:
        print("\n=== 勾股定理计算器 ===")
        print("1. 计算斜边c(已知a、b)")
        print("2. 计算直角边a(已知b、c)")
        print("3. 计算直角边b(已知a、c)")
        print("4. 退出程序")
        
        choice = input("请输入你的选择(1-4):")
        
        if choice == "1":
            print("\n--- 计算斜边c ---")
            a = get_valid_number("请输入直角边a的长度:")
            b = get_valid_number("请输入直角边b的长度:")
            c = calculator.calculate_hypotenuse(a, b)
            print(f"斜边c的长度为:{c:.2f}")
            input("按回车键返回主菜单...")
        elif choice == "2":
            print("\n--- 计算直角边a ---")
            b = get_valid_number("请输入直角边b的长度:")
            c = get_valid_number("请输入斜边c的长度:")
            try:
                a = calculator.calculate_leg_a(b, c)
                print(f"直角边a的长度为:{a:.2f}")
            except ValueError as e:
                print(e)
            input("按回车键返回主菜单...")
        elif choice == "3":
            print("\n--- 计算直角边b ---")
            a = get_valid_number("请输入直角边a的长度:")
            c = get_valid_number("请输入斜边c的长度:")
            try:
                b = calculator.calculate_leg_b(a, c)
                print(f"直角边b的长度为:{b:.2f}")
            except ValueError as e:
                print(e)
            input("按回车键返回主菜单...")
        elif choice == "4":
            print("感谢使用,再见!")
            running = False
        else:
            print("输入无效,请选择1-4之间的选项!")

if __name__ == "__main__":
    main_menu()

关键逻辑说明

  • 主菜单循环控制:用running布尔变量控制整个主菜单的循环,只有当用户选择退出(选项4)时,才将running设为False,结束循环。
  • 计算完成后的返回逻辑:每个计算选项执行完毕后,用input("按回车键返回主菜单...")让用户确认后,程序会回到while running循环的开头,重新显示主菜单,完美解决你遇到的返回问题。
  • 输入异常处理:单独封装get_valid_number函数,确保用户输入的是正数,避免程序因非数字输入崩溃。
  • 类的静态方法:把计算逻辑封装成类的静态方法,既符合面向对象的设计,又方便调用。

你可以直接运行这段代码,测试所有功能,不管完成哪种计算,都能顺利回到主菜单继续选择其他操作。

内容的提问来源于stack exchange,提问作者user9549820

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:38