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))
修正说明
- 将所有城市判断字符串改为全小写,和
city变量格式统一,确保匹配成功。 - 把第二个及之后的城市判断改为
elif,形成连贯的分支逻辑,避免重复执行判断和结果覆盖。 - 增加输入异常捕获,防止输入非数字销售额导致程序报错。
- 用
isinstance(result, str)替代type(result) == str,类型判断更严谨。
内容的提问来源于stack exchange,提问作者Guner Mehmed
相关产品推荐
相关产品推荐

