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

Julia中匹配用户输入字符串返回对应条件输出的最佳方法

Julia 多单位BMI计算器实现方案

你现有代码存在几个可优化点:

  1. 函数preference直接调用全局变量preferred_units,不符合Julia变量作用域最佳实践
  2. 拼写错误:读取输入的函数是readline不是deadline
  3. 嵌套if可以简化为elseif,不需要两层嵌套
  4. 分开定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:54:02