Day3
重点
for循环中的序列 - 可以是任何容器型数据类型的数据,例如:字符串、列表、字典、集合、迭代器、生成器、range
‘\t’ 制表符,t取的是table的意思,作用是对其表格数据的各列
当循环次数确定的时候用for循环,不确定的时候用while循环
continue结束一次循环(结束当次*循环) - 执行循环体的时候如果遇到了continue,那么这次循环直接结束。*
break结束整个*循环 - 执行循环体的时候遇到break整个循环直接结束*
print后面end默认值是换行
总
1.流程控制 - 通过代码控制程序执行的顺序
2.三种程序执行的方式
1)顺序结构:代码从上往下按顺序一条一条的执行,每条语句只执行一次(默认)
2)分支结构: 执行代码的时候根据条件选择执行或者不执行某些代码 (if语句)
3)循环结构:让代码重复执行-代码写一遍重复执行多次 (for、while)
1.顺序结构
print('你好')
print(100)
# input()
print('hello world!')
2.分支结构
python实现分支结构的工具只有:if
1.if单分支结构
1)应用场景:如果 xxx 就 xxx(满足条件才执行某个操作,如果这个条件不满足这个操作就不执行
2)语法:
if 条件语句:
代码段
3)说明:
a. if - 关键字,固定写法
b. 条件语句 - 判断语句(可以是任何结构的表达式)
c. 冒号 : - 固定写法
d. 代码段 - 结构上是和if保持一个缩进的一条或者多条语句(至少一条)
逻辑上代码段就是满足条件才会执行的代码
4)执行过程
先判断条件语句是否成立,如果成立就执行代码段,否则代码段就不执行
2.双分支结构
1)应用场景:如果xxx就xxx否则xxx(满足条件才执行某个操作,如果这个条件不满足就执行另一个操作
2)语法:
if 条件语句:
代码段1(满足条件需要执行的代码)
else:
代码段2(不满足条件的时候需要执行的代码)
# 案例:根据age值打印'成年'或者'未成年'
age = 8
if age < 18:
print('未成年')
else:
print('成年')
3.多分支结构
1)应用场景:如果xxx就xxx 如果xxx就xxx 如果xxx就xxx。。。。(根据不同条件做不同的事)
2)语法:
a.
if 条件语句1:
代码段1
if 条件语句2:
代码段2
if 条件语句3:
代码段3
…
b.
if 条件语句1
代码段1
elif 条件语句2
代码段2
elif 条件语句3
代码段3
…
else:
代码段N
…
执行特点:后面的条件是在前面的条件不成立的情况下进行判断。
#根据年龄值打印:幼儿(0, 3]、儿童(3, 12]、青少年[13, 18]、青年[19, 28]、壮年[29, 39]、中年[40, 65]、老年(>65)
age = 2
# 方法1:
if age <= 3:
print('幼儿')
elif age <= 12:
print('儿童')
elif age <= 18:
print('青少年')
elif age <= 28:
print('青年')
elif age <= 39:
print('壮年')
elif age <= 65:
print('中年')
else:
print('老年')
3.循环结构
1.for循环
1)语法:
for 变量 in 序列:
循环体
2)说明
a. for - 关键字;固定写法
b. 变量 - 变量名(已经定义过的,或者没有定义过的变量都可以)
c. in - 关键字;固定写法
d. 序列 - 可以是任何容器型数据类型的数据,例如:字符串、列表、字典、集合、迭代器、生成器、range
e. : - 固定写法
f. 循环体 - 结构上循环体就是和for保存一个缩进1一条或者多条语句(至少一句);
逻辑上循环体就是需要重复执行的代码
3)执行过程
让变量去序列中取值,一个一个的取,取完为止;每取一个值就执行一次循环体。
如果要控制for循环的循环次数,只需要控制序列中元素的个数。
for x in 'mak'
print(x,'hello world')
#m hello world
#a hello world
#k hello world
4)range函数 - 创建等差数列的函数
range(M,N,step)
M:对应等差数列的首项,默认是0
N:对应等差数列的尾项(但是和尾项不相等)
step:差,默认是1
- range(N) - 产生[0,N)的等差数列,差是1;range(5): 0、1、2、3、4
for x in range(5):
print(x)
- range(N,M) - 产生[M,N)的等差数列,差是1;range(5,10): 5、6、7、8、9
for x in range(5,10):
print(x)
-
range(N,M,step) - 产生[M,N)的等差数列,差是step;
range(1,25,5):1、6、11、16、21
range(6,1,-1):6、5、4、3、2
for x in (6,1,-1):
print(x)
5)应用
1.累计求和
套路:
a.定义变量保存最后的和,变量的默认值是0
b.用循环依次获取所有需要求和的数据
c.在循环体中获取到一个需要求和的数据就用保存最后的变量加上这个数据
#用循环求1+2+3+.....+100的和
s = 0
for i in range(1, 101):
s = i + s
#i = 100 无论i在这个地方取值多少,最后用的重新取值循环序列的值
#i +=1
print(s)
# 求scores所有及格学生的总分
scores = [98, 34, 78, 89, 23, 56]
total_score = 0
for x in scores:
if x >= 60:
total_score += x
print(total_score)
# 练习3:求100以内所有能被3整除但是不能被2整除的数的和
#方法一
s = 0
for i in range(100):
if i % 3 == 0 and i % 2 != 0:
s = s + i
print(s)
#方法二 3 6 9 12 15 18....99
sum1 = 0
for x in range(0, 100, 3):
if x % 2 != 0:
sum1 += x
print(sum1)
2.统计个数
a.定义变量保存最后的个数,默认值0
b.通过循环获取统计对象
c.获得一个统计对象的个数就加一
# 根据scores统计不及格学生的人数
scores = [98, 34, 78, 89, 78, 23, 56]
count = 0
for x in scores:
if x < 60:
count += 1
print(count)
# 练习:统计1000以内能被3整除的数的个数(不包括0)
#方法一
count = 0
for x in range(1, 1000):
if x % 3 == 0:
count += 1
print(count)
#方法二
count = 0
for x in range(3, 1000, 3):
count += 1
print(count)
2.while循环
1.语法:
while 条件语句:
代码段(循环体)
2.执行过程:
先判断条件语句是否成立,如果成立就执行循环体,执行完循环再判断条件语句是否成立,成立就再执行循环体
条件语句里的条件是True
1.
#打印1、2、3、4、5、....10
num = 1
while num <= 10:
print(num)
num += 1
#打印10个hello world
count = 0
while count < 10:
print('hello world')
count += 1
list.insert(下标,num)
num = int(input('请输入一个数字:'))
list1 = [10, 23, 45, 67, 91]
if num >= list1[-1]:
list1.append(num) #如果输入的num值大于所有的元素,则直接在列表最后加上num
else:
for x in range(len(list1)):
if list1[x] > num: list1.insert(x, num)
break
print(list1)
1)原则:能用for循环的时候尽量用for,for解决不了的问题才考虑使用while循环。
xxxxxxxxxx # list.insert(下标,num)num = int(input(‘请输入一个数字:’))list1 = [10, 23, 45, 67, 91]if num >= list1[-1]: list1.append(num) #如果输入的num值大于所有的元素,则直接在列表最后加上numelse: for x in range(len(list1)): if list1[x] > num: list1.insert(x, num) breakprint(list1)python
3)for循环不能解决的问题:
a.死循环
b.循环次数不确定(程序员在写代码的时候无法得知循环的次数 - 这个循环的次数由使用者行为来决定)
# 写程序提示用户输入密码,直到密码输入正确为止
# password=123456
password = '123456'
value = None
while value != password: # 输入的密码不等于系统保存的密码时
value = input('请输入密码:')
print('登录成功')
3.有了break的while循环:
while True:
需要重复执行操作
if 循环结束的条件:
break
# 写程序提示用户输入密码,直到密码输入正确为止
pw = '13244'
while True:
value = input('请输入密码:')
if pw == value:
break
3.循环关键字:continue、break
continue和break只能在循环体中使用
1. continue
作用:结束一次循环(结束当次循环) - 执行循环体的时候如果遇到了continue,那么这次循环直接结束。
for x in range(5):
print('+++++')
continue # 打印5行+++++ 不再执行后面的语句,直接从for里面再次
print('-----')
print('*****')
for x in range(10):
if x % 2 == 0: #0 2 4 6 8整除2,continue,不再执行print语句,回到for循环继续
continue
print(x) #1 3 5 7 9不整除2,则不执行continue,执行print语句,输出1 3 5 7 9
2. break
作用:结束整个循环 - 执行循环体的时候遇到break整个循环直接结束
for x in range(10):
if x > 4: # 0 1 2 3 4 在if语句中,为False,则不会break,则print出
break
print(x)
作业
1.判断指定的数是否是素数
(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = int(input('请输入一个整数:'))
x = 2
while x < num:
if num % x == 0:
print('不是素数')
break
x += 1
else:
print('是素数')
num = int(input('请输入一个整数:'))
count = 0
for x in range(2, num):
if num % x == 0:
count += 1
break
if count == 0:
print(num, '是素数')
else:
print(num, '不是素数')
# 100=1*100=2*50=4*25=5*20=10*10 12=1*12=2*6=3*4
# 由上可以说明一个数的写成两个数相乘 其中一个数最大取到其开方数
# num = int(input('请输入一个整数:'))
# count = 0
# for x in range(2, int(num**0.5)+1):
# if num % x == 0:
# count += 1
# break
# if count == 0:
# print(num, '是素数')
# else:
# print(num, '不是素数')
2.求斐波那契数列
列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
n = int(input('请输入一个整数:'))
n1 = 1
n2 = 1
i = 3
while i <= n:
s = n1 + n2
n2 = n1
n1 = s
i += 1
print(s)
else:
print(1)
n=9
n1 = 1
n2 = 1
if n >=3:
for x in range(n-3):
n1,n2=n2,n1+n2
print(n1+n2)
else:
print(1)
def F(n):
if n == 1 or n == 2:
return 1
else:
return F(n - 1) + F(n - 2)
print(F(int(input('输入一个整数:'))))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2gJjhcT-1678357229254)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20230209113622424.png)]
3.输出9*9口诀。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列
for i in range(9):
for j in range(1, i + 1):
print(i, '*', j, '=', i * j, end='\t') # \t 是一个teb键 print输出时 一般一个结果占一行 所以也可以用空格 将所有内容放在一行,用空格或者teb隔开、print后面end默认值是换行
print(' ') # 相当于在当前循环结束后,就是每一行后加个空格,使print的输出换行
for i in range(1,10):
for j in range(1,i+1):
print('%d*%d=%2d'%(i,j,i*j),end='\t')
print()
4.输入任意一个正整数,求他是几位数?
num = int(input('输入一个正整数:'))
count = 1
if num < 100 and num // 10 != 0:
count = 2
while num // 10 > 10:
num = num // 10
count += 2
print(count,'位数')
# 123 -> 3 123//10 ->12//10 ->1//10 ->0
# 1234 -> 4 1234//10 ->123//10 ->12//10 ->1//10 ->0
# 整除一次10 count+1 当为0时结束循环
# num = int(input('输入一个正整数:'))
# count = 0
# while True:
# num //= 10
# count += 1
# if num == 0:
# break
# print(count)
5.完全平方数
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
for i in range(1, 1000):
for j in range(2, 100):
if (i + 100) ** 0.5 == j:
for k in range(2, 100):
if (i + 100 + 168) ** 0.5 == k:
print(i)
n = 0
while (n + 1) ** 2 - n * n <= 168:
n += 1
for i in range((n + 1) ** 2):
if i ** 0.5 == int(i ** 0.5) and (i + 168) ** 0.5 == int((i + 168) ** 0.5):
print(i - 100)
n = 0
while (n + 1) ** 2 - n * n <= 168:
n += 1
for i in range((n + 1) ** 2):
if i ** 0.5 == int(i ** 0.5) and (i + 168) ** 0.5 == int((i + 168) ** 0.5):
print(i - 100)
import math
def is_perfectSquare(num):
sqrt_num=int(math.sqrt(num))
return sqrt_num * sqrt_num==num
if (i + 100 + 168) ** 0.5 == k:
print(i)
```python
n = 0
while (n + 1) ** 2 - n * n <= 168:
n += 1
for i in range((n + 1) ** 2):
if i ** 0.5 == int(i ** 0.5) and (i + 168) ** 0.5 == int((i + 168) ** 0.5):
print(i - 100)
n = 0
while (n + 1) ** 2 - n * n <= 168:
n += 1
for i in range((n + 1) ** 2):
if i ** 0.5 == int(i ** 0.5) and (i + 168) ** 0.5 == int((i + 168) ** 0.5):
print(i - 100)
import math
def is_perfectSquare(num):
sqrt_num=int(math.sqrt(num))
return sqrt_num * sqrt_num==num