问题:
答:
错误: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('请输入数值:')
if str(n)=='':
break
if type(n)==type(2.1) or type(n)==type(2):
k=k+1
的逻辑其实很隐晦,晦涩
可以改为代码逻辑清晰的写法inputStr = input('请输入数值:')
if not inputStr:
# 输入的是空字符串
break
# inputStrType = type(inputStr) #
inputValue = eval(inputStr)
# 检测变量类型 推荐用 方式1:isinstance
isFloat = isinstance(inputValue, float) # 输入字符串类型是浮点类型
isInt = isinstance(inputValue, int) # 输入字符串类型是整数类型
# # 检测变量类型 方式2:type
# inputValueType = type(inputValue) #
# isFloat = inputValueType == float # 输入字符串类型是浮点类型
# isInt = inputValueType == int # 输入字符串类型是整数类型
if isFloat or isInt:
k=k+1
【后记】
后来才发现,上面答案是错误的
因为你的目的是:
找出input输入的字符串,是否是整型数字和浮点数字,否则就不处理
所以再去:
【已解决】Python中如何判断input输入的是整型或浮点数的数字
即可。
所以去把相关代码改为# Function: demo for
# python 入门编程求解-CSDN论坛
#
# 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) #
# inputValue = eval(inputStr)
# # 检测变量类型 推荐用 方式1:isinstance
# isFloat = isinstance(inputValue, float) # 输入字符串类型是浮点类型
# isInt = isinstance(inputValue, int) # 输入字符串类型是整数类型
# # 检测变量类型 方式2:type
# inputValueType = type(inputValue) #
# 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]
请输入数值:
即可。