将类似打印语句的信息附加到列表

时间:2017-10-09 12:15:39

标签: python list append

我在蟒蛇丛中制作了一种历史生成程序,深受Dwarf Fortress的启发。在程序中,我想要一个事件列表,在该列表中是较小的列表,例如' death_events'和' war_events'等

我遇到的问题是,我希望能够通过这些列表查看世界上的事件,而且我不知道将这种信息保存到列表中的方法。 e.g:

events = []
learning_events = []

print('The', i.race, i.name, 'has learned about', i.knowledge, 'from the god of', god_teacher.sphere + ',', god_teacher.name)

learning_events.append('In the year', world_age, 'the', i.race, i.name, 'learned about', i.knowledge, 'from the god', god_teacher.name, 'a god of', god_teacher.sphere)
events[0] = learning_events

我以为我会以某种方式将其保存到列表中,但我得到了:

TypeError: append() takes exactly one argument (11 given)

我不确定是否使用变量将此信息放入列表中,因此" event"可能会发生多次,每次都有不同的信息。

2 个答案:

答案 0 :(得分:1)

有多种方法可以将不同的str组合成一个,如您所愿。默认情况下,print()将其所有参数组合为str,但大多数函数不是这种情况。

加入str的最pythonic方式是str.format()

"This is my sentence with {} placeholders that I can replace by whatever I like".format("bracket")

基本上它用第一个参数替换{}。您可以使用变量名称:

"This is {first} sentence with {second} placeholders".format(first="another", second="bracket")

或者您可以更改顺序:

"This is {1} sentence with {0} placeholders".format("bracket", "another")

还有多个格式化选项,例如选择浮点数的小数位数等等。

在您的情况下,您可以使用:

learning_events.append("In the year {} the {} {} learned about {} from the god {}, a god of {}.".format(world_age, i.race, i.name, i.knowledge, god_teacher.name, god_teacher.sphere))

答案 1 :(得分:1)

你必须使用dict,否则你将在事件列表中有多个学习列表。

编写字符串的最佳方法是在字符串上使用.format()

# do this once, so you don't overwrite previous events
events = {}
events['learning'] = []

learn_skill_utterance = "The {i.race} {i.name} has learned about {i.knowledge} from the god of {god_teacher.sphere}".format(i=dwarf, god_teacher=god)

# add string to list of events
events['learning'].insert(0, learn_skill_utterance)

这样一个对象就会填充字符串中的参数。这可以让你更快地写出这些话语。

这是一个小OOP示例:

In [1]: class Dwarf:
   ...:     def __init__(self, name, size):
   ...:         self.name = name
   ...:         self.size = size
   ...:

In [2]: happy = Dwarf('Happy', 8)

In [3]: happy.size
Out[3]: 8

In [4]: "{dwarf.name} is size: {dwarf.size}".format(dwarf=happy)
Out[4]: 'Happy is size: 8'

我不会将正在学习的knowledge作为矮人属性。

旁注:

如果您将字符串附加到包含{dwarf.name}的列表而不对其应用.format(),则可以在以后需要使用.format(dwarf=happy)时随时应用。{/ p>