<p>我可能会使用生成器函数来创建支出:</p>
<pre><code>def pay(n,a,b,k):
p = a # start with a
c = 0
while c < n: # loop until enough values generated
# upcounting payments
while p <= b and c < n: # do this until enough or payment reached b
yield p
c += 1
if p != b:
p = min(b,p+k) # increase as long as not reached, prevent overshooting
else: # we reached and yielded b so we are done
break # we just yielded b - less payment from now on
p -= k # we already yielded b - so we add k again
# downcounting payments
while p >= a and c < n: # do this until enough or payment reached a again
yield p
c += 1
if p != a:
p = max(a,p-k) # decrease as long as not reached, prevent undershooting
else: # we just yielded a, were done going down, back up from now on
p = a+k
break # we just printed a, more pay from here on
pays = list(pay(15,2,9,2))
print(pays,sum(pays))
</code></pre>
<p>输出:</p>
<pre><code>[2, 4, 6, 8, 9, 7, 5, 3, 2, 4, 6, 8, 9, 7, 5] 85
</code></pre>