【问题标题】:Why do i keep getting " ValueError: invalid literal for long() with base 10: '5-1'为什么我不断收到“ ValueError: invalid literal for long() with base 10: '5-1'
【发布时间】:2018-05-07 03:33:13
【问题描述】:

我认为该错误意味着它正在接收其他数据类型,尽管它期望另一种数据类型,但我可能是错的,因为我是 python 的初学者。有人知道如何解决这个问题吗?

#Program to calculate factorial of a long number

def multiply(multiplier,multiplicand):

    a = long(''.join(multiplier))
    b = long(''.join(multiplicand))
    a = a*b
    multiplier = list(str(a))
    b = b-1
    multiplicand = list(str(b))
    if(b == 1):
        return False,multiplier,multiplicand
    else:
        return True,multiplier,multiplicand


num = ""
f = True # A flag variable
while(f):                 #checks if the string consists of digits only
        num = raw_input("Enter number:")  
        f = False
        if num.isdigit() == False:
                print "oops,try again!"
                f = True
multiplier = list(num)
multiplicand = multiplier[:]
multiplicand.pop()
multiplicand.insert(len(multiplier),str(long(multiplier[-1])-1)) #mand now contains   multiplier -1 in list form 

f = True
while (f):
        f,multiplier,multiplicand = multiply(multiplier,multiplicand)
num = ''.join(multiplier)
print num  #print the ans as a string 

只要输入的值低于50,代码就可以正常运行,但在50之后就会显示错误:

Traceback (most recent call last):
File "test.py", line 31, in <module>
    f,multiplier,multiplicand = multiply(multiplier,multiplicand)
File "test.py", line 5, in multiply
    b = long(''.join(multiplicand))
ValueError: invalid literal for long() with base 10: '5-1'

“5-1”是什么意思?

【问题讨论】:

    标签: python-2.7 traceback valueerror


    【解决方案1】:

    您将多位数字视为列表,并重新实现减法。你想要mand = mplier - 1。由于mplier 是一个数字列表(不需要这个,答案末尾有更多信息)你假设mand 应该与mplier 相同,除了最后一个数字,应该是最后一个mplier 的位数减 1。

    这适用于不以 0 结尾的数字:['5', '3'] 将变为 ['5', '2'],但 ['5', '0'] 将变为 ['5', '-1'],而不是 ['4', '9']。当您尝试在b = long(''.join(mand)) 中重新组合您的号码时,您最终会得到b = long('4-1'),而'4-1' 不是一个号码,所以您会遇到异常。

    Python does not have a precision limit on integer numbers,因此您无需区别对待长数字。

    我已经重写了你的代码以防它有用:

    #Program to calculate factorial of a long number
    
    def factorial(n):
        result = 1
        for r in xrange(0, n):
            result = result * (r+1)
        return result
    
    num = 0
    
    while(True):                 #checks if the string consists of digits only
            num = raw_input("Enter number:")
            if not num.isdigit():
                    print "oops,try again!"
            else:
                num = int(num)
                break
    
    print factorial(num)
    

    另外,作为旁注,代码令人困惑,我花了一点时间才理解你在做什么。您可能会从 CodeReview 中受益,以学习最佳实践(有用的变量名称、摆脱无用的变量、正确的代码文档、最新技术......)。

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 1970-01-01
      • 2015-02-21
      • 2020-08-02
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2022-08-01
      • 1970-01-01
      相关资源
      最近更新 更多