Skip to main content
 首页 » 编程设计

python之自动礼物的循环问题

2025年05月04日14arxive

我需要为学校制作一个计算礼物的程序。

程序应该如下所示:

程序询问有多少买家,每隔一个买家将获得一份免费礼物,因为 - 第一个买家将获得一份礼物,第二个什么也得不到,第三个将获得三个礼物,依此类推

例如,如果用户输入 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 工作的真正乐趣所在。