我需要为学校制作一个计算礼物的程序。
程序应该如下所示:
程序询问有多少买家,每隔一个买家将获得一份免费礼物,因为 - 第一个买家将获得一份礼物,第二个什么也得不到,第三个将获得三个礼物,依此类推
例如,如果用户输入 8 个买家,则总和为 16,因为 1 + 3 + 5 + 7 = 16
下面的版本有效但是......
buyers = int(input("Input how many buyers: "))
i = 1
while i < buyers:
i = i * 4
print("Free gifts " + str(i))
如果用户输入 2 那么程序应该给出 1 但这个给出 2。 如果用户输入 3、7 或 8,则答案是正确的。 但是,如果用户输入例如 100,那么我期望答案是 2500,但程序给了我 256。
如果有人能帮我解决这个问题,我会很感激。
请您参考如下方法:
如果存在要求您使用 while 循环的约束,我假设您正在学习 python 入门类(class)并且还没有接触到列表推导式。虽然这远非 Pythonic 方法,但这可能在您所处类(class)的构造之内。
关键(除非您可以一次性完成)是您需要有一个单独的变量来独立于买家跟踪礼物。这也有助于确定免费礼物的分配方式,即购买者数量以下所有奇数的总和。
buyers = int(input("Input how many buyers: "))
gifts = 0
i = 0
while i < buyers:
if i % 2 == 1:
gifts += i
i += 1
print("Free gifts " + str(gifts))
如果你把它放在一个函数中,它会很容易快速测试。
def how_many_gifts(buyers):
gifts = 0
i = 0
while i < buyers:
if i % 2 == 1:
gifts += i
i += 1
return gifts
测试一系列输入。
outstr = "{} buyers = {} free gifts"
for i in range(11):
print(outstr.format(i, how_many_gifts(i)))
print(outstr.format(100, how_many_gifts(100)))
得到如下输出
0 buyers = 0 free gifts
1 buyers = 0 free gifts
2 buyers = 1 free gifts
3 buyers = 1 free gifts
4 buyers = 4 free gifts
5 buyers = 4 free gifts
6 buyers = 9 free gifts
7 buyers = 9 free gifts
8 buyers = 16 free gifts
9 buyers = 16 free gifts
10 buyers = 25 free gifts
100 buyers = 2500 free gifts
一种线性方法是
gifts = sum(range(1, buyers+1, 2))
这种简洁是使用 Python 工作的真正乐趣所在。
