for 循环
for i in [1, 2, 3, 4, 5]:print(i)# 可以是列表、字典和字符串,不可用整数和浮点数。dict = {'小明': 98, '小红': 85, '小爱':80}for i in dict:print(i)# 打印键 小明、小红、小爱print(dict[i]# 打印值 98、85/08dict = 'abc'for i in dict:print(i) # 结果是a b c
除了列表,字典,字符串三种数据类型,我们还可以遍历其他的数据集合。比如range()
range() 函数
使用range(x)函数,可以生成一个从0到x-1的整数序列。
range(start,end,step) start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0,5); end: 计数到 end 结束,但不包括 end。例如:range(0,5) 是[0, 1, 2, 3, 4]没有5 step:步长,默认为1。例如:range(0,5) 等价于 range(0, 5, 1)
# 【整数取值】for i in range(8):print(i) # 结果01234567,取头不取尾。# 【区间取值】for i in range(0, 8):print(i) # 结果01234567#【加上步长】,步长表示隔几个数取值,也可以理解为取2的整数倍(偶数)。for i in range(0, 8, 2): #偶数print(i) # 结果0246for i in range(1, 8, 2): #奇数print(i) # 结果1357# 【倒叙】注意步长一定要加上负数,否则取不到值;这里的0作为end是不包含在内的for i in range(8, 0, -1):print(i) # 结果87654321
range除了循环以外,还可以用来生成列表、元组
l = list(range(10))print(f"l的数据类型是{type(l)}\n它的值包含{l}")# li的数据类型是<class 'list'>,它的值包含[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]l = tuple(range(10))print(f"l的数据类型是{type(l)}\n它的值包含{l}")# li的数据类型是<class 'tuple'>,它的值包含(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)# 列表与元组相互转化 ——————————————————————————————————————————————————————l = list(range(0, 6, 2))t = tuple(l)# l的数据类型是<class 'list'> 它的值包含[0, 2, 4]print(f"l的数据类型是{type(l)}\n它的值包含{l}")# t的数据类型是<class 'tuple'>它的值包含(0, 2, 4)print(f"t的数据类型是{type(t)}\n它的值包含{t}")
# 控制循环次数,循环5次for i in range(5):print('Python')# 计算1-100的和sum = 0for i in range(101):sum += iprint(sum) # 结果5050# 计算1-100的的偶数之和sum = 0for i in range(101):if i % 2 == 0:sum += iprint(sum) # 结果2550# 提示用户输入3个数,组成一个列表list = []for i in range(3): # 从0123 不含3num = input(f"请输入第{i+1}个数:") # 输入的是字符串num = int(num) # 转化为整数,否则结果是 ['1', '2', '3']list.append(num)print(list) # 结果是 [1, 2, 3]# 将列表里的值 X 2list = [1, 2, 3]for i in range(len(list)):list[i] *= 2print(list) # 结果是[2, 4, 6] 注意:一定要在循环外打印# 计算新列表的元素之和list = [2, 4, 6]sum = 0for i in list:sum += iprint(sum) # 结果 12# 找到100以内能被7整数和包含7的数字,把他们放入列表list = []for i in range(101):a = i % 10 # 个位的值b = i // 10 % 10 # 十位的值if i % 7 == 0 or (a == 7 or b == 7):list.append(i)print(list)
join方法提取列表里的字符串,只能是字符串哦
l = ['h', '3', 'l']s1 = "".join(l) # 提取l列表里的值s2 = "-".join(l) # 添加分隔符-print(s1) # h3lprint(s2) # h-3-l
循环嵌套
for i in range(3): # i = 0 1 2for j in range(5): # j = 0 1 2 3 4 5print(f"i={i},j={j}")item = [] # 创建一个空列表for i in range(3): # 用i变量循环三次item.append(i) # 循环的值添加到item列表里print(item) # 打印列表 [0, 1, 2]l = []for i in range(3):item = []for j in range(5):item.append(j)l.append(item)print(l) # [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]l = [[j for j in range(5)] for i in range(3)]print(l) #结果和上面一样
while 循环
for和while的区别:for用来精确控制循环次数【循环的工作量是否确定】,while是用在不知道循环次数但知道循环结束的条件。
a = 0 #先定义变量a,并赋值,可为空。while a < 5: #设定一个放行条件:a要小于5,才能办事a += 1 # 满足条件时,就办事:将a+1print(a) # 结果是12345,注意缩进,下面的不缩进,打印的就是最后一个值print(a) # 结果是5
对于“输入密码,判断输入的密码是否正确”这件事,我们并不知道要判断几遍才能得到正确密码,所以【工作量不确定】,适合用while循环。
password = '' # 变量password用来保存输入的密码while password!='123456':password=input('请重新输入密码')print('打开')
不过有一种情况for循环和while循环都可以解决问题,那就是【把一件事情做N遍】
#用for循环把诗句打印3遍for i in range(1,4) :print('明日复明日,明日何其多。')#用while循环把诗句打印3遍j = 1while j<4 :print ('明日何其多,明日何其多。')j =j+1
布尔运算
1.用字母数值做比较
一共有6种比较方式:==、!=、 >、<、>=、<=
字母和数字的关系 : z…c b a > Z… C B A > 9… 3 2 1 0
# 下面所有都为trueprint(9 > 0)print(3 != 5)print(1 == 1.0) # 等号是两个等号print('a' < 'z') # a最大,字符串比较要加引号print('a' > 'A') # 同样的字母小写大于大写print('Hi' > 'Hello') #首字母一样,比较后面的,i>e,所以结果是true
# 运算顺序# **# * / % //# + -# ==、!=、 >、<、>=、<=# and or not# =result = 1+2**2*3 >= 12-4/2 and 'Apple' >= 'Car' # 先**result = 1+4*3 >= 12-4/2 and 'Apple' >= 'Car' # 后* /result = 1+12 >= 12-2 and 'Apple' >= 'Car' # 后+-result = 13 >= 10 and 'Apple' >= 'Car' # 后>=result = 'Ture' and 'Flase' # 后andprint(result)
2.用数值做比较
bool() 是一个看布尔值的函数,类似于我们之前的type(),结果是 True 或 Flase

3.布尔值之间的运算
一共有5种计算方式:and、or、not、in、not in 。下面用囚徒困境来写个案例。
while True:a = input('A,你认罪吗?请回答认罪或者不认')b = input('B,你认罪吗?请回答认罪或者不认')if a == '认罪' and b == '认罪':print('两人都得判10年,唉')elif a == '不认' and b == '认罪':print('A判20年,B判1年,唉')elif a == '认罪' and b == '不认':print('A判1年,B判20年')else:print('都判3年,太棒了')break # 当满足开头提到的条件时,跳出循环。
四种新的语句
break(内部使用,结束循环)
break的意思是“打破”,是用来结束循环的,一般写作if…break。
豆瓣的爬虫逻辑,注意变量命名的取法。如果去掉break,看看结果是我们想要的吗?
movies = {'妖猫传':['黄轩','染谷将太'],'无问西东':['章子怡','王力宏','祖峰']}actor = input('你想查询哪个演员?')for movie in movies: # 用 for 遍历字典actors = movies[movie] # 读取各个字典的主演表if actor in actors:print(actor + '出演了电影' + movie)breakelse:print('此演员没有作品')break
小小地提醒你,break前面一共缩进了【8个空格】。空格和Tab 是一样的!
continue(内部使用,重新开始)
这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,提前结束本轮循环(不执行后面的代码),并直接开始下一轮循环。

i = 1while i < 8:if i % 2 == 1: # 偶数i += 1continue # 跳出循环到 i<8print(i) # 结果 246i += 1
pass语句
Pass语句只用于维持程序结构的完整。我们在编程时若不想马上编写某些代码,又不想有语法锆误,就可以使用pass语句占位,意思是“跳过”。
a = int(input('请输入一个整数:'))if a > 100:passelse:print('你输入了一个小于100的数字')
else语句
我们在条件判断语句见过【else】,其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用。
for p in range(3):p = int(input('请输入手机密码,你有3次机会:'))if a == 123456:print('打开手机')breakelse:print('3次都错了,5分钟后重试')

猜数字游戏练习
secret = 24 #设定秘密数字while True:guess = input('你来猜猜我的秘密数字是多少:') #输入猜测数字if int(guess)==secret: #数字对比print('正确!你很棒哦。')breakelif int(guess)>secret:print('你猜的太大了,请重新猜猜~')else:print('你猜的太小了,请重新猜猜~')
