Python区间IF语句编写及收车估价程序菜单终止问题求解
收车商人模拟Python作业问题解答
一、最初版本估价逻辑问题
你的IF语句实现思路本身是正确的,但是现有代码存在3处核心错误导致无法正常运行:
- 区间变量定义错误:你写的
year_question_intervall_type_1 = 1900-1930实际是执行了减法运算,最终变量值为-30,完全不是你要的「1900到1930年区间」的判断逻辑,正确的区间判断要直接在IF条件里写范围。 - 输入类型未转换:
input()函数返回的所有内容都是字符串类型,你直接拿字符串格式的年份q3和数字比较,判断永远不成立,需要先转成int类型再做比较。 - 逻辑覆盖不全:现有代码只判断了第一台车的第一个年份区间,另外两台车的判断、其余年份区间、里程数的权重逻辑都没有补充,完全达不到评分要求。
如果要凑够函数和变量数量拿高分,你可以单独封装一个估价函数,每台车辆的信息采集也可以封装成函数,参考实现逻辑如下:
# 封装估价函数 def calculate_car_price(year, miles, level): # 等级权重,等级越高权重越大,可自行扩展变量 level_weight = { 'A级':0.8, 'B级':1.0, 'C级':1.2, 'D级':1.5 } base_price = 0 # 年份区间判断 year = int(year) if 1900 <= year <= 1930: base_price += 8000 elif 1931 <= year <= 1950: base_price += 6000 elif 1951 <= year <= 1980: base_price += 4000 elif 1981 <= year <= 2000: base_price += 2000 elif 2001 <= year <= 2021: base_price += 1000 # 里程区间判断 miles = int(miles) if 100 <= miles <= 1000: base_price *= 1.5 elif 1001 <= miles <= 2000: base_price *= 1.3 elif 2001 <= miles <= 5000: base_price *= 1.1 elif 5001 <= miles <= 8000: base_price *= 0.9 elif 8001 <= miles <= 100000: base_price *= 0.7 # 乘等级权重返回最终价格 return round(base_price * level_weight.get(level, 1.0), 2)
每台车采集完信息之后直接调用这个函数就能输出估价,还能增加函数、变量的数量符合评分规则。
二、更新版本选2不终止程序问题
你现在的代码逻辑里,选2之后只是break跳出了当前的while循环,后续的menu2定义、执行、输入逻辑完全没有加判断条件,不管你选1还是2都会顺序执行。有两种解决方法:
- 选2的时候直接终止程序,在
option_set_one == 2的分支里加exit()函数:
elif option_set_one == 2: exit()
- 把menu2以及后续所有选1才需要执行的代码,全部放到
if option_set_one == 1:的判断块里,只有选1的时候才会执行这部分代码:
if option_set_one == 1: print(cars) # 后面的menu2定义、输入、判断逻辑全部缩进放到这个if块里 def menu_2(): print("1. the Porsche") print("2. the BMW") print("3. the Volvo") print("4. the Audi") menu_2() option_set_two = int(input("Which car would you like to exchange your " + question_1 + " with? ")) # 剩下的option_set_two判断逻辑也全部放进来
两种方法都可以解决你现在的问题,选第二种还能多一层判断逻辑,更符合你多写代码拿高分的需求。
内容的提问来源于stack exchange,提问作者user16275275
相关产品推荐
相关产品推荐

