Python2正常的if内输入程序在Python3报错,求助解决方法
问题分析与解决方案
嘿,这个坑我刚转Python3的时候也踩过!你的程序报错的核心原因其实是Python3和Python2里input()的行为差异,加上一些小的逻辑问题,咱们一步步捋清楚:
核心问题拆解
Python3的
input()永远返回字符串
你现在直接把用户输入的select_one(字符串类型)和整数1、2做相等比较,这永远不会匹配——输入1后会直接走到else分支输出Error;就算强行进入温度计算分支,用字符串和数字做乘法也会触发TypeError。温度输入未做类型转换
就算菜单选择没问题,input()拿到的温度值也是字符串,直接参与*(9.0/5.0)这种数值运算肯定会报错。华氏转摄氏的公式写错了
原代码里的c = f*(5.0/9.0)-32是错误的,正确的公式应该是先减32再乘系数,也就是(f - 32)*(5.0/9.0)。
修正后的可运行代码
#!/usr/bin/python3 try: select_one = int(input('Please enter a number from the menu below:\n1. Convert Celcius to Farenheit\n2. Convert Farenheit to Celcius\n> ')) if select_one == 1: c = float(input('Please enter the temperature\n> ')) f = c*(9.0/5.0)+32 print(f, 'F', sep='') elif select_one == 2: f = float(input('Please enter the temperature\n> ')) c = (f - 32)*(5.0/9.0) print(c, 'C', sep='') else: print('Error: Please enter 1 or 2') except ValueError: print('Error: Please enter a valid number')
关键修改说明
- 把菜单选择的输入用
int()转成整数,确保能和1、2正确比较 - 温度输入用
float()转成浮点型,支持整数和小数温度的计算 - 加了
try-except捕获用户输入非数字的情况,避免程序直接崩溃 - 修正了华氏转摄氏的公式错误
关于你的疑问
当然可以在if语句内接收用户输入!只要处理好输入的类型转换,完全没问题——上面的代码就是这么实现的。本质是Python3和Python2的input()行为不同:
- Python2里
input()会尝试把输入解析成Python表达式,输入数字会直接变成整数/浮点数 - Python3里
input()统一返回字符串,必须手动转换类型
内容的提问来源于stack exchange,提问作者elucid8
相关产品推荐
相关产品推荐

