Python开发餐次时间计算器报NoneType与float比较TypeError错误如何解决
报错原因及修复方案
你遇到的TypeError: '>=' not supported between instances of 'NoneType' and 'float'和x的类型转换时机无关,是代码里的逻辑错误导致eat()函数返回了None,用None和浮点数做比较触发了报错。
具体错误点
eat()函数的条件判断写法错误:x.endswith("am")返回的是布尔值True/False,你写的if x == x.endswith("am")相当于拿字符串和布尔值做相等判断,永远不会成立,两个分支都走不到,函数没有明确返回值就会默认返回None。- 12小时制转24小时制逻辑缺失:pm时段的时间需要在小时基础上加12,否则7pm转换后和7am数值相同,无法正确区分早晚时段。
- 主函数的时间范围判断逻辑写反:比如
0.0>=eat(time)<=1.0实际是判断时间既小于等于0又小于等于1,永远不会成立,午饭对应12-13点、晚饭对应18-19点才符合常规时段设定。 - 代码缩进不规范:你粘贴的代码里
time = input(...)行、eat()函数内的注释缩进都不符合Python语法要求,运行会先报缩进错误。
修复后可运行代码
def main(): time = input("What time is it? ") t = convert(time) if 7.0 <= t <= 8.0: print("Breakfast") elif 12.0 <= t <= 13.0: print("Lunch") elif 18.0 <= t <= 19.0: print("Dinner") def convert(x): # 处理am时段 if x.endswith("am"): x = x.replace("am", "").strip() hours, minutes = x.split(":") return float(hours) + float(minutes)/60 # 处理pm时段 elif x.endswith("pm"): x = x.replace("pm", "").strip() hours, minutes = x.split(":") hours = float(hours) # 12pm对应正午12点,不用加12 if hours != 12: hours += 12 return hours + float(minutes)/60 if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者user17391478
相关产品推荐
相关产品推荐

