最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【问答】python入门编程求解

Python crifan 4435浏览 0评论

问题:

python 入门编程求解-CSDN论坛

答:

错误:

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 input() 函数 | 菜鸟教程

你现在用的是Python 3

Python3 input() 函数 | 菜鸟教程

所以才出现:

Python 3中,对于input多此一举,额外加了个eval,其实不需要

关于文档:还是要参考官网才最准确:

input 内置函数 — Python 3.8.2 文档

【顺带:帮你优化代码逻辑】

你的代码:

  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入门编程求解

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

    92 queries in 0.203 seconds, using 22.10MB memory