分支结构
if else的使用
"""
用户身份验证
date : 2022.3.24
version : 0.1
"""
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 用户名是zhangsan且密码是123456则身份验证成功否则身份验证失败
if username == 'zhangsan' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
"""
100分制成绩换成等级制
date : 2022.3.24
version : 0.1
"""
score = float(input('请输入成绩: '))
while(score > 100 or score < 0):
if score > 100 or score < 0:
score = float(input('请重新输入100以内的正数:'))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('对应的等级是:', grade)
循环结构
for in 循环
所谓循环结构,就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in循环,另一种是while循环
"""
用for循环实现1~100求和
date : 2022.3.24
version : 0.1
"""
total = 0
for x in range(1,101):
total += x
print(total)
5050
需要说明的是上面代码中的range(1, 101)可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in循环中,就可以通过前面的循环变量x依次取出从1到100的整数。当然,range的用法非常灵活,下面给出了一个例子:
range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次递增的值。
range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次递减的值。
"""
用for循环实现1~100的偶数求和
date : 2022.3.24
version : 0.1
"""
total = 0
for x in range(2,101,2):
total += x
print(total)
2550
while循环
while循环通过一个能够产生bool值的表达式来控制循环,当表达式的值为True时则继续循环,当表达式的值为False时则结束循环。
"""
猜数字游戏
date : 2022.3.24
version : 0.1
"""
import random
#产生一个1到100范围的随机数
answer = random.randint(1,101)
counter = 0
while True:
counter += 1
number = int(input("请输入:"))
if number < answer:
print('bigger')
elif number > answer:
print('smaller')
else:
print("恭喜你猜对了!")
break
print(f'你一共猜了{counter}次')
应用
前面介绍了分支循环结构,它是构造程序逻辑的基础,大部分初学者在学习了分支和循环结构后都能理解它们的用途和用法,但是遇到实际问题的时候又无法下手;看懂别人的代码很容易,但是要自己写出同样的代码却又很难。如果你也有同样的问题和困惑,千万不要沮丧,这只是因为你才刚刚开始编程之旅,你的练习量还没有达到让你可以随心所欲的写出代码的程度,只要加强编程练习,这个问题迟早都会解决的。下面我们就为大家讲解一些经典的案例。
经典小案例
例子1:寻找水仙花数。
说明:水仙花数,是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:153=1^3+5^3+3^3 。
"""
找出所有水仙花数(3位数即100-999这里用range函数),
date : 2022.3.25
version : 0.1
"""
for num in range(100,1000):
low = num % 10 #取余数为个位
mid = num // 10 % 10 #整除10再取个位的数即取十位的数
high = num // 100 #取百位上的数
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
"""
正整数的反转
date : 2022.3.25
version : 0.1
"""
num = int(input("请输入一个正数 num = "))
reversed_num = 0
while num > 0 :
reversed_num = reversed_num * 10 + num % 10
num //= 10 #依次去掉低位
print(num)
print(reversed_num)
例子2 百钱百鸡
说明:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
"""
百钱百鸡
date : 2022.3.25
version : 0.1
"""
for x in range(1,21):
for y in range (1,34):
z = 100 - x - y
if 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0:
print(f'公鸡:{x}只,母鸡:{y}只,小鸡:{z}只')
例子3:CRAPS赌博游戏
简化后的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;玩家如果摇出其他点数则玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。
"""
Craps赌博游戏
我们设定游戏开始时玩家有1000元的赌注
游戏结束的条件是玩家输光所有的赌注
date : 2022.3.25
version : 0.1
"""
from random import randint
money = 1000
while money > 0:
print(f'你的总资产为:{money}元')
go_on = False
#下注金额必须大于0且小于等于玩家总资产
while True:
debt = int(input('请下注:'))
if 0 < debt <= money:
break
#第一次摇骰子
#用到1到6均匀分布的随机函数模拟骰子的点数
first = randint(1, 6) + randint(1, 6)
print(f'\n玩家摇出了{first}点')
if first == 7 or first == 11:
print('玩家胜!\n')
money += debt
elif first == 2 or first == 3 or first == 12:
print('庄家胜!\n')
money -= debt
else:
go_on = True
#第一次摇骰子没有分出胜负
while go_on:
go_on = False
current = randint(1, 6) + randint(1, 6)
print(f'玩家摇出了{current}点')
if current == 7:
print(f'庄家胜!\n')
money -= debt
elif current == first:
print(f'玩家胜!\n')
money += debt
else:
go_on = True
print("你破产了,game over!!!")
例子4:斐波那契数列
斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,按照这个规律,斐波那契数列的前10个数是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55。斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。
"""
输出斐波那契数列前20个数
date : 2022.3.25
version : 0.1
"""
a = 0
b = 1
#a, b = 0, 1
for x in range(20): #range(20) 表示 0 到 19 次循环
print(f'{x}')
a, b = b, a + b
print(f'\ta ={a}')
总结
分支结构和循环结构非常重要,是构造程序逻辑的基础,一定要通过大量的练习来达到融会贯通。刚才讲到的CRAPS赌博游戏那个例子可以作为一个标准,如果你能很顺利的完成这段代码,那么分支和循环结构的知识你就已经掌握了