2011-07-21 121 views
2
n=int(raw_input('enter the number of mcnuggets you want to buy : ')) #total number of    mcnuggets you want yo buy 
    for a in range(1,n) and b in range(1,n) and c in range(1,n) : 
     if (6*a+9*b+20*c==n): 
      print 'number of packs of 6 are ',a 
      print 'number of packs of 9 are ',b 
      print 'number of packs of 20 are',c 

我是编程新手,我正在学习python.the上面的代码给出错误。任何建议。有没有办法在for循环中添加多个条件?

+0

错误在于它给出变量b未定义。 – Danny

+0

你究竟想要做什么? – Jacob

+0

“上面的代码给出了错误”?真?什么错误?请**更新**问题以包含代码中的错误。请不要评论你自己的问题。请更新它。 –

回答

4

你应该使用嵌套循环:

for a in range(1, n): 
    for b in range(1, n): 
     for c in range(1, n): 
      if ... 

甚至更​​好:

import itertools 

for a, b, c in itertools.product(range(1, n + 1), repeat=3): 
    if ... 
+0

感谢,像一个魅力:)) – Danny

3

我想你应该从0开始的范围内,否则,你只会得到答案,其中包括至少一个每个尺寸。你也可以减少电脑的工作量,因为你知道永远不会超过n/6 6个需要的包。这可以是一个很大的节约 - 对于45个金块,你只需要测试144个案例,而不是97336

from itertools import product 
n=int(raw_input('enter the number of mcnuggets you want to buy : ')) #total number of mcnuggets you want to buy 
for a,b,c in product(range(n//6+1), range(n//9+1), range(n//20+1)) : 
    if (6*a+9*b+20*c==n): 
     print 'number of packs of 6 are ',a 
     print 'number of packs of 9 are ',b 
     print 'number of packs of 20 are',c 

itertools.product给出了3个范围中的cartesian product。例如

>>> from itertools import product 
>>> list(product(range(3),range(4),range(5))) 
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 0), (0, 2, 1), (0, 2, 2), (0, 2, 3), (0, 2, 4), (0, 3, 0), (0, 3, 1), (0, 3, 2), (0, 3, 3), (0, 3, 4), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 0, 4), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 0), (1, 3, 1), (1, 3, 2), (1, 3, 3), (1, 3, 4), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 0, 4), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 2, 0), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 0), (2, 3, 1), (2, 3, 2), (2, 3, 3), (2, 3, 4)] 
+0

@eryksun,好点 –

+1

-1:很好的答案。但是,不适合初学者与他们的功课挣扎。 –

+0

是的,实际上关于范围我想出来之前,你回答,并感谢itertools信息 - 它似乎是一个有前途的工具。 – Danny

1

如果你想在一个for循环从多个序列值,那么你可以使用zip,例如:

for (a,b,c) in zip(xrange(1,n), xrange(1,n), xrange(1,n)) : 
    .... 

当然是重复相同的范围内的浪费,但从你的帖子的标题来看,我猜想使用相同的范围只是例子。

相关问题