Python代码问题:输入false时首付计算结果不符预期的原因?
房屋首付计算代码的问题分析与修复
原代码
housePrice = input("What's the price of House? ") is_goodCredit = input("Does buyer have good credit? ") if is_goodCredit: downPayment = 0.1 * float(housePrice) else: downPayment = 0.2 * float(housePrice) print(f"Down payment will be {downPayment}")
原运行结果
PS C:\Users\bandh> & C:/Users/bandh/AppData/Local/Programs/Python/Python311/python.exe c:/Users/bandh/Desktop/Untitled-1.py What's the price of House? 1000 Does buyer have good credit? true Down payment will be 100.0 PS C:\Users\bandh> & C:/Users/bandh/AppData/Local/Programs/Python/Python311/python.exe c:/Users/bandh/Desktop/Untitled-1.py What's the price of House? 1000 Does buyer have good credit? false Down payment will be 100.0
问题原因
核心问题出在输入值的类型判断逻辑:
- Python的
input()函数返回的永远是字符串类型,哪怕输入true或false,is_goodCredit存储的都是字符串,不是布尔值True/False。 - 在Python的布尔判断规则里,所有非空字符串都会被视为
True——哪怕字符串内容是"false",只要它不是空字符串,if is_goodCredit的条件就会成立,所以永远执行10%首付的计算分支。
修复方案
有两种实用的修复方式:
方式一:直接判断输入字符串内容
通过判断输入的字符串是否为指定值(支持忽略大小写,提升用户体验):
housePrice = input("What's the price of House? ") # 去除首尾空格并转小写,兼容不同输入格式 is_goodCredit = input("Does buyer have good credit? ").strip().lower() if is_goodCredit == "true": downPayment = 0.1 * float(housePrice) else: downPayment = 0.2 * float(housePrice) print(f"Down payment will be {downPayment}")
方式二:转换为布尔值判断
先将输入字符串转换为严格的布尔类型,再进行判断:
housePrice = input("What's the price of House? ") credit_input = input("Does buyer have good credit? ").strip().lower() # 只有输入"true"时才视为True,其他情况都为False is_goodCredit = credit_input == "true" if is_goodCredit: downPayment = 0.1 * float(housePrice) else: downPayment = 0.2 * float(housePrice) print(f"Down payment will be {downPayment}")
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

