我已经阅读了类似问题的一些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,并希望在转向更高级的代码之前坚持使用这种类型的编码。)
答案 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