int()参数必须是字符串或数字,而不是'元组'

时间:2016-11-06 12:40:06

标签: python

这是我的编码:

#Getting them to import their code:
number = int(input("Enter 7 digit GTIN code to get eighth number : "))

#importing math for subtracting later:
import math

#Getting the numbers X3 & X1 and then adding them:
def eight(total):
    multiplier = [3, 1]
    total = 0
    for i, digit in enumerate(str(number)):
        total = total + int(digit)*multiplier[i%2]

#Subtracting the total to get the last number:
        nearest_10 = int(math.ceil(total / 10.0)) * 10
        return nearest_10 - total


code = number,eight(number)
code = int(code)
print(code)

#printing their full number:



#Checking the validity of the eight digit GTIN-8 code:

def validity(valid):
    multiplier = [3, 1]
    valid = 0
    string = ""
    for i, digit in enumerate(list(str(code))):
         valid = valid + str(digit)*multiplier[i%2]
         string = string+str(str(digit)*multiplier[i%2])+", "

    if code % 10 == 0:
        print"Valid"
    else:
        print"Not valid"

然而,当我试图将我的代码转换为整数以便以后,因为它需要一个整数来表示答案,它说:

code = int(code)
TypeError: int() 
argument must be a string or a number, not 'tuple'

4 个答案:

答案 0 :(得分:1)

你的行

code = number,eight(number)

使代码成为二进制元组(number, eight(number))。 Python添加括号并创建一个元组,因为它通常在幕后进行以允许更漂亮的代码。然后你的下一行尝试使用int(),这是不允许的。

我无法通过eight(number)了解您的需求,但由于int()和{{1} number eight(number),因此不清楚为什么要尝试 Offset Info Type Sym. Value Sym. Name + Addend 00000000001f 000200000002 R_X86_64_PC32 0000000000000000 _R_Print - 4 似乎已经是整数了。你想用这条线做什么?

答案 1 :(得分:1)

我认为其他答案是有道理的,但正如Rory Daulton指出的那样,你似乎已经在使用整数。比方说,为了避免制作元组并保持整数 代码= 10 *号+ 8(个)

然后直接打印。

答案 2 :(得分:0)

code = number,eight(number) code = int(code)

你在这里创建一个元组。数字,八(数字)是一个元组。它有2个值,如何转换为int

答案 3 :(得分:0)

解决这个问题的简单方法是将数字连接成一个字符串,并在结果字符串上执行int()。类似的东西:

code = '%s%s' % (number,eight(number))
code = int(code)
print(code)