Python票务定价代码无法识别99以上年龄数值的问题
问题分析与修复方案
核心问题
你猜的没错,问题根源就是字符串与字符串的比较逻辑和整数完全不同。当你把age作为字符串和"60"比较时,Python会按字符的ASCII码逐个对比:
- 比如输入
"100",和"60"对比时,第一个字符'1'的ASCII码小于'6',所以"100" < "60"会返回True,但实际100远大于60。 - 男性分支里,当输入100时,
age >= "60"是False,age <= "60"也是False,两个条件都不满足,自然没输出。 - 女性分支还犯了逻辑错误:
if age >= "60"之后又写elif age > "60",这俩条件重复,第二个分支永远走不到。
修复后的代码
先把输入的age转换成整数,同时修正逻辑漏洞:
sex = input("What gender are you?: ").lower() # 转换年龄为整数,同时处理非数字输入的异常 try: age = int(input("What age are you?: ")) except ValueError: print("请输入有效的数字年龄") exit() price_of_ticket = 100 if sex == "male": print("Male ticket price is") if age >= 60: print(price_of_ticket * 0.7, "for senior citizen") else: print(price_of_ticket, "for normal citizen") elif sex == "female": print("Female ticket price is") if age >= 60: print(price_of_ticket * 0.5, "for senior citizen") else: print(price_of_ticket * 0.7, "for normal citizen") else: print("请输入有效的性别(male/female)")
关键修改说明
- 把
age从字符串转为整数:用int()转换后,就能正常按数值大小比较年龄,彻底解决超龄无输出的问题。 - 优化分支逻辑:男性分支把
elif age <= "60"改成else,覆盖所有年龄情况;女性分支删掉重复的elif,用else处理非老年女性的折扣。 - 增加异常处理:加入
try-except捕获非数字输入,避免程序直接崩溃;同时增加性别输入校验,防止无效输入导致无输出。
内容的提问来源于stack exchange,提问作者user19876326
相关产品推荐
相关产品推荐

