2011-07-25 40 views
0

我需要能够在没有括号或逗号的情况下打印随机选择列表中的所有元素。我试图用'+'操作符打印每个元素,但它引发了一个关于不能将列表转换为字符串的错误。这里是我的代码现在:如何打印列表中的所有元素

t1 = ["rock", 80, 1,2,1] 
t2 = ["carpet", 75, 2, 2, 1] 
t3 = ["lava", 1000, 1, 1, 1] 
t4 = ["rock", 90, 2, 1, 1] 
Tiles = [t1, t2, t3, t4] 
print(random.choice(Tiles)[0] + [1] + [2] + [3] + [4]) 

回答

3

print函数可以将多个参数。你不想试图把所有东西都粘在一起,因为它们是不同的类型 - 只要让Python按顺序打印出来。

title = random.choice(Titles) 
print(title[0], title[1], title[2], title[3], title[4]) 

当然,这有点笨拙,并不真正反映意图。幸运的是,有一个捷径,让我们养活一个列表的所有项目作为参数传递给函数:

title = random.choice(Titles) 
print(*title) 

或者,因为我们并不真正需要这个名字更多的,只是:

print(*random.choice(Titles)) 
+1

老实说,我很惊讶和其他答案的复杂性感到困惑... –

+0

好吧,我想尝试做它一条线。你的方法也可以正常工作,这是迄今为止最简单的方法,所以我可能会改变我的程序来使用你的方法。谢谢。 – Zizma

2

这可能是更接近你想要什么,我想:

print ' '.join(map(unicode, random.choice(Tiles))) 
+0

这就提出了关于字符串和整数冲突的其他错误。 – Zizma

+0

@Zizma - 如果你想...你可以强制这些值...我会稍微修改一下答案。 –

+0

'''.join(str(x)for random.choice(Tiles))' –

0

您应该保存随机选择的结果在一个变量,然后遍历其成员和按顺序打印。

+0

这会工作,但你知道一种方法可以在一行中完成吗? – Zizma

+0

为什么要让它成为一条线? – Patrick87

+0

我想我不需要。谢谢。 – Zizma

0
>>> import random 
>>> t1 = ["rock", 80, 1,2,1] 
>>> t2 = ["carpet", 75, 2, 2, 1] 
>>> t3 = ["lava", 1000, 1, 1, 1] 
>>> t4 = ["rock", 90, 2, 1, 1] 
>>> Tiles = [t1, t2, t3, t4] 
>>> print(random.choice(Titles)[0]) 
"rock" 
+0

这完全不像我说的那样,我试图去做。 – Zizma

-1
print(repr(random.choice(Tiles))[1:-1].replace(',',' ')) 
+0

我真的很想理解我的答案中值得赞扬的东西。我的回答有什么问题? – eyquem

+0

Karl Knechtel的答案比我的好,因为它完全求助于print()是Python 3中的一个函数这一事实。即使我无法在Python 3中测试我没有安装,我也应该考虑这个解决方案。然而,我的答案并没有错,我认为,我发现它没有任何解释downvoting是相当奇怪 – eyquem

0

问题是你有一堆不同类型的元素,并想打印它们。你应该做的是制作一串你想要的数据并打印出来。

事情是这样的:

>>> import random 
>>> tiles = [ 
...  ["rock", 80, 1,2,1], 
...  ["carpet", 75, 2, 2, 1], 
...  ["lava", 1000, 1, 1, 1], 
...  ["rock", 90, 2, 1, 1], 
... ] 
>>> tile = random.choice(tiles) 
>>> print("The random tile is '{0}', with the values {1}, {2}, {3} and {4}".format(*tile)) 
The random tile is 'rock', with the values 80, 1, 2 and 1 

别的几乎是只适合调试。像:

>>> print(*tile) 
rock 80 1 2 1 
相关问题