我用python编写了计算数字位数的代码,但它对某些数字无效

cidc1ykv  于 2022-12-10  发布在  Python
关注(0)|答案(4)|浏览(117)

为了计算一个数字的位数,我用python写了这段代码:

a=int(input('number: '))
count=0
while a!=0:
    a=a//10
    count=count+1

print('number has ',count,'digits')

它适用于13,1900,3222,....等输入,但对于以下数字,它给予错误:3^21, 2^3,3*4,...
上面写着:

ValueError: invalid literal for int() with base 10: '3**21'

3**21是整数输入,那么为什么它会出现这个错误,我应该如何修复这个错误?

7d7tgy0s

7d7tgy0s1#

int()构造函数接受int的字符串表示,而2**5不是,这是一个数学运算,你可以使用eval来计算它。我已经添加了一个额外的变量value来跟踪初始值并在结束时打印它

value = eval(input('number: '))
a = value
count = 0
while a!=0:
    a = a//10
    count += 1    
print(value, 'has', count, 'digits')
小心️
6yt4nkrj

6yt4nkrj2#

你可以试试

a=input('number: ') # entered 3**21
if a.isalnum():
    a = int(a)
else:
    exec("a = {}".format(a))
count=0
while a!=0:
    a=a//10
    count=count+1

print('number has ',count,'digits')

输出量

number has  11 digits

只有当a只包含数字时,此代码才会将a转换为int,否则它将执行python命令,将输入的过期时间存储为expiration而不是int。

q3qa4bjr

q3qa4bjr3#

'3^21''3**21'都不是整数,它们是Python表达式的 * 字符串 *,如果Python解释器对它们求值,它们将求值为整数。

>>> 3^21
22
>>> 3**21
10460353203

int内建程式只接受'100''22''10460353203'等字串。
int还有一个base参数,默认为2,允许您发出类似int('AA', 16)的命令,但它仍然不允许您传递您试图传递的字符串表达式。)

xqk2d5yq

xqk2d5yq4#

num_digits = len(str(eval(input('number: '))))
print('number has ',num_digits,'digits')

相关问题