我正在尝试使用python脚本来打印'@'符号,与列表中的值相关联。例如,如果列表为[1,2,3] - 脚本将打印:
1 @
2 @@
3 @@@
使用以下代码:
myList = [0,1,2,3,4,5,6]
x = 1
While x < range(len(myList)):
print (x, end ='')
for frequency in myList[x]:
print ('@')
print ('\n')
x = x + 1
到目前为止,我收到此错误“TypeError:unorderable types:int()&lt; range()”。我想我得到的是因为它不能将一个数字与一系列数字进行比较。
但是当我尝试使用时:
len(myList)
我得到:“TypeError:'int'对象不可迭代”。
不知道该怎么做!
答案 0 :(得分:1)
正如错误所述,这是将x
中的值与值range(...)
进行比较:
while x < range(len(myList)):
print (x, end ='')
这不是你想要的。相反,您希望循环遍历这些值:
for x in range(len(myList)):
...
同样,你的第二个循环不起作用:
for frequency in myList[x]:
print ('@')
由于myList[x]
是一个int,因此转换为“对于frequency
中的每个值myList[x]
......”这实际上没有意义。你的意思是:
for frequency in range(myList[x]):
print ('@')
答案 1 :(得分:0)
请将您的代码扔进垃圾箱并寻找更好的方法
你最好这样做:
for number in yourList:
if number <= 0:
print("Cannot use negative numbers or zero here!")
else:
print ("{} {}".format(number, "@" * number))
不要忘记,只需将此字符串乘以N
即可获得字符串的N
个副本,其中N
为正非零数字。
答案 2 :(得分:0)
您收到错误是因为您实际上正在比较此行上的int
与range
对象:
while x < range(len(myList)):
要获得所需的输出,只需乘以字符串会更容易:
for i in range(7):
print(i, i * '@')
如果要省略零行,请将呼叫调整为range
。
答案 3 :(得分:0)
您可以使用for
循环执行此操作:
>>> myList = [0,1,2,3,4,5,6]
>>> for item in myList:
... if item > 0:
... print(item, '@' * item)
...
1 @
2 @@
3 @@@
4 @@@@
5 @@@@@
6 @@@@@@
在python中,您可以使用'*'运算符多次打印字符串,就像一种乘法。
如果您想要在项目为零时输出零但没有'@',请删除if item > 0:
并删除其后面的行。