.lower() 方法用于输入返回布尔值为 False?[复制]

.lower() method used whith input return boolean as False? [duplicate]

提问人:Guner Mehmed 提问时间:9/7/2023 最后编辑:Guner Mehmed 更新时间:9/7/2023 访问量:47

问:

我的 ptoblem 使用 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))
python if-statement 嵌套

评论

1赞 Alexander 9/7/2023
噢,你为什么要编辑保加利亚的城市?在这样的地方,很少会偶然遇到这样的人

答:

0赞 Sash Sinha 9/7/2023 #1

您在输入上调用 str.lower(),然后将其与大写的城市名称进行比较。更改条件以使用小写城市名称:

取代:

if city == "London":
...
if city == "Kiev":
...
elif city == "Sofia":

跟:

if city == "london":
...
if city == "kiev":
...
elif city == "sofia":

这应该可以解决您的直接问题。或者,您可以改用 str.casefold() 进行不区分大小写的字符串比较。

评论

0赞 Andj 9/9/2023
从技术上讲,不区分大小写的字符串比较,Unicode 规范所指的默认无写匹配要求两边都大小写折叠,即如果 X.casefold() == Y.casefold(),X 是 Y 的无大小写(不区分大小写)匹配。仅将输入折叠起来不会给出不区分大小写的比较