You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python单位转换程序中函数未触发调用的问题求助

Python单位转换程序中函数未触发调用的问题求助

嗨,别担心,刚学Python遇到这种小问题太正常啦😉,我来帮你拆解下问题所在:

第一个核心问题:条件判断的索引使用错误

你在第14行写的判断条件measurementLst[0][1]measurementLst[7][8]完全不是你想表达的意思:

  • measurementLst[0]是列表里的第一个元素"cm"[0][1]是取这个字符串的第二个字符,也就是"m",所以只有当storedStr2输入的是"m"时,这部分才会成立,而不是你想要的匹配厘米单位;
  • measurementLst[7]"mm",它的长度只有2,索引最大是1,[7][8]会直接触发索引越界错误,这部分逻辑根本跑不通。

你真正想要的是判断:用户输入的转换目标是厘米类单位("cm""centimetres"),且转换源是毫米类单位("mm""millimetres")。

第二个问题:函数代码块的缩进错误

Python是靠缩进区分代码块的,你定义的mmtocm函数里的两行代码没有缩进,这会导致函数没有实际执行体——就算调用了这个函数,也不会执行任何操作,甚至可能引发语法错误。

修正后的代码示例

我把你的代码调整了一下,修复了上述问题,还优化了单位匹配的逻辑:

measurementLst = ["cm", "centimetres", "inch", "inches", "metres", "m", "metre", "mm", "millimetres"]

# 整理单位分组,方便后续匹配
unit_groups = {
    "cm": ["cm", "centimetres"],
    "mm": ["mm", "millimetres"],
    "m": ["m", "metre", "metres"],
    "inch": ["inch", "inches"]
}

# Millimetres to Centimetres conversion subroutine
def mmtocm(value):
    conversionMMtoCM = value / 10
    print("CM: ", conversionMMtoCM)

# User decides conversion to use for the program
storedStr1 = input("Which measurement would you like to convert from: mm, cm, inch or m? ")
storedStr2 = input("Which measurement would you like to convert to: mm, cm, inch or m? ")

# 增加输入验证,避免非整数输入报错
try:
    storedVal = int(input("What is the value of your measurement? "))
except ValueError:
    print("请输入有效的数字!")
    exit()

# 修正后的条件判断
from_unit = storedStr1.casefold()
to_unit = storedStr2.casefold()

if from_unit in unit_groups["mm"] and to_unit in unit_groups["cm"]:
    mmtocm(storedVal)

额外小建议

  1. 把转换值作为参数传给函数,这样函数的复用性更强,不用依赖全局变量storedVal
  2. 增加输入验证,避免用户输入非数字导致程序崩溃;
  3. 后续可以给其他转换逻辑(比如cm转mm、inch转cm等)也加上对应的函数和判断条件,让程序更完整。

备注:内容来源于stack exchange,提问作者brandz

火山引擎 最新活动