问题:
答:
错误:
NameError: name 'd' is not defined
意思是:名字d,变量d 没有定义
即:你没有定义 没有赋值 就直接使用变量d了
问:为何会有个变量d呢?
答:因为你代码中用的是eval
你的代码
n = eval(input('请输入数值:'))
等价于:
inputStr = input('请输入数值:') n = eval(inputStr)
当你输入了 d 时,此时:
inputStr = 'd'
而
eval(inputStr)
就是:
eval('d')
就变成了:
去eval=evaluation=评估=运行 这个 变量 d
而此时,变量d没有定义(更没有赋值)
所以才报错的
问:如何避免这个问题呢?
答:应该把代码
n = eval(input('请输入数值:'))
改为:
n = input('请输入数值:')
即可。
问:为何会出现这类问题?
答:看来你是拷贝别处的代码
此处,找了下,大概推测出原因了:
你参考别人的代码是Python 2的
详见:
你现在用的是Python 3
所以才出现:
Python 3中,对于input多此一举,额外加了个eval,其实不需要
关于文档:还是要参考官网才最准确:
【顺带:帮你优化代码逻辑】
你的代码:
n = input('请输入数值:') <p> if str(n)=='':</p><p> break</p><p> if type(n)==type(2.1) or type(n)==type(2):</p><p> k=k+1</p>
的逻辑其实很隐晦,晦涩
可以改为代码逻辑清晰的写法
inputStr = input('请输入数值:') if not inputStr: # 输入的是空字符串 break
# inputStrType = type(inputStr) # <class ‘str’>
inputValue = eval(inputStr)
# 检测变量类型 推荐用 方式1:isinstance
isFloat = isinstance(inputValue, float) # 输入字符串类型是浮点类型
isInt = isinstance(inputValue, int) # 输入字符串类型是整数类型
# # 检测变量类型 方式2:type
# inputValueType = type(inputValue) # <class ‘int’>
# isFloat = inputValueType == float # 输入字符串类型是浮点类型
# isInt = inputValueType == int # 输入字符串类型是整数类型
if isFloat or isInt:
k=k+1
【后记】
后来才发现,上面答案是错误的
因为你的目的是:
找出input输入的字符串,是否是整型数字和浮点数字,否则就不处理
所以再去:
【已解决】Python中如何判断input输入的是整型或浮点数的数字
即可。
所以去把相关代码改为
# Function: demo for # python 入门编程求解-CSDN论坛 # https://bbs.csdn.net/topics/396432611 # Author: Crifan Li # Update: 20200419 # 把下面代码: # y=[] # k=0 # while 1: # n=eval(input('请输入数值:')) # if str(n)=='': # break # if type(n)==type(2.1) or type(n)==type(2): # k=k+1 # y.append(n) # else: # print('您输入的不是数字,请重新输入!') # continue # 改为: inputValueList = [] summary = 0 while True: inputStr = input('请输入数值:') if not inputStr: # 输入的是空字符串 # print("input is empty") break # print("inputStr=%s" % inputStr) # isDigit = inputStr.isdigit() # print("isDigit=%s" % isDigit) # isDecimal = inputStr.isdecimal() # print("isDecimal=%s" % isDecimal) # isNumeric = inputStr.isnumeric() # print("isNumeric=%s" % isNumeric) # isInt = False # isFloat = False # intValue = None try: # intValue = int(inputStr) curInputValue = int(inputStr) # isInt = True print("inputStr=%s -> curInputValue=%s" % (inputStr, curInputValue)) except ValueError as intErr: print("Convert %s to int error: %s" % (inputStr, intErr)) # 如果是int整数就没必要再去检测是否是浮点数了 if curInputValue is not None: # floatValue = None try: curInputValue = float(inputStr) isFloat = True print("inputStr=%s -> curInputValue=%s" % (inputStr, curInputValue)) except ValueError as floatErr: print("Convert %s to float error: %s" % (inputStr, floatErr)) # inputStrType = type(inputStr) # <class 'str'> # inputValue = eval(inputStr) # # 检测变量类型 推荐用 方式1:isinstance # isFloat = isinstance(inputValue, float) # 输入字符串类型是浮点类型 # isInt = isinstance(inputValue, int) # 输入字符串类型是整数类型 # # 检测变量类型 方式2:type # inputValueType = type(inputValue) # <class 'int'> # isFloat = inputValueType == float # 输入字符串类型是浮点类型 # isInt = inputValueType == int # 输入字符串类型是整数类型 # if isFloat or isInt: if curInputValue is not None: # print("输入的字符串是浮点数或整数") # if isInt: # summary += intValue # inputValueList.append(intValue) # elif isFloat: # summary += floatValue # inputValueList.append(floatValue) summary += curInputValue inputValueList.append(curInputValue) print("summary=%s, inputValueList=%s" % (summary, inputValueList)) else: print("您输入的不是数字,请重新输入!")
测试的输出:
请输入数值:1 inputStr=1 -> curInputValue=1 inputStr=1 -> curInputValue=1.0 summary=1.0, inputValueList=[1.0] 请输入数值:5 inputStr=5 -> curInputValue=5 inputStr=5 -> curInputValue=5.0 summary=6.0, inputValueList=[1.0, 5.0] 请输入数值:0 inputStr=0 -> curInputValue=0 inputStr=0 -> curInputValue=0.0 summary=6.0, inputValueList=[1.0, 5.0, 0.0] 请输入数值:3.14 Convert 3.14 to int error: invalid literal for int() with base 10: '3.14' inputStr=3.14 -> curInputValue=3.14 summary=9.14, inputValueList=[1.0, 5.0, 0.0, 3.14] 请输入数值:d Convert d to int error: invalid literal for int() with base 10: 'd' Convert d to float error: could not convert string to float: 'd' summary=12.280000000000001, inputValueList=[1.0, 5.0, 0.0, 3.14, 3.14] 请输入数值:
即可。
转载请注明:在路上 » 【问答】python入门编程求解