在这一小节,我们将学习Python循环的使用以及利用之前学过的知识来解决一些实际问题
Python循环语句的使用
为什么需要
人是懒惰的,因为同样的事情我们不愿意去反反复复的做
人是聪明的,因为我们可以利用其中的规律,利用循环来解决反复的问题,解放生产力
for 循环
如果我们知道要在一个什么样子的容器中进行循环,那么我们可以使用for
循环
"""利用for循环进行输出Author: Cyberist"""container = [1,2,3,4,5,6]for i in container:print(i)
在这里container是一个列表(之后会讲),即一个特定的容器,我们知道这个容器的特定范围,采用for
循环
while循环
如果我们不知道具体要运行多少次,可以采用while
循环,当产生bool
值为False
或者满足某条件break
的时候,停止循环。下面我们利用while
循环以及之前学过的if
语句来做一个简单的猜数字游戏
"""Author: Cyberist"""import random # 导入随机库,可以产生随机数num = random.randint(0,9)input_num = int(input("Please input a word to guess the right number: "))while 1:if num== input_num:print("You are right! Want to have another try(y/n): ")answer = input()if answer in ["y", "Y"]:num = random.randint(0,9)input_num = int(input("Please input a word to guess the right number: "))else:print("Game over ! ")breakelse:print("The answer you input is not the right one, please try again(q to quit): ")an = input()if an in ["q", "Q"]:breakelse:input_num = int(an)
break continue
在while
循环和for
中可以使用continue和break两个条件跳转他们之间的差别是:
continue: 运行该处时,程序继续进行循环,但是不在进行下面的操作,跳到下一次循环
break: 程序运行到该处,循环不再继续
练习
1. 利用循环打印九九乘法表
"""Author: Cyberist"""for i in range(1,10):for j in range(1,i+1):print(i*j, end="\t")print("")
range() 函数可以产生从 [a, b] 的序列,但是不包括 b range(a)产生从0-a 的序列,步长为1 range(a,b)产生从a-b的序列,步长为1 range(a,b,c)产生从a-b的序列,步长为c
2. 水果价格查询
有4种水果,单价分别是3.00、2.50、4.10、10.20元/千克。首先在屏幕上显示如下菜单:
[1] 苹果
[2] 梨
[3] 橘子
[4] 葡萄
[0] 退出
请输入序号:然后用户输入序号查询水果价格。每次运行程序可以连续查询4次,即:程序输出用户所选水果的单价后自动回到菜单让用户继续查询,当用户用完4次查询机会就自动退出结束运行。但是,任何时候用户都可选择0来主动退出。
"""Author: Cyberist"""# 上机作业第三题prompt= \"""[1] 苹果[2] 梨[3] 橘子[4] 葡萄[0] 退出"""times = 4print(prompt)choice = input("请输入序号进行查询: ")while choice !='0':if choice == '1':print("苹果 3.00 元/kg")elif choice == '2':print("梨 2.50 元/kg")elif choice == '3':print("橘子 4.10 元/kg")elif choice == '4':print("葡萄 10.20 元/kg")else:print("输入不合法,重新输入")breaktimes -= 1if times == 0:print("次数使用完!按Enter退出...")input()breakinput("再次输入请按Enter...")print(prompt)choice = input("请输入序号进行查询: ")
构造程序逻辑
在这之前,我们已经学习了Python的核心语言元素,但是如果我们没有把他们使用到实际中解决问题,那么,也终将是白费,在这一小节,我们将利用所学知识来解决一些基本的问题和案例。
案例
寻找水仙花数。
说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:1^3 + 5^3+ 3^3=153。
"""找出所有水仙花数"""for num in range(100, 1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)
其中low是个位数,mid是十位数,high是百位数,在这里我们使用的是整除和求模运算。我们还可以利用此运算来进行正整数的翻转
"""正整数的反转"""num = int(input('num = '))reversed_num = 0while num > 0:reversed_num = reversed_num * 10 + num % 10num //= 10print(reversed_num)
百钱百鸡问题。
说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
"""《百钱百鸡》问题"""for x in range(0, 20):for y in range(0, 33):z = 100 - x - yif 5 * x + 3 * y + z / 3 == 100:print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))
这里使用的是穷举法,也称为暴力搜索法,这种方法通过穷尽所有的结果来选择正确的选项,最终得到解。对于这个问题,当然我们可以列相关的方程,不同参数对应不同的表达式,然后计算获得结果。
CRAPS赌博游戏。
说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。
"""Craps赌博游戏我们设定玩家开始游戏时有1000元的赌注游戏结束的条件是玩家输光所有的赌注"""from random import randintmoney = 1000while money > 0:print('你的总资产为:', money)needs_go_on = Falsewhile True: # 防止输入的数字大于已有的moneydebt = int(input('请下注: '))if 0 < debt <= money:breakfirst = randint(1, 6) + randint(1, 6)print('玩家摇出了%d点' % first)if first == 7 or first == 11:print('玩家胜!')money += debtelif first == 2 or first == 3 or first == 12:print('庄家胜!')money -= debtelse:needs_go_on = Truewhile needs_go_on:needs_go_on = Falsecurrent = randint(1, 6) + randint(1, 6)print('玩家摇出了%d点' % current)if current == 7:print('庄家胜')money -= debtelif current == first:print('玩家胜')money += debtelse:needs_go_on = Trueprint('你破产了, 游戏结束!')
其他练习
生成斐波那契数列的前20个数。
说明:斐波那契数列(Fibonacci sequence),又称黄金分割数列,是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)在《计算之书》中提出一个在理想假设条件下兔子成长率的问题而引入的数列,所以这个数列也被戏称为"兔子数列"。斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,形如:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...。斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。
找出10000以内的完美数。
说明:完美数又称为完全数或完备数,它的所有的真因子(即除了自身以外的因子)的和(即因子函数)恰好等于它本身。例如:6(6=1+2+3)和28(28=1+2+4+7+14)就是完美数。完美数有很多神奇的特性,有兴趣的可以自行了解。
输出100以内所有的素数。
说明:素数指的是只能被1和自身整除的正整数(不包括1)。
关注公众号,发送Python-1即可以获得该练习答案。





