day04分支和循环
day04
1.流程控制
流程控制:控制代码的执行顺序
根据代码的执行顺序的不同,可以将代码分成三种结构
1.1顺序结构
代码从上往下按顺序执行
print(100)
print('hello world')
x = 1000
print(x*2)
"""
从上往下依次执行,输出为:
100
hello world
2000
"""
1.2分支结构
根据条件选择执行或不执行某些代码
age = 17
if age >= 18:
print('进网吧玩游戏')
"""
当输入的age小于18时,print不执行
"""
1.3循环结构
代码只写一遍,重复执行多次
for x in range(10):
print('hello world')
"""
输出10次hello world
"""
2.if分支结构
2.1 if单分支结构
如果…就…
"""
语法:
if 条件语句:
代码段
说明:
if - 固定写法
条件语句 - 任何有结果的表达式,一般都是结果为布尔值的表达式
: - 固定写法
代码段 - 结构上,和if保持一个缩进(一个tab)的一条或者多条语句(至少一条)
逻辑上,就是满足条件才需要执行的代码
"""
# 判断num的值是否为偶数
num = 350
if num % 2 == 0:
print('偶数')
# 如果year对应的年份是闰年就打印'闰年'
year = 1998
if year % 4 == 0 and (year % 100 == 0 or year % 400 == 0):
print('闰年')
# 若x是整数就打印'整数'
x = 34.9
if type(x) == type(1):
print('整数')
2.2 if双分支结构
如果…就…,否则就…
"""
语法:
if 条件语法:
代码段1(满足条件会执行的代码)
else:
代码段2(条件不成立会执行的代码)
"""
# 根据year的值打印'闰年'或者'平年'
year = 2000
if year % 4 == 0 and (year % 100 == 0 or year % 400 == 0):
print('闰年')
else:
print('平年')
2.3 if多分支结构
如果…就…,如果…就…,如果…就…,如果…就…,…
"""
方法一:(根据不同条件做不同的事情,其中一个条件成立的时候另外的条件也可能成立)
if 条件1:
代码段1
if 条件2:
代码段2
if 条件3:
代码段3
(每个条件都会判断,成立的时候指定对应的代码段)
方法二:(根据不同条件做不同的事情,其中一个条件成立的时候另外的条件绝对不会成立)
if 条件1:
代码段1
elif 条件2:
代码段2
elif 条件3:
代码段3
...
else:
代码段N
(从前往后判断条件,执行第一个满足条件对应的代码段,一旦某个条件成立,后面的条件不会再判断)
"""
# 根据分数打等级
score = 59
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 60:
print('C')
else:
print('D')
3. for循环和while循环
"""
语法:
for 循环变量 in range(start,end):
语句1
语句2
语句3
"""
range:
"""
range(100) - 0~99的取值范围
range(0, 100) - 0~99的取值范围
range(1, 101) - 1~100的取值范围
"""
# 左边取得到,右边取不到
for i in range(1, 10):
print(i, i ** 2, i ** 3)
# range(1, 10, 2) - 1~9的范围,每次取值在原来的基础上+2
for i in range(1, 10, 2):
print('*' * i)
案例a.输出*号
"""
*
***
*****
*******
*********
"""
# range(1, 10, 2) - 1~9的范围,每次取值在原来的基础上+2
for i in range(1, 10, 2):
print('*' * i)
案例b.找出100到999之间的水仙花树
# 水仙花树:153,1的三次方+5的三次方+3的三次方=153类似的数就是水仙花数
for i in range(100, 1000):
if (i // 100) ** 3 + (i % 100 // 10) ** 3 + (i % 10) ** 3 == i:
print(i)
案例c.计算若干个数以内的质数
a = int(input())
for i in range(2, a):
is_prime = True
for j in range(2, i):
if i % j == 0:
is_prime = False
break
if is_prime:
print(i)
案例d.计算1到100的和
total = 0
i = 1
while i <= 100:
total += i
i += 1
print(total)
"""
while 循环条件(产生布尔值的表达式)
语句1
语句2
语句3
"""
案例e:猜数字游戏
"""
计算机产生一个1-100随机数让人来猜,人输入自己猜的数字,
计算机会提示人"大一点"、"小一点"、"猜中了",如果没有猜中游戏继续,
如果猜中了游戏结束,如果猜了7次以上,计算机提示"智商拙计"。
"""
import random
i = random.randrange(1, 101)
iq = False
for k in range(1, 8):
j = int(input('输入你猜的数'))
if j > i:
print('小一点')
elif j < i:
print('大一点')
elif j == i:
print('猜中了')
iq = True
break
if not iq:
print('智商捉鸡')
案例f:99乘法表
for i in range(1, 10):
j = 1
while j < i:
print(f'{j}*{i}={j * i}', end=' ')
j += 1
print(f'{j}*{i}={j * i}')
案例g:计算最小公倍数和最大公约数
a = int(input('输入一个数'))
b = int(input('再输入一个数'))
if a < b:
a, b = b, a
for i in range(1, b + 1):
if a * i % b == 0:
print(f'{a * i}为这两个数的最小公倍数')
break
t = b
c = a % b
while c:
t = c
c = t % c
print(f'{t}为这两个数的最大公因数')
案例h:计算10个数的平均值
n = 10
total = 0
print(f'输入{n}个数')
for i in range(n):
a = float(input(''))
total += a
average = total / n
print(f'平均值为{average}')
案例i.计算组合数和排列数
print('输入两个数')
n = int(input())
k = int(input())
total_multiply = 1
total_divide = 1
for i in range(1, n + 1):
total_multiply *= i
for j in range(1, n - k + 1):
total_divide *= j
res_1 = total_multiply / total_divide
print(f'组合数为{res_1}')
total_multiply = 1
total_divide = 1
for i in range(n - k + 1, n + 1):
total_multiply *= i
for j in range(1, k + 1):
total_divide *= j
res_2 = total_multiply / total_divide
print(f'排列数为{res_2}')
案例j:根据输入的三边边长计算三角形是否能被构成,若能构成,计算其周长和面积
print('输入三角形的三条边长')
a = float(input())
b = float(input())
c = float(input())
l = a + b + c
p = l / 2
s = (p * (p - a) * (p - b) * (p - c)) ** 0.5
if b < c:
b, c = c, b
if a < b:
a, b = b, a
if a < b + c:
print('能构成三角形')
print(f'周长为{l},面积为{s}')
else:
print('不能构成三角形')