一个程序,告诉我可以用我的笔有多少邮票

时间:2018-02-22 14:46:45

标签: python

def stamps(p):
    a = 0
    b = 0
    c = 0
    x = (a, b, c)
    while p >= 5:
        p = p - 5
        a = a + 1
    else:    
        return p
        while p >= 2:
            p = p - 2
            b = b + 1
        else:    
            return p
            while p >= 1:
                p = p - 1
                c = c + 1
            else:    
                return p
#return x 
print stamps(8)

我一直得到 3 的结果,而不是预期的 1 ,就好像代码只读取变量{{的第一次更新一样1}}在第一个while循环中。

最后的想法是在p变量中得到(1, 1, 1)的结果,这意味着在这种情况下我可以买一张5便士的邮票,一个2便士,一个1便士,总共8便士。

3 个答案:

答案 0 :(得分:1)

不要使用while循环,请使用数学基础解决方案:

def stamps(p):
    price_a = 5
    price_b = 2
    price_c = 1 

    a = p // price_a
    p = p % price_a

    b = p // price_b
    p = p % price_b

    c = p // price_c #notice I don't % after this since price_c = 1 and you will always fit 1 in 1. 

    return (a,b,c)
#return x 
print stamps(8) # return (1,1,1)

如果你在数学上考虑它,你想要做的是找到你可以适应最大邮票的价格的次数拿下余数并转到下一个邮票。所以使用//(我假设这是基于你的print语句的Python 2)进行分区,然后使用%来获取剩余的值。

答案 1 :(得分:0)

稍微修改过的版本,我希望这是理想的结果:

def stamps(p):
    a = 0
    b = 0
    c = 0
    while p >= 5:
        p = p - 5
        a = a + 1
    else:    

        while p >= 2:
            p = p - 2
            b = b + 1
        else:    

            while p >= 1:
                p = p - 1
                c = c + 1
    return (a,b,c)   # returning tuple of possible buying combinations

print stamps(8)

尝试更改x以进行测试。正如@DavidG所说,返回后,函数中的其他代码不会被执行。您必须在结束时返回,并且如果您想获得这些值,则需要返回a,b和c。通过在代码中返回p,您可以获得剩余的计算。

答案 2 :(得分:0)

正如@DavidG在a comment中所说,我无法在循环中使用// Drag & Drop the object holding the script to the `OnClick` listener of your button // Then, simply select the `Pickup` function public void Pickup() { // code .... } private void Update() { if( Input.GetKeyDown( KeyCode.F ) ) Pickup() ; } 语句,因为这会结束程序,因此我更改了return的:return,以便为下一个while循环更新变量p = p