
上QQ阅读APP看书,第一时间看更新
1.5.2 变量的作用
西西船长说:“我这里有4本星球日志,记录了我们航行中经过的星球情况,现在要分发给大熊、格兰特蕾妮和克里克里3位船员。每人每次只能发1本,请问一共有多少种不同的分发办法?”
大家立马开始考虑各自想法来解决西西船长的问题。西西船长说:“这个问题其实属于数学当中非常常见的排列组合问题,即求从4个数中取3个不同的数进行排列组合的结果。首先,将4本星球日志编号为1~4,给三位船员也编号为A、B、C。3个人每次从4本星球日志中任选1本,即每人都有4种选择,由于1本日志不可能同时发给一个以上的人,因此只要这3个人所选日志的编号不同,就是一次有效的分发方法。听起来挺复杂,不过大家别急,现阶段我只是请大家体会一下使用变量的好处,请看以下代码。”
#星球日志的分配 a,b,c,i=0,0,0,0 print("A,B,C三位船员所得书号分别为:\n") for a in range(1,5): # a,b,c的取值范围都是1,2,3,4 for b in range(1,5): for c in range(1,5): if(a!=b and a!=c and c!=b): print("大熊:%2d 格兰特蕾妮:%2d 克里克里:%2d "% (a,b,c)) i+=1 if(i%4==0): print("\n") print("%d本星球日志共有%d种分发方法\n" % (4,i))
在IDLE中新建一个文件,输入上面的代码,保存为star_books.py,然后选择菜单Run→Run Module运行程序,得到如图1-14所示的结果。
“看,Python很快就计算出4本星球日志一共有24种分发方法。”西西船长停顿了一下说,“不过,如果现在又有一本新的星球日志要分配,那么有多少种分发方法呢?如果有10本或更多的日志要分配呢?”
“那就要不断地修改程序中所有出现数字5的地方,把5改成6,或改成10,或改成更大的数……这也太麻烦了吧!”大熊嘀咕道。
“说得好!如果我们用一个变量来存放星球日志的数量,会怎样呢?”西西船长请大家看下面修改后的代码。
#星球日志的分配 N=6 #星球日志的数量 a,b,c,i=0,0,0,0 print("A,B,C三位船员所得书号分别为:\n") for a in range(1,N+1): for b in range(1,N+1): for c in range(1,N+1): if(a!=b and a!=c and c!=b): print("大熊:%2d 格兰特蕾妮:%2d 克里克里:%2d "% (a,b,c)) i+=1 if(i%4==0): print("\n") print("%d本星球日志共有%d种分发方法\n" % (N,i))
首先,在代码第2行创建了一个变量N,给它赋值6,用来代表星球日志的数量。再将原来代码中的数字5全部用变量N + 1来替换。再次运行程序,就会得出6本日志分配的结果,如图1-15所示。
如果有更多的星球日志需要分配,只需要修改N的赋值就可以了,其他代码完全不需要修改。你们也可以试一试!