2016-11-06 120 views
1

这是我的编码:int()函数的参数必须是字符串或数字,而不是“元组”

#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' 
+0

我重新格式化了您的代码以更好地适应此网站,但缩进似乎已关闭。请检查。 –

+0

什么是代码=数字,八(数字)应该做什么? –

+0

'code = number,eight(number)'现在'code'是元组包含2个值:'number'和'eight(number)'https://en.wikibooks.org/wiki/Python_Programming/Tuples –

回答

0

解决此问题的简单方法是将数字连接为一个字符串,然后对结果字符串执行int()。就像:

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

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

您在这里创建一个元组。数字,八(数字)是一个元组。它有2个值,它怎么能被转换成int

1

你行

code = number,eight(number) 

使得代码为二进制元组,(number, eight(number))。 Python增加了圆括号并构成一个元组,因为它经常在幕后进行,以允许更漂亮的代码。你的下一行然后试图采取这个,这是不被允许的int()

我不知道你想eight(number)什么,但为什么你试图采取int()这里,因为这两个numbereight(number)似乎已经整数目前尚不清楚。你想用这条线做什么?

+0

我试图获得7位数已输入的单个号码,包括从功能八(总数)创建的号码。因此,我可以创建一个八位数的数字,例如除以十 – Ella05

1

我认为其他答案是有道理的,但正如Rory Daulton指出的那样,您似乎已经在使用整数了。为了避免产生元组并保持整数,比如说 code = 10 * number + eight(number)

然后直接打印。

相关问题