回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我制作了一个赠品模块,现在我尝试创建一个函数,用两个类似的列表为所有获奖者返回一个祝贺字符串。你知道吗</p>
<pre><code>winners = ["john", "anna", "max", "george"]
prizes = [(1, "apple"), (1, "pear"), (2, "carrots")]
# (number of these prize avaible, the prize)
</code></pre>
<p>他们不需要和你看到的一样长,但是奖品中数字的总和总是和获奖者的长度一样。你知道吗</p>
<p>我理想的弦应该是这样的。你知道吗</p>
<pre><code>"Congratulations to john for winning 1 apple, anna for winning 1 pear, and max and george for winning 1 carrot each."
</code></pre>
<p>我知道我可能会扩展奖品列表并在以后压缩这两个奖品<strong>但是我确实在尝试将有多个获奖者的奖品分组在一起。</strong>因为这个列表最多可以有100个奖品和总和(奖品中x的x[0])。你知道吗</p>
<p>这是我迄今为止尝试过的,但当每个奖有两个以上的获奖者时,它并没有真正的用处,而且我真的不知道如何知道在最后一次迭代中用and替换a。你知道吗</p>
<pre><code>winners = ["john", "anna", "max", "george"]
prizes = [(2, "peanuts"), (2, "carrot")]
def congratulations(winners, prizes):
s = "Congratulations to "
for w in winners:
for p in prizes:
s += "{} for winning {} {}, ".format(w, p[0], p[1])
break
return s
print(congratulations(winners, prizes))
#Congratulations to john for winning 2 peanuts, anna for winning 2 peanuts, max for winning 2 peanuts, george for winning 2 peanuts,
</code></pre>
<p>不过,有些事情我并不在乎,比如奖品是用复数形式写的,或者你需要在最后加一个。谢谢你的帮助。你知道吗</p>
<p>多亏了亨利,我做了一些小的修正,但代码是一样的。你知道吗</p>
<pre><code>winners = ["john", "anna", "max", "george", "carlos"]
prizes = [(1, "apple"), (3, "pears"), (1, "carrots")]
def congratulations(winners, prizes):
s = "Congratulations to "
i = 0
for p in prizes:
w = ", ".join(winners[i : i + p[0]])
w = " and ".join(w.rsplit(", ", 1))
s += "{} for winning {} {}{}; ".format(w, 1, p[1], "" if p[0] == 1 else " each")
i += p[0]
s = s[:-2] + "."
k = s.rfind(";")
s = s[:k] + "; and" + s[k + 1 :]
return s
w = congratulations(winners, prizes)
print(w)
# Congratulations to john for winning 1 apple, anna, max and george for winning 1 pears each, and carlos for winning 1 carrots.
</code></pre>