def printsection1(animals, station1, station2):
animals=['a01', 'a02', 'a03', 'a04', 'a05']
station1={'a04': 5, 'a05': 1, 'a03': 62, 'a01': 21}
station2={'a04': 5, 'a02': 3, 'a03': 4, 'a01': 1}
print('Number of times each animal visited each station :')
print('Animal Id'+' '*11+'Station 1'+' '*11+'Station 2'+' ')
for name in animals:
if name in station1:
visit=str(station1.get(name))
else:
visit=0
if name in station2:
visit2=str(station2.get(name))
else:
visit2=0
下面:
space=(20-len(visit2))*' '
print(name+' '*17+str(visit)+space+str(visit2))
print('='*60)
输出:
Number of times each animal visited each station :
Animal Id Station 1 Station 2
a01 21 1
a02 0 3
a03 62 4
a04 5 5
a05 1 0
============================================================
大家好
我正在研究一个程序,这是它的一部分。我试图打印显示的内容。
我一直收到错误builtins.TypeError: object of type 'int' has no len()
除了a05
之外,它的所有内容都是如此
我试图保持colums正好20个字符长(即station1,station2和animal Id)。所以我在打印前放入了这个条件。
我理解我正在为str和int调用一个不受支持的操作数(上面显示的位置) 希望你们能帮忙。 谢谢:))
更新:
它打印:
不打印a05
Number of times each animal visited each station :
Animal Id Station 1 Station 2
a01 21 1
a02 0 3
a03 62 4
a04 5 5
builtins.TypeError: object of type 'int' has no len()
答案 0 :(得分:1)
问题在于space
和space2
定义:
space=20-len(visit)*' '
space2=20-len(visit2)*' '
首先它将长度与空格字符相乘,它在python中运行(字符串只是重复),但之后,它会尝试评估int 20
和字符串之间的减法,该字符串与TypeError
。
您需要将20-len(visit)
括在括号中:
space=(20 - len(visit)) * ' '
space2=(20 - len(visit2)) * ' '
演示:
>>> visit = 'test'
>>> space=20-len(visit)*' '
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'int' and 'str'
>>> space=(20-len(visit))*' '
>>> space
' '
此外,在space
变量用于:
print(name+' '*17+str(visit)+space+str(visit2))
此时space
属于int
类型 - 您需要将其强制转换为字符串:
print(name+' '*17+str(visit)+str(space)+str(visit2))