Python
两种颜色小球问题
桶中有无数的黑球和无数的白球,每次取出一个,共取5次,列出所有可能的情况。
对于只取黑、白两种情况的小球,共取5次,每次取出的小球可能是黑也可能是白,共2种可能,取5次则共有2的5次幂共32种可能。由于每次取球只有两种情况,所以可以用二进制数中的0和1分别来表示黑和白,那么所有的可能情况可以用以下代码求出:
x=5
for i in range(0,pow(2,x)):
print("{0:b}".format(i).zfill(x).replace("0","黑").replace("1","白"))
三种颜色小球问题
如果将小球的颜色扩展到3种,球的颜色是红、黄、蓝三种颜色,同样每次取出一个,共取5次,列出所有可能的情况,那么上面的方法便不可行了。Python为我们提供了一个模块itertools,专门用来高效处理迭代问题,它便可以解决这种问题。
import itertools
result = itertools.product(['红', '黄', '蓝'], repeat=5)
for e in result:
print(e)
掷骰子(色子)问题
itertools可以扩展到列表中包含很多元素的情况。比如掷色子问题。
一个色子总共6个面,每个面上1一个数字,6个面上的数字分别为1、2、3、4、5、6,每次掷一枚色子,共掷5次,列出所有的情况。
import itertools
result = itertools.product(['1', '2', '3', '4', '5', '6'], repeat=5)
for e in result:
print(e)