第8行:ValueError:基数为10的int()的无效文字:''

时间:2015-11-02 14:30:07

标签: python error-handling

我是初学程序员。我想写一个程序,它给出了输入数字中4个相邻数字的所有产品的最大乘积。 所以,如果输入是“12345678” 可能的选择是1234,2345,3456,4567,5678,最大的产品是5 * 6 * 7 * 8。

我的代码:

number = str(input("Enter a number:"))
i = 0
L = []
while (i!=len(number)-3):
    a = int(number[i])
    b = int(number[i+1])
    c = int(number[i+2])
    d = int(number[i+3])
    product = a*b*c*d
    L.append(product)
    i = i+1
print(L)
print(number)
print(max(L))

我需要将其应用于1000个数字。我的代码适用于8位数的输入数字,并给出了500位数字的答案。

但是我尝试了600个数字并且它抛出了这个错误。

我理解ValueError是一个错误,它出现在给函数调用的参数类型正确但值不合适时。还有一些例子,当用户在代码中输入字符串“Alexander”作为输入时:int(输入(“输入数字”))

错误是''一个无法转换为整数的空字符串。但我无法理解空字符串的形成位置/原因。

我已经阅读了这个错误类型的一些其他答案,但所有涉及使用Python的功能的代码我都不熟悉,因此无法理解。我只是个初学者!所以,请帮忙!

对于违反任何有关问题形成的规则而道歉!

2 个答案:

答案 0 :(得分:1)

你在那里有一个空间,而不是一个空字符串。最有可能的是,您只需点击输入末尾的空格键,Python就无法将其转换为整数。您可以确保不在最后留出空格,或者对输入进行一些检查(例如,添加一行number = number.strip()以删除任何尾随空格。)

答案 1 :(得分:0)

将您的输入验证为数字,并删除任何空格:

number ='123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'

def foo(number):
    number = number.strip()
    if number.isdigit():
        i = 0
        L = []
        while (i in range(len(number)-3)):
            a = int(number[i])
            b = int(number[i+1])
            c = int(number[i+2])
            d = int(number[i+3])
            product = a*b*c*d
            L.append(product)
            i = i+1
        return max(L)

如果用户提供了无效输入(例如" Alexander"),此函数应返回None,这应避免您描述的错误:

  

还有一些用户何时提供字符串的示例" Alexander"作为代码中的输入例如:int(输入("输入数字"))

您还可以使用仅set唯一结果的生成器语句来简化此操作:

def foo2(number):
    number = number.strip()
    if number.isdigit():
        return max({int(number[i]) * int(number[i+1]) * int(number[i+2]) * int(number[i+3]) for i in range(len(number)-3)})