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

Python中lower()方法使用后城市匹配返回False的问题排查

input().lower() 城市匹配失败问题解决

调用input().lower()获取城市名称后,输入小写城市名时调试显示匹配结果为False,无法得到正确的计算结果。原代码如下:

city = input().lower()
s = float(input("Volume sells: "))

result = 0
if city == "London":
    if 0 <= s <= 500:
        result = s * 0.05
    elif 500 < s <= 1000:
        result = s * 0.07
    elif 1000 < s <= 10000:
        result = s * 0.08
    elif s > 10000:
        result = s * 0.12

if city == "Kiev":
    if 0 <= s <= 500:
        result = s * 0.045
    elif 500 < s <= 1000:
        result = s * 0.075
    elif 1000 < s <= 10000:
        result = s * 0.1
    elif s > 10000:
        result = s * 0.13

elif city == "Sofia":
    if 0 <= s <= 500:
        result = s * 0.055
    elif 500 < s <= 1000:
        result = s * 0.08
    elif 1000 < s <= 10000:
        result = s * 0.12
    elif s > 10000:
        result = s * 0.145

else:
    result = 'Error'

if type(result) == str or s < 0:
    print(result)
else:
    print("{0:.2f}".format(result))

错误根源

  • 大小写不匹配:city变量已通过lower()转为全小写,但判断条件里使用的是首字母大写的字符串(如"London"),导致永远无法匹配,结果始终为初始值0或进入else分支返回Error。
  • 逻辑分支混乱:第二个城市判断用了独立的if而非elif,会导致即使第一个城市匹配成功,代码仍会执行第二个if判断,可能覆盖之前的计算结果;同时elif city == "Sofia"的逻辑归属错误,它实际属于第一个if的分支,而非第二个,造成逻辑混乱。

修正后的代码

city = input().lower()
try:
    s = float(input("Volume sells: "))
except ValueError:
    print('Error')
    exit()

result = 0
# 统一使用全小写判断字符串,并用elif形成连贯分支
if city == "london":
    if 0 <= s <= 500:
        result = s * 0.05
    elif 500 < s <= 1000:
        result = s * 0.07
    elif 1000 < s <= 10000:
        result = s * 0.08
    elif s > 10000:
        result = s * 0.12
elif city == "kiev":
    if 0 <= s <= 500:
        result = s * 0.045
    elif 500 < s <= 1000:
        result = s * 0.075
    elif 1000 < s <= 10000:
        result = s * 0.1
    elif s > 10000:
        result = s * 0.13
elif city == "sofia":
    if 0 <= s <= 500:
        result = s * 0.055
    elif 500 < s <= 1000:
        result = s * 0.08
    elif 1000 < s <= 10000:
        result = s * 0.12
    elif s > 10000:
        result = s * 0.145
else:
    result = 'Error'

if isinstance(result, str) or s < 0:
    print(result)
else:
    print("{0:.2f}".format(result))

修正说明

  1. 将所有城市判断字符串改为全小写,和city变量格式统一,确保匹配成功。
  2. 把第二个及之后的城市判断改为elif,形成连贯的分支逻辑,避免重复执行判断和结果覆盖。
  3. 增加输入异常捕获,防止输入非数字销售额导致程序报错。
  4. 用isinstance(result, str)替代type(result) == str,类型判断更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:47:26