Python教程分享Python系列感性知识分支循环结构的应用。分支循环结构的重要性不言而喻,它是构建程序逻辑的基础,也是初学者比较难的部分。大多数初学者在学习了分支和循环结构后可以理解其用途和用法,但遇到实际问题时却无从下手;看懂别人的代码很容易,但是自己写出同样的代码却很难。难的。如果你也有同样的问题和困惑,不要沮丧,那只是因为你才刚刚开始你的编程之旅,你的练习量还没有达到可以让你随心所欲写代码的程度,只要你加强你的编程实践,这个问题迟早会解决的。下面我们就为大家讲解一些经典案例。 经典例子 求水仙花数 说明:水仙花数又叫超完备数不变数,自恋数,自力数,阿姆斯特朗数,是一个3位数,该数的每一位上的数的立方之和正好等于它本身,例如:.""" 求所有水仙花的个数 版本:0.1 作者:罗浩 """ fornuminrange(100,1000): low=num%10 mid=num//10%10 high=num//100 ifnum==low3+mid3+high**3: print(num) 在上面的代码中,我们通过整数除法和取模运算求出了三位数的个位、十位、百位。这种trick在实际开发中还是很常用的。用类似的方法,我们也可以将一个正整数取反,例如:将12345变成54321,代码如下。""" 正整数反转 版本:0.1 作者:罗浩 """ num=int(input('num=')) reversed_num=0 whilenum>0: reversed_num=reversed_num*10+num%10 num//=10 print(reversed_num) 100-钱-100-鸡问题 说明:一百钱一百只鸡是中国古代数学家张秋俭在本书《算经》中提出的一道数学题:一只鸡值五只,一只母鸡值三只,三只鸡值一只。一百块钱买一百只鸡,公鸡、母鸡、小鸡多少钱?翻译成现代话就是:公鸡5元,母鸡3元,小鸡1元3只。如果你花100元钱买100只鸡,公鸡、母鸡、小鸡各有几只?""" 《百钱百鸡》问题 版本:0.1 作者:罗浩 """ #假设公鸡的数量是x,x的取值范围是0到20 forxinrange(0,21): #假设母鸡的数量是y,y的取值范围是0到33 foryinrange(0,34): z=100-x-y if5x+3y+z//3==100andz%3==0: print(f'rooster:{x},hen:{y}only,chick:{z}only') 上面用到的方法称为穷举法,也称为穷举法,该方法将备选方案中所有可能的候选项一一枚举并校验每个候选是否符合问题的描述,最终得到问题的解。这种方法可能看起来很笨拙,但对于功能非常强大的计算机来说,只要存在问题就能找到解决方案,它通常是一个可行甚至是不错的选择。 CRAPS赌博游戏 说明:CRAPS,又称掷骰子,是美国拉斯维加斯非常流行的桌上赌博游戏。游戏使用两个骰子,玩家通过摇动两个骰子来进行游戏来获得分数。简化的规则是:如果玩家第一次掷骰子并获得7或11分,则玩家获胜;如果玩家第一次掷出2点、3点或12点,则庄家获胜;若闲家掷出其他点数,则闲家继续掷骰子,若闲家掷出7点,则庄家胜;如果玩家推出第一个点数,则玩家获胜;其他点数的玩家继续掷骰子,直到确定获胜者。 """ 花旗骰赌博游戏 我们设置玩家在游戏开始时下注1000元作者:罗浩 """ 来自随机importrandint money=1000 whilemoney>0: print(f'你的总资产为:{money}元') needs_go_on=False #下注金额必须大于0且小于或等于玩家的总资产#第一次掷骰 first_point=randint(1,6)+randint(1,6) print(f'playershakes{first_point}point') iffirst_point==7orfirst_point==11: print('Playerwins!') money+=debt eliffirst_point==2orfirst_point==3orfirst_point==12: print('庄家赢了!') money-=debt else: needs_go_on=True #第一次摇骰子没有告诉获胜者,游戏继续了 whileneeds_go_on: needs_go_on=False current_point=randint(1,6)+randint(1,6) print(f'theplayershakesthe{current_point}点') ifcurrent==7: print('庄家赢') money-=debt elifcurrent==first: print('玩家赢wins') money+=debt else: needs_go_on=True print('你破产了,游戏结束!') 斐波那契数列 说明:斐波那契数列(Fibonaccisequence),又称黄金分割数列,是意大利数学家列奥纳多·斐波那契(LeonardoFibonacci)在《计算之书》研究兔子在理想假设下的生长率问题引入的数列,所以这个序列常被称为“兔子序列”。斐波那契数列的特点是数列的前两个数为1,从第三个数开始,每个数都是前两个数之和。根据这个规则,斐波那契数列的前10个数字分别是:1、1、2、3、5、8、13、21、34、55。斐波那契数列在现代物理学中有直接的应用,准晶体结构、化学等领域。""" 输出斐波那契数列的前20个数 版本:0.1 作者:罗浩 """ #前两个数都是1 a,b=1,1 print(a,b,end='') #通过递归公式计算出以下18个数 for_inrange(18): a,b=b,a+b print(b,end='') 打印素数 注:素数是指只能被1和它本身整除的正整数(不包括1).""" 输出100以内的素数 版本:0.1 作者:罗浩 """ fornuminrange(2,100): #假设num是一个质数 is_prime=True #求num在2和num-1之间的因数 forfactorinrange(2,num): #如果找到num的因数,num不是素数 ifnum%factor==0: is_prime=False break #如果布尔值为True,则num是素数 ifis_prime: print(num) 小结 是同一句话:分支结构和循环结构很重要,它们是构造程序逻辑的基础,必须通过大量的实践才能掌握。刚才提到的CRAPS赌博游戏的例子可以作为一个标准。如果你能顺利完成这段代码,那么你就掌握了分支和循环结构的知识。
