十五.for结合range的小案例
求1+2+3+…+99+100
“”"
产生一个容器 容器放着1-100的数据
遍历容器取值 ,取出来一个累加起来
注意: 和随着取值 会发生变化的 【定义一个变量 用来接受累加和的值】
“”"
total = 0 # 放在循环的外面 避免每次循环重置
for i in range(1, 101):
total += i # total = total + i
"""
第一次 in 的时候 i = 1
total += i ===> total = total + i = 1
第二次 in 的时候 i = 2
total += i ===> total = total + i = 1 + 2 = 3
第三次 in 的时候 i = 3
total += i ===> total = total + i = 3 + 3 = 6
"""
print(total)
十六.关键字break和continue
import keyword
print(keyword.kwlist)
"""
['False', 'None', 'True', 'and', 'as', 'assert', 'async',
'await', 'break', 'class', 'continue', 'def', 'del',
'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or',
'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
"""
break和continue
都是应用在循环结构语句中,只能对循环起作用
break的作用是中断它所在的循环 【退出循环】
continue的作用[循环一次一次执行的]是, 结束当前次[循环体中后面的代码不再执行],
跳到循环判断的位置,再决定是否开启下一次 [判断成立的时候 开启下一次]
演示continue的作用 打印1-10中的偶数
for i in range(1, 11):
# 判断这个数据是否是偶数 是的话 执行打印操作
if i % 2 == 0:
print(i)
换一种思路: 判断是否为奇数 如果是奇数 跳过这一次循环 继续拿下一个数
for j in range(1, 11):
if j % 2 == 1:
continue
print(j)
利用continue写 数7游戏
1-100中 遇到7 或者 7的倍数 跳过 否则是输出
"""
1. 使用range 生成1-100的数列
2. 遍历逐个获取数据
3. 判断 获取的数据 是否是7的倍数 或者 带7
带有7 有两种情况
个位 %10 == 7
十位 //10%10 == 7
7的倍数
%7 == 0
"""
for m in range(1, 101):
if m % 10 == 7 or m // 10 % 10 == 7 or m % 7 == 0:
continue
print(m)
"""
break 是结束所在的循环
一般循环结束是 循环条件不成立或者容器中没有数据可拿时 结束循环
"""
for n in range(1, 11):
print(n)
if n == 5:
break
需求:
获取 1-100中 3的倍数且个位数为5 当获取到第二个的时候 结束获取
思路:
获取的时候还需要计数 当计数器为2的时候 结束循环
count = 0 # 计数器
for k in range(1, 101):
if k % 3 == 0 and k % 10 == 5:
count += 1 # 计算器+1
print(k)
# 判断计算器是否为2 结束
if count == 2:
break
十七.while循环结构
语法:
while 条件判断:
循环体代码块
解读:
只要条件成立,程序就一直在此循环,直到循环条件不成立
十八.while循环结构
语法:
while 条件判断:
循环体代码块
解读:
只要条件成立,程序就一直在此循环,直到循环条件不成立
# 输出1-10之间的数据
# for循环的思想: 需要一个容器,容器中存放在1-10
for i in range(1, 11): # 容器的起始值是1 步长是1 结束位置是11[不包含]
print(i)
print('================')
# while循环 思想:
"""
1. 重复做的操作是什么 ==== 打印数据 每次打印的都是1个
2. 做这件事情的条件 ===== 只要打印的数据没有到10 就得一直打印
"""
# 根据这两件事情,需要哪些数据支持
# 打印数据 每打印1次 数据要在原来的基础上+1
# 也就是说要打印的数据是变化的 就得设置标记名给其进行标记 【定义一个变量 记录打印的数据值】
num = 1
# 循环的操作
while num <= 10:
print(num)
# 数据还在原来的基础上+1
num += 1
print('循环结束时 num的值', num)
# 1-10中的偶数 使用while打印1-10中的偶数
# 定义一个数据的起始值
m = 1
# 循环 数据进行递增
while m <= 10:
if m % 2 == 0:
print(m)
m += 1
"""
1. 使用while循环 完成 1+2+3+...+100
"""
# 使用for来完成的时候
total = 0 # 记录和的
for i in range(1, 101):
total += i
print(total)
m = 1
total1 = 0
while m < 101:
total1 += m
m += 1
print(total1)
"""
1.求 1-2+3-4+5-6+...-98+99-100
2.求1-100中能被3整除且个位数为5的数据的个数
"""
# range(1, 101)
k = 1
total2 = 0 # 接受和
while k < 101:
if k % 2 == 0:
total2 -= k
else:
total2 += k
k += 1
print(total2)
# range(1, 101)
p = 1
count = 0 # 计数器
while p < 101:
# 判断这个数据是否满足要求
if p % 3 == 0 and p % 10 == 5:
count += 1
p += 1
print(count)
"""
循环结束的场景:
1. 明确循环次数 --- for-in循环 遍历容器,容器中有几个数据 循环就执行几次
2. 明确结束状态的 --- while循环
while 循环条件:
满足条件就执行
经过上面代码的演示 while也可以适用于明确循环次数的,只不过使用while书写起来麻烦了一些, 所以建议使用for-in循环
"""
# 案例: 有1023个桃子, 猴子每天吃桃子剩余个数的一半多1个,问多少天能吃完
# 来操作的时候 循环次数不明确 就使用while循环
"""
1. 重复做的事情是什么 桃子个数/2 + 1
2. 结束做这件事情的状态[只要没有达到这个状态就不会结束] 桃子个数为0 就不用吃 【只要桃子个数不为0 就得一直吃】
"""
"""
需要准备的数据:
1. 需要一个变量名 接受桃子的个数 起始值是1023
2. 计数器 记录吃的天数
"""
peach_count = 1023 # 桃子的个数
day = 0 # 计数器【天数】
# 开启循环
while peach_count > 0:
# 吃完 记录的剩余的桃子的个数
peach_count = peach_count - (peach_count//2 + 1)
# 计数器+1
day += 1
# 循环结束的时候 桃子被吃完
print('1023个桃子猴子需要', day, '天吃完')
"""
练习:
1. 录入一个大于1的整数
如果这个数值是偶数 将数据整除2后-1
如果这个数是奇数 将这个数据-1 再整除2
重复操作 问多少次之后才能将数据设置为0
2. 一张纸的厚度是0.8mm,假设纸足够长,问对折多少次可以将纸的高度达到1000米
"""
# num = int(input('请输入一个大于1整数:'))
# num1 = num # 记录原始的数据
# count1 = 0
# while num > 0:
# # 判断奇偶性
# if num % 2 == 0:
# num = num // 2 - 1
# else:
# num = (num - 1) // 2
# # 计数器+1
# count1 += 1
# print(num1, '经过运算', count1, '次之后置为0')
# 一张纸的厚度是0.8mm,假设纸足够长,问对折多少次可以将纸的高度达到1000米
# 1m = 1000mm
"""
重复的事情 对折 厚度*2
做这件事情的目的 达到1000000mm
"""
"""
准备数据
1. 记录纸的高度 起始高度是0.8mm
2. 计数器 记录次数
"""
paper_height = 0.8
count2 = 0
while paper_height < 1000 * 1000:
# 重复的操作
paper_height *= 2
# 计数器+1
count2 += 1
print('0.8mm的纸经过', count2, '次对折后达到千米')
"""
简单的思路
初学while循环的
可以while True的思想 【死循环】
分析出来结束点 判断是否达到结束点 到了的话 结束循环break
"""
paper_height1 = 0.8
count3 = 0
while True:
# 对折
paper_height1 *= 2
# 计数
count3 += 1
# 判断 纸的高度达到千米
if paper_height1 >= 1000 * 1000:
break
"""
数字炸弹:
规则: 有一个出题人 随便在1-100之间设定一个数据,然后其他人猜
猜小了、猜大了 出题人提示新的范围
猜中了 就一顿暴揍
69
你: 85 出题人 1-85
他: 70 出题人 1-70
她: 55 出题人 55-70
我: 69 挨揍了
"""
# 程序中生成随机数
# Python提供了一个工具包 random 就是来提供随机操作
import random
print(random.randint(1, 101)) # 在给定的a,b之间随机选择一个整数
"""
完成这个游戏 是需要循环的
循环次数是不明确的,使用while循环
循环结束状态: 猜中了
"""
"""
数据准备
1. 准备一个1-100中的随机数
2. 猜数的范围的起始值和结束值
"""
random_num = random.randint(1, 100) # 唯一一个包含结束位置的
# 猜数的范围
start = 1
stop = 100
# 开始猜
while True:
# 猜的动作是重复的 所以放在循环中
# 字符串数据可以使用+将数据拼接在一起 【只能是字符串与字符串拼接】
# 把数据转化成字符串的操作 str(数据) int() float()
guess = int(input('请输入' + str(start) + '-' + str(stop) + '之间的数据,进行竞猜:'))
# 将输入的数据与随机的数据进行对比
if guess > random_num:
# pass
print('猜大了')
stop = guess
elif guess < random_num:
print('猜小了')
start = guess
else:
print('猜中了 暴揍中.....')
break
print('游戏结束')