问题:

答:

错误: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]

请输入数值:

即可。