循环是计算机科学运算领域的用语,也是一种常见的控制流程。循环是一段在程序中只出现一次,但可能会连续执行多次的代码。循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次。
python提供了两种主要的循环结构:for
循环和while
循环。
for-in循环
如果明确知道循环执行的次数,推荐使用for-in
循环
for 变量 in 可迭代对象: # 循环体 # 每次迭代执行这里的代码
# 遍历列表 fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit) # 遍历字符串 for char in "python": print(char) # 使用range()函数 for i in range(5): # 0到4 print(i) for i in range(2, 6): # 2到5 print(i) for i in range(0, 10, 2): # 0到9,步长为2 print(i)
range函数:
- range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
- range(1, 101):可以用来产生1到100范围的整数,相当于是左闭右开的设定,即[1, 101)。
- range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长(跨度),即每次递增的值,101取不到。
- range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长(跨度),即每次递减的值,0取不到。
# 同时获取索引和值 for index, value in enumerate(fruits): print(index, value) # 遍历字典 person = {"name": "alice", "age": 25, "city": "new york"} for key in person: # 遍历键 print(key) for value in person.values(): # 遍历值 print(value) for key, value in person.items(): # 同时遍历键和值 print(key, value) # 并行遍历多个序列 names = ["alice", "bob", "charlie"] ages = [25, 30, 35] for name, age in zip(names, ages): print(name, age) # 循环变量命名为_ import time for _ in range(36): print('hello, world') time.sleep(1)
while循环
如果要构造循环结构但是又不能确定循环重复的次数,推荐使用while
循环。
while 条件: # 循环体 # 当条件为true时执行这里的代码
# 基本while循环 count = 0 while count < 5: print(count) count += 1 # 无限循环(通常配合break使用) while true: user_input = input("输入'quit'退出: ") if user_input == "quit": print(f"你输入了:{user_input},退出") break print(f"你输入了: {user_input}")
循环控制语句
break语句
break
用于完全终止循环,跳出循环体。
for i in range(10): if i == 5: break print(i) # 只打印0-4
continue语句
continue
跳过当前迭代,直接进入下一次循环。
for i in range(10): if i % 2 == 0: continue print(i) # 只打印奇数
else子句
循环可以有一个可选的else
块,它在循环正常完成(即不是由break
终止)时执行。
for i in range(5): print(i) else: print("循环正常完成") # 如果循环被break终止,else不会执行 for i in range(5): if i == 3: break print(i) else: print("这不会被执行")
嵌套的循环结构
循环可以嵌套,即一个循环内部包含另一个循环。
# 打印乘法表 for i in range(1, 10): for j in range(1, i+1): print(f"{j}×{i}={i*j}", end="\t") print() # 换行 # 嵌套循环中的break和continue for i in range(3): for j in range(3): if j == 1: break # 只影响内层循环 print(i, j)
循环结构的应用
例子1:判断素数
要求:输入一个大于 1 的正整数,判断它是不是素数。
提示:素数指的是只能被 1 和自身整除的大于 1 的整数。例如对于正整数 n,我们可以通过在 2 到 n−1 之间寻找有没有 n 的因子,来判断它到底是不是一个素数。当然,循环不用从 2 开始到 n−1 结束,因为对于大于 1 的正整数,因子应该都是成对出现的,所以循环到 n 就可以结束了。
""" 输入一个大于1的正整数判断它是不是素数 """ num = int(input('请输入一个正整数: ')) end = int(num ** 0.5) is_prime = true for i in range(2, end + 1): if num % i == 0: is_prime = false break if is_prime: print(f'{num}是素数') else: print(f'{num}不是素数')
例子2:最大公约数
要求:输入两个大于 0 的正整数,求两个数的最大公约数。
提示:两个数的最大公约数是两个数的公共因子中最大的那个数。
""" 输入两个正整数求它们的最大公约数 """ x = int(input('x = ')) y = int(input('y = ')) for i in range(x, 0, -1): if x % i == 0 and y % i == 0: print(f'最大公约数: {i}') break
例子3:猜数字游戏
要求:计算机出一个 1 到 100 之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息“大一点”、“小一点”或“猜对了”,如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
""" 猜数字小游戏 """ import random answer = random.randrange(1, 101) counter = 0 while true: counter += 1 num = int(input('请输入: ')) if num < answer: print('大一点.') elif num > answer: print('小一点.') else: print('猜对了.') break print(f'你一共猜了{counter}次.')
分支和循环结构实战
例子1:100以内的素数
说明:素数指的是只能被 1 和自身整除的正整数(不包括 1)
""" 输出100以内的素数 """ for num in range(2, 100): is_prime = true for i in range(2, int(num ** 0.5) + 1): if num % i == 0: is_prime = false break if is_prime: print(num)
例子2:斐波那契数列
要求:输出斐波那契数列中的前 20 个数。
说明:斐波那契数列(fibonacci sequence),通常也被称作黄金分割数列,是意大利数学家莱昂纳多·斐波那契(leonardoda fibonacci)在《计算之书》中研究理想假设条件下兔子成长率问题而引入的数列,因此这个数列也常被戏称为“兔子数列”。斐波那契数列的特点是数列的前两个数都是 1,从第三个数开始,每个数都是它前面两个数的和。按照这个规律,斐波那契数列的前 10 个数是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55
。斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。
""" 输出斐波那契数列中的前20个数 """ a, b = 0, 1 for _ in range(20): a, b = b, a + b print(a)
例子3:寻找水仙花数
要求:找出 100 到 999 范围内的所有水仙花数。
提示:在数论中,水仙花数(narcissistic number)也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个 n 位非负整数,其各位数字的 n 次方和刚好等于该数本身,例如: 153=13+53+33 ,所以 153 是一个水仙花数; 1634=14+64+34+44 ,所以 1634 也是一个水仙花数。对于三位数,解题的关键是将它拆分为个位、十位、百位,再判断是否满足水仙花数的要求,这一点利用 python 中的//
和%
运算符其实很容易做到。
""" 找出100到999范围内的水仙花数 """ for num in range(100, 1000): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid ** 3 + high ** 3: print(num)
例子4:百钱百鸡问题
说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元三只,用 100 块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
""" 百钱百鸡问题 """ for x in range(0, 21): for y in range(0, 34): for z in range(0, 100, 3): if x + y + z == 100 and 5 * x + 3 * y + z // 3 == 100: print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只') """ 百钱百鸡问题2 """ for x in range(0, 21): for y in range(0, 34): z = 100 - x - y if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100: print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
例子5:craps赌 博游戏
说明:craps又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌 博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简化后的规则是:玩家第一次摇骰子如果摇出了 7 点或 11 点,玩家胜;玩家第一次如果摇出 2 点、3 点或 12 点,庄家胜;玩家如果摇出其他点数则游戏继续,玩家重新摇骰子,如果玩家摇出了 7 点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。为了增加代码的趣味性,我们设定游戏开始时玩家有 1000 元的赌注,每局游戏开始之前,玩家先下 注,如果玩家获胜就可以获得对应下 注金额的奖励,如果庄家获胜,玩家就会输掉自己下 注的金额。游戏结束的条件是玩家破产(输光所有的赌注)。
""" craps赌博游戏 """ import random money = 1000 while money > 0: print(f'你的总资产为: {money}元') # 下注金额必须大于0且小于等于玩家的总资产 while true: debt = int(input('请下 注: ')) if 0 < debt <= money: break # 用两个1到6均匀分布的随机数相加模拟摇两颗色子得到的点数 first_point = random.randrange(1, 7) + random.randrange(1, 7)
到此这篇关于python循环结构解析的文章就介绍到这了,更多相关python循环结构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论