当我运行这段代码时,shell会输出错误'无法将'int'对象转换为str隐式'。
我在StackOverflow上尝试了其他修复,但是我无法在代码中修复此问题。
import math
while True:
try:
di = input('Input 7 digit number ')
total = (int(di[0])+int(di[2])+int(di[4])+int(di[6]))*3+(int(di[1])+int(di[3])+int(di[5]))
if len(str(di)) != 7:
print('Incorrect')
if len(str(di)) == 7:
print('Okay')
multiplier = [3,1]
times = ''
total = 0
for index, digit in enumerate(list(str(di))):
total = total + int(digit)*multiplier[index%2]
times = times+str(int(digit)*multiplier[index%2])+', '
mof10 = total + (10 - total%10)
checkdigit = mof10 - total
final = str(di) + str(checkdigit)
print(times[:-1])
print(total)
print(mof10)
print(checkdigit)
print(final)
final = (di[1]+di[3]+di[5])+((di[0]+di[2]+di[4]+di[6])*3)
final = (final+4)
Base10=(int(round(final, -1)))
Check = Base10-final
checkdigit = int(input('8th number in product code: '))
if (n8 == Check):
print('Valid product code')
except ValueError:
print('Invalid product code')
break
错误讯息:
追踪(最近一次呼叫最后一次):
文件“C:\ Documents and Settings \ User \ Desktop \ GTIN-8 product code.py”,第55行,in final =(final + 4)
TypeError:无法将'int'对象隐式转换为str
答案 0 :(得分:5)
您首先获得值d1
作为str
di = input('Input 7 digit number ')
然后通过
获得final
final = (di[1]+di[3]+di[5])+((di[0]+di[2]+di[4]+di[6])*3)
因此final
也是str
,所以你无法做到
final = (final+4)
因为final
是str
而4
是int
答案 1 :(得分:4)
您无法在Python中为字符串添加整数。您需要将它们转换为整数或字符串。
final = int(final) + 4 # convert final from string to integer and add 4
或
final = final + '4' # append the string '4' to the end of the string final.
更改上面的行将停止错误,但我认为您的代码的其他部分使用字符串,您应该使用整数。
例如,如果di=1234567
,则di[0]
,di[1]
等是字符串。
因此di[0]+di[2]+di[4]+d[6]
是字符串' 1357'而不是1+3+5+7=16
。当你执行di[0]+di[2]+di[4]+d[6]
* 3时,字符串重复三次' 135713571357'。
如果您在代码的开头创建一个整数列表,您可能会发现它最简单:
di = [int(x) for x in str(di)]
然后di[0]
,di[1]
等等将是整数。