以某种表格形式打印列表

时间:2018-05-18 08:34:42

标签: python-3.x list

我已经阅读了类似问题的一些Stack答案。我只发现一个答案导致我想要的输出,这是用户arshajii在以下问题中的答案:

Print list in table format in python

他的回答是:

>>> l1 = ['a', 'b', 'c']
>>> l2 = ['1', '2', '3']
>>> l3 = ['x', 'y', 'z']
>>> for row in zip(l1, l2, l3):
...     print ' '.join(row)

a 1 x
b 2 y
c 3 z

以上是我想要的格式。我已经尝试过他的方法,但它对我的代码不起作用。我有一种感觉,因为提出这个问题的人正在讨论外部文件......有人可以帮助我将这些代码重写为非外部源格式吗?

最佳布局会导致输出类似于:

Letter a, Number 1, Letter x
Letter b, Number 2, Letter y
Letter c, Number 3, Letter z

字母和数字实际上是单词打印(打印“Letter”)。

以下是我目前的代码:

    for list in zip ([rounds], [numberOfHits], [score]):
    print("Round " + str(rounds) + ": " + str(numberOfHits) + " shots. " + str(score)) .join(list)

但我的输出是:

Round [1, 1]: [6, 4] shots. 5 under par.

而不是:

Round [1]: [6] shots. 3 under par.
Round [2]: [4] shots. 1 under par.

我一直得到AttributeError:'NoneType'对象没有属性'join'。有人知道为什么会这样吗?

提前谢谢!希望这一切都是可以理解的,但如果不让我知道的话。

(请不要给我任何需要外部程序的解决方案。我正在使用PyCharm,并希望在转向更高级的代码之前坚持使用这种类型的编码。)

2 个答案:

答案 0 :(得分:0)

我只是预先定义了这些变量,因为我不确定你的代码会包含什么:

import random

def calculate_score(par, hits):
    if par == hits:
        return "par"
    elif hits < par:
        return "{} under par".format(par - hits)
    else:
        return "{} over par".format(hits - par)

# score for each hole
numberOfHits = []
parForHole = []

for hole in range(18):
    # choose a random par
    par = random.randint(3,7)
    # choose a random number of hits that the user does
    user_score = random.randint(par - 2, par + 2)
    parForHole.append(par)
    numberOfHits.append(user_score)

for index, (hits, par) in enumerate(zip(numberOfHits, parForHole), 1):
    print("Round {round_number}: {hits} shots. {under_or_over}".format(
        round_number=index,
        hits=hits,
        under_or_over=calculate_score(par, hits)
    ))

为了解释这一点,enumerate为列表中的每个索引分配一个数字。因此,您可以在最后生成这些列表,而不是拥有rounds列表:

>>> list(enumerate([5,3,6,7], 1))
[(1, 5), (2, 3), (3, 6), (4, 7)]

.format是一种在python中创建字符串的更好方法。您可以创建&#34;替换字段&#34;然后为它们分配值,如下所示:

>>> "Here is a {} string: {}".format("cool", "something")
'Here is a cool string: something'

或者你可以命名:

>>> "Here is a {adjective} string: {description}".format(adjective="cool", description="something")
'Here is a cool string: something'

看看输出结果如何:

Round 1: 3 shots. 2 under par
Round 2: 4 shots. par
Round 3: 6 shots. par
Round 4: 4 shots. 1 over par
Round 5: 5 shots. 1 under par
Round 6: 4 shots. par
Round 7: 3 shots. par
Round 8: 2 shots. 2 under par
Round 9: 6 shots. 2 over par
Round 10: 5 shots. par
Round 11: 6 shots. 1 over par
Round 12: 3 shots. par
Round 13: 3 shots. 2 under par
Round 14: 1 shots. 2 under par
Round 15: 6 shots. par
Round 16: 6 shots. 2 over par
Round 17: 2 shots. 1 under par
Round 18: 5 shots. 1 under par

希望这能解释一切,如果有什么事情没有意义,请告诉我。

编辑:啊,我想我误认为Round with Hole。我的不好,高尔夫不是我的强项。

答案 1 :(得分:0)

l1 = ["a","b","c"]
l2 = ["1","2","c"]
l3 = ["x","y","z"]
for x in range(0,3):
    print("Letter",l1[x],"Number",l2[x],"Letter",l3[x])

将以以下格式打印:

Letter a Number 1 Letter x
Letter b Number 2 Letter y
Letter c Number 3 Letter z