<p>消除许多变量的最好方法是使用循环和列表。您可以简单地添加一个列表,而不是为每个玩家添加一个变量:</p>
<pre><code>#mob1 = Mob()
#mob2 = Mob()
mobs = [Mob(), Mob()]
</code></pre>
<p>因此,您还可以将每一个引用为列表,并在其中循环:</p>
<pre><code>mobs[1]
for mob in mobs:
print("The repr of my mob:", mob)
</code></pre>
<p>如果您碰巧已经编写了大部分代码,并且不想更改数百行(我们也都讨厌它:),那么可以使用带有<code>for</code>语句的<code>exec</code>循环。不推荐使用,但它可以工作,并且可以节省您重写大量代码的时间:</p>
<pre><code>for value in range(1, 5): #range returns a list of numbers. In this case 1-4
exec("""badChest%i = random.choice([mob%i, jail%i, trapped_chest%i, ("You creak open the chest to discover nothing but a pile of cobwebs")])""" % ((value,)*4))
</code></pre>
<p>这是一个有点大的新代码,所以让我们把它分解。首先,我使用了多行字符串(<code>"""</code>)。这些只是不同类型的报价。如果我使用了双引号,实际字符串中的双引号会将它们取消,从而引发很多错误:</p>
<pre><code>>>> "Hello world - "Joe""
SyntaxError: invalid syntax
</code></pre>
<p>接下来,我将python的字符串格式与<code>%</code>一起使用。它允许您在字符串中插入值。一些最常见的索引是<code>%s</code>,对于字符串,<code>%d</code>或<code>%i</code>对于整数,<code>%f</code>对于浮点值。在一个字符串中,将这些索引放在任意位置,然后在末尾用另一个<code>%</code>传递它们的值:</p>
<pre><code>>>> x = 5
>>> print( "Hello world, x is %i, and this is my string: %d" % (x, "strings") )
Hello world, x is 5, and this is my string: strings
</code></pre>
<p>接下来,我使用了列表乘法,使<code>(value,)</code>(逗号是元组)长四倍,因为字符串中有四个<code>%i</code>:</p>
<pre><code>>>> y = [1, 2, 3]
>>> y*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
</code></pre>
<p>而且<code>exec</code>只运行字符串,就好像它们是代码一样。总而言之,它通过1-4的<code>range</code>循环,对于循环的每个值,它运行此代码,但<code>%i</code>符号等于范围内的当前迭代:</p>
<pre><code>badChest%i = random.choice([mob%i, jail%i, trapped_chest%i, ("You creak open the chest to discover nothing but a pile of cobwebs")])
</code></pre>
<p>这正好等于:</p>
<pre><code>badChest1 = random.choice([mob1, jail1, trapped_chest1, ("You creak open the chest to discover nothing but a pile of cobwebs")])
badChest2 = random.choice([mob2, jail2, trapped_chest2, ("You creak open the chest to discover nothing but a pile of cobwebs")])
badChest3 = random.choice([mob3, jail3, trapped_chest3, ("You creak open the chest to discover nothing but a pile of cobwebs")])
badChest4 = random.choice([mob4, jail4, trapped_chest4, ("You creak open the chest to discover nothing but a pile of cobwebs")])
</code></pre>