多条件if语句计算城市间距离结果错误,求排查解决方法
问题分析与解决方案
嘿,我一眼就看到你代码里的问题啦——条件判断的逻辑写法完全错误,这就是为啥输入A-C会得到100的根本原因!咱们一步步拆解:
核心错误点
错误的条件表达式
你写的city_1=="A" or "B"其实等价于(city_1=="A") or "B",而字符串"B"在Python的布尔判断里会被视为True,所以这个条件永远成立!不管你输入什么城市,第一个if都会被触发,自然会得到错误的距离值。同理,
city_1 or city_2 != "A" or "B" or "C"这种写法逻辑完全混乱,根本无法正确判断输入的城市是否合法。代码结构隐患
第二个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




