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

多条件if语句计算城市间距离结果错误,求排查解决方法

问题分析与解决方案

嘿,我一眼就看到你代码里的问题啦——条件判断的逻辑写法完全错误,这就是为啥输入A-C会得到100的根本原因!咱们一步步拆解:

核心错误点

  1. 错误的条件表达式
    你写的city_1=="A" or "B"其实等价于(city_1=="A") or "B",而字符串"B"在Python的布尔判断里会被视为True,所以这个条件永远成立!不管你输入什么城市,第一个if都会被触发,自然会得到错误的距离值。

    同理,city_1 or city_2 != "A" or "B" or "C"这种写法逻辑完全混乱,根本无法正确判断输入的城市是否合法。

  2. 代码结构隐患
    第二个if会独立于前面的elif执行,就算已经正确计算出distance,只要满足这个错误的条件,还是会打印错误提示;而且如果输入无效,distance变量根本没定义,后面打印会直接报错。

修正方案1:修复条件判断逻辑

先把所有条件表达式补全,同时优化输入处理(比如支持大小写、去除空格),调整代码结构避免变量未定义:

# 定义各城市间距离
AB = 100
AC = 150
CB = 80

# 处理用户输入:去除空格+转大写,兼容大小写输入
city_1 = input("Enter city 1 ").strip().upper()
city_2 = input("Enter city 2 ").strip().upper()

distance = None  # 初始化distance,避免未定义报错

# 先判断无效情况
if city_1 == city_2:
    print("You did not enter a viable match.")
elif city_1 not in {"A", "B", "C"} or city_2 not in {"A", "B", "C"}:
    print("You did not enter a viable match.")
# 再判断有效城市组合
elif (city_1 == "A" and city_2 == "B") or (city_1 == "B" and city_2 == "A"):
    distance = AB
elif (city_1 == "A" and city_2 == "C") or (city_1 == "C" and city_2 == "A"):
    distance = AC
elif (city_1 == "B" and city_2 == "C") or (city_1 == "C" and city_2 == "B"):
    distance = CB

# 只有有效情况才打印距离
if distance is not None:
    print(f"The distance between {city_1} and {city_2} is {distance} miles.")

修正方案2:用字典简化逻辑(更推荐)

如果城市数量变多,多条件if会越来越繁琐,用字典存储所有合法的城市对距离,查询起来更简洁高效:

# 用字典存储所有双向城市对的距离
distance_map = {
    ("A", "B"): 100,
    ("B", "A"): 100,
    ("A", "C"): 150,
    ("C", "A"): 150,
    ("B", "C"): 80,
    ("C", "B"): 80
}

city_1 = input("Enter city 1 ").strip().upper()
city_2 = input("Enter city 2 ").strip().upper()

# 判断输入是否合法
if city_1 == city_2 or city_1 not in {"A", "B", "C"} or city_2 not in {"A", "B", "C"}:
    print("You did not enter a viable match.")
else:
    # 直接从字典中获取距离
    distance = distance_map[(city_1, city_2)]
    print(f"The distance between {city_1} and {city_2} is {distance} miles.")

这两种方案都能解决你遇到的问题,第二种更易维护,以后加新城市只要往字典里加新键值对就行~

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

火山引擎 最新活动