python中的负数

n53p2ov0  于 2023-03-04  发布在  Python
关注(0)|答案(3)|浏览(192)

我想得到这个

rawstr = input('enter a number: ')
try:
    ival = abs(rawstr)
except:
    ival = 'boob'

if ival.isnumeric():
    print('nice work')
else:
    print('not a number')

识别负数,但我不明白为什么不管输入是什么,它总是返回“不是数字”
这本书最初的目的是学习try/except函数,但我希望它也能识别负数,而不是对任何小于0的值返回“不是数字

rawstr = input('enter a number: ')
try:
    ival = int(rawstr)
except:
    ival = -1

if ival > 0:
    print('nice work')
else:
    print('not a number')

^这是我想读取负数的原始代码

ax6ht2ek

ax6ht2ek1#

abs函数需要一个int,但在第一个代码块中传递给它的是一个string,在第二个代码块中,将string转换为int--这在第一个代码块中是缺失的。
所以把两者结合起来:

ival = abs(int(rawstr))

第二个问题是,isnumeric是字符串方法,而不是数字方法,所以不要像在第一个代码块中那样使用它,而要将ival >= 0作为if条件。
因此:

rawstr = input('enter a number: ')
try:
    ival = abs(int(rawstr))
except:
    ival = -1

if ival >= 0:
    print('nice work')
else:
    print('not a number')

缺点是abs实际上是一个非负数,并且失去了符号。
合并这两部分,然后执行以下操作:

rawstr = input('enter a number: ')
try:
    ival = int(rawstr)
    print('nice work')
except:
    print('not a number')
    # Here you can exit a loop, or a function,...
x9ybnkn6

x9ybnkn62#

Python的输入默认为字符串,我们需要在使用它们之前将它们转换为相关的数据类型。
在您的代码中:
ival = abs(rawstr)行,rawtr总是字符串,但abs()需要int类型。
在这一行你会得到一个异常,if ival.isnumeric()总是把ival当作boob,它不是一个数字,所以你得到的是not a number输出。
更新代码以修复此问题:

rawstr = input('enter a number: ')

try:
    ival = str(abs(int(rawstr)))
except:
    ival = 'boob'

if ival.isnumeric():
    print('nice work')
else:
    print('not a number')
qv7cva1a

qv7cva1a3#

可以将abs函数更改为int函数,以将输入字符串转换为整数

rawstr = input('enter a number: ')
try:
    ival = int(rawstr)
except:
    ival = 'boob'

if isinstance(ival, int) and ival >= 0:
    print('nice work')
else:
    print('not a number')

相关问题