Julia中匹配用户输入字符串返回对应条件输出的最佳方法
Julia 多单位BMI计算器实现方案
你现有代码存在几个可优化点:
- 函数
preference直接调用全局变量preferred_units,不符合Julia变量作用域最佳实践- 拼写错误:读取输入的函数是
readline不是deadline- 嵌套
if可以简化为elseif,不需要两层嵌套- 分开定义
weight_imperial和weight_metric两个变量没有必要,统一转换数值计算BMI逻辑更简洁
优化后的完整实现代码
# 通用数字输入读取工具,自带合法性校验 function read_numeric(prompt::String) while true println(prompt) input = readline(stdin) try return parse(Float64, input) catch println("输入不合法,请输入有效数字") end end end # 主程序逻辑 println("Welcome, what is your name?") user_name = readline(stdin) println("Hello $user_name, nice to meet you.") # 单位选择逻辑,自带输入校验 preferred_units = "" while true println("Please choose whether you would like to use metric or imperial units:") input_units = lowercase(readline(stdin)) if startswith(input_units, "metric") || startswith(input_units, "imperial") preferred_units = input_units break else println("输入不合法,请输入 metric 或 imperial") end end # 根据单位读取对应参数计算BMI bmi = 0.0 if startswith(preferred_units, "imperial") weight_lbs = read_numeric("Enter your weight in lbs:") height_in = read_numeric("Enter your height in inches:") bmi = weight_lbs * 703 / (height_in ^ 2) else weight_kg = read_numeric("Enter your weight in kg:") height_m = read_numeric("Enter your height in meters:") bmi = weight_kg / (height_m ^ 2) end println("Your BMI is: $(round(bmi, digits=2))")
核心优化说明
- 封装了通用的
read_numeric工具函数,避免重复写输入解析和异常处理逻辑 - 单位选择加了循环校验,用户输入不符合要求时会重复提示,不会直接报错终止
- 用
lowercase统一处理用户输入的大小写,不管用户输入的是Imperial还是METRIC都能正常识别,容错性更高 - 没有使用不必要的全局变量,所有值都在对应作用域内传递,符合Julia的最佳实践
- 你原本定义的
preference函数不需要单独拆分,这段逻辑非常短,直接写在主流程里可读性更高,单独拆分反而需要额外传递参数,没有必要
这种场景不需要使用特殊的第三方函数,Julia内置的字符串处理函数已经完全可以满足需求。如果后续需要扩展更多单位选项,可以用字典存储单位和对应的转换逻辑、提示文案,不需要新增更多if分支,扩展性更强。
内容的提问来源于stack exchange,提问作者Mariah_5288
相关产品推荐
相关产品推荐

