Python 一个程序,告诉我用我的便士可以买多少张邮票

Python 一个程序,告诉我用我的便士可以买多少张邮票,python,Python,我不断得到3的结果,而不是预期的1,就好像代码只读取第一个while循环中变量p的first更新一样 最后一个想法是在x变量中得到(1,1,1)的结果,这意味着在这种情况下,我可以购买一枚5便士的邮票,一枚2便士的邮票和一枚1便士的邮票,总共是我拥有的8便士。稍微修改过的版本,我希望这是理想的结果: def stamps(p): a = 0 b = 0 c = 0 x = (a, b, c) while p >= 5: p = p -

我不断得到3的结果,而不是预期的1,就好像代码只读取第一个while循环中变量
p
first更新一样


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

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

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)

尝试更改x以测试它。正如@DavidG所说,返回后,函数中的其他代码不会执行。必须在末尾返回,如果要获取这些值,则需要返回a、b和c。通过返回代码中的
p
,您将得到剩余的计算结果。

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

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)

如果你从数学角度考虑,你要做的是找到你可以将p放入最大邮票价格的次数,取剩余部分,然后转到下一个邮票。因此,使用
/
进行楼层划分(根据打印语句,我假设这是Python2),然后使用
%
获得剩余的值

正如@DavidG在中所说,我不能在循环中使用
return
语句,因为这将结束过程,所以我更改了
return
的:
p=p
以保持变量
p
在下一个while循环中更新。

FYI当执行
return
语句时,函数中跟随它的代码将不会…嗯,这是有意义的,我想用print更改return语句。。但我准确地说,我不希望这些被压印,只有x变量。所以,为了使这项工作,我只能删除报税表的?或者有机会使用另一个语句?您不能直接删除所有
return
s。函数如何知道返回什么值?您可以快速解释逻辑,而不只是使用代码。顺便说一句,您的
x=(a,b,c)
此处未使用,您可能希望建议您选择原因并删除它。它也不能满足OP的要求(我假设它是一个基于指针的变量。我在阅读他的代码时完全跳过了这一行。是的,不需要创建新变量来返回某些内容,而您可以直接返回它。这就是“返回(a,b,c)”的意义所在`谢谢@moonigrawri我相信用数学方法解决这个问题会好得多,但我找到了一种更容易用逻辑方式思考的方法。我会更多地研究你的代码示例,并尝试正确理解。谢谢!!只需查找
楼层划分
模块化
,事情就应该清楚了。那么,欢迎来到堆栈溢出!作为一个新的例子用户您可能希望有一段时间阅读介绍性文章,因为它让您熟悉堆栈溢出的基本知识。其中一条规则是:这不是一个论坛,因此您不能“跟进”并告诉所有人哪些内容有效–我们可以看到,因为绿色复选标记。但您也可以添加自己的答案;请确保编写它是一个整体,而不是你在评论别人的帖子。
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)