0

0

如何实现面积计算器的循环运行(支持多次计算并优雅退出)

花韻仙語

花韻仙語

发布时间:2026-02-24 15:54:11

|

825人浏览过

|

来源于php中文网

原创

如何实现面积计算器的循环运行(支持多次计算并优雅退出)

本文介绍如何将单次运行的面积计算器改造成可重复使用的交互式程序,通过外层 while True 循环实现“回到开头”的功能,并在用户选择“退出”时终止程序,同时保持代码清晰、健壮和易维护。

本文介绍如何将单次运行的面积计算器改造成可重复使用的交互式程序,通过外层 `while true` 循环实现“回到开头”的功能,并在用户选择“退出”时终止程序,同时保持代码清晰、健壮和易维护。

要让面积计算器支持“计算一个图形后,自动返回主菜单继续计算另一个图形”,关键在于构建一个主控制循环——即在外层包裹一层无限循环(while True:),并将整个交互逻辑(显示菜单、输入验证、分支计算)置于其中;当用户选择“5) Quit”时,使用 break 语句跳出该循环,从而自然结束程序。

相比在每次计算后额外询问“是否继续”(如 input("Play again? (y/n): ")),直接将“退出选项”集成进主菜单更符合用户直觉,也避免了冗余提示和嵌套逻辑混乱的问题。

以下是重构后的完整可运行代码(已修复原代码中的拼写错误、逻辑漏洞与潜在异常):

Img.Upscaler
Img.Upscaler

免费的AI图片放大工具

下载
while True:
    print("================")
    print("Area Calculator")
    print("================")

    # 显示菜单
    print("1) Triangle")
    print("2) Rectangle")
    print("3) Square")
    print("4) Circle")
    print("5) Quit")

    # 获取并验证用户选择
    try:
        shape = int(input("Please type the number of the shape you would like to know the area of here: "))
        if shape < 1 or shape > 5:
            print("❌ Invalid choice. Please enter a number from 1 to 5.")
            continue  # 跳过后续计算,重新显示菜单
    except ValueError:
        print("❌ Invalid input. Please enter a valid number.")
        continue

    # 根据选择执行对应计算
    if shape == 1:  # Triangle
        try:
            base = float(input("Base: "))
            height = float(input("Height: "))
            area = base * height / 2
            print(f"✅ Triangle area = {area:.2f}")
        except ValueError:
            print("❌ Invalid dimensions for triangle.")

    elif shape == 2:  # Rectangle
        try:
            length = float(input("Length: "))
            width = float(input("Width: "))
            area = length * width
            print(f"✅ Rectangle area = {area:.2f}")
        except ValueError:
            print("❌ Invalid dimensions for rectangle.")

    elif shape == 3:  # Square
        try:
            side = float(input("Side: "))
            area = side ** 2
            print(f"✅ Square area = {area:.2f}")
        except ValueError:
            print("❌ Invalid dimension for square.")

    elif shape == 4:  # Circle
        try:
            radius = float(input("Radius: "))
            pi = 3.14159
            area = pi * radius ** 2
            print(f"✅ Circle area = {area:.2f}")
        except ValueError:
            print("❌ Invalid radius for circle.")

    elif shape == 5:  # Quit
        print("? Thank you for using Area Calculator. Goodbye!")
        break  # 退出主循环,程序结束

    print()  # 空行分隔,提升可读性

关键改进说明:

  • 使用 while True: 作为主循环,确保程序持续运行直至明确退出;
  • 将菜单显示、输入获取、验证与计算全部封装在循环体内,逻辑内聚;
  • 用 try/except 替代简单 int() 强转,防止非数字输入导致程序崩溃;
  • 对无效选项(如 0 或 6)即时反馈并 continue,避免进入未定义分支;
  • 所有数值输入统一使用 float(),支持小数输入,提升实用性;
  • 圆周率采用更高精度值 3.14159,并用格式化输出保留两位小数,增强结果可读性;
  • 每次操作后添加空行,并为成功计算添加 ✅ 图标与明确提示,优化用户体验。

⚠️ 注意事项:

  • 避免在循环内重复声明常量(如 pi)或初始化无关变量(如 base=0),除非有重置需求;当前版本已精简冗余赋值;
  • 若未来需扩展功能(如单位转换、历史记录),建议将各图形计算逻辑进一步拆分为独立函数(如 calc_triangle()),以提升可测试性与复用性;
  • 生产环境中应考虑添加输入超时、清屏、颜色提示等增强特性,但本教程聚焦核心循环结构,保持简洁性与教学性。

通过这一设计,用户只需一次运行程序,即可无限次选择图形、输入参数、获得结果,并在任意时刻键入 5 干净退出——真正实现了“循环回到开头”的交互目标。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

592

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

105

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1558

2023.10.24

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

103

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

260

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

260

2025.10.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

1

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号