1.if 判断 和 while 循环 练习
1.提示户输入马化腾. 判断用户输入的对不对. 如果对, 提示真聪明, 如果不对, 提醒该充值了
name = input("谁是中国人民当中最能抄的?")
if name == "马化腾":
print("真聪明")
else:
print("不充值你怎么能变强")
2.根据身高(height)找对象
男生在1米 ~ 1.5米之间 =>打印小强 你在哪里?
男生在1.5 ~ 1.7米之间 =>打印没有安全感~
男生 1.7 ~ 1.8米之间 =>打印帅哥 留个电话
男生 1.8 ~ 2米之间 =>打印帅哥 你建议多一个女朋友吗
height = float(input("请输入您的身高:"))
print(height,type(height))
# python 特有
if 1 <= height <= 1.5:
print("小强在哪里")
elif 1.5 < height <= 1.7:
print("没有安全感")
elif 1.7 < height <= 1.8:
print("帅哥,留个电话")
elif 1.8 < height <= 2:
print("帅哥,你介意多一个女朋友吗?")
# 通用写法
if 1 <= height and height <= 1.5:
print("小强在哪里")
elif 1.5 < height and height <= 1.7:
print("没有安全感")
elif 1.7 < height and height <= 1.8:
print("帅哥,留个电话")
elif 1.8 <height and height <= 2:
print("帅哥,你介意多一个女朋友吗")
else:
print("没有合适的选项")
3.猜大小的游戏:
设定一个理想数字比如:66,让用户输入数字,如果比66大,则显示猜测的结果大了;如果比66小,则显示猜测的结果小了;只有等于66,显示猜测结果正确。
sign = True
while sign:
num = float(input("请输入一个数字:"))
if num == 66:
print("猜对了")
sign = False
elif num > 66:
print("猜大了")
elif num < 66:
print("猜小了")
4.输出1-100内所有奇数
i = 1
while i <= 100:
if i % 2 == 1:
print(i)
i+=1
5.输出1-100内所有偶数
i = 1
while i <= 100:
if i % 2 == 0:
print(i)
i+=1
6.用户登陆(有三次输错机会)且每次输错误时显示剩余错误次数(提示:使用字符串格式化)
times = 1
sign = True
while sign:
pwd = input("请输入您的密码")
if pwd == "1111":
print("登陆成功")
sign = False
else:
res = 3 - times
print("输错了,您还剩余%d次机会" % (res))
if res == 0:
sign = False
times+=1
2. 双向循环练习
1. while 循环
1.打印十行十列小星星
j = 0
while j < 10:
i = 0
while i < 10:
print("*",end="")
i+=1
print()
j+=1
2.打印十行十列小星星(隔列换色)
j = 0
while j < 10:
i = 0
while i < 10:
if i % 2 == 0:
print("★",end="")
else:
print("☆",end="")
i+=1
print()
j+=1
3.打印十行十列小星星(隔行换色)
j = 0
while j < 10:
i = 0
while i < 10:
if j % 2 == 0:
print("★",end="")
else:
print("☆",end="")
i+=1
print()
j+=1
4.99乘法表
方式一
i = 1
while i <= 9:
j = 1
while j <= i:
print("%d*%d=%2d " % (i,j,i*j),end="")
j+=1
print()
i+=1
方式二
i = 9
while i >= 1:
j = 1
while j <= i:
print("%d*%d=%2d " % (i,j,i*j),end="")
j+=1
print()
i-=1
方式三
i = 1
while i <= 9:
k = 9 -i
while k > 0:
print(" ",end="")
k-=1
j = 1
while j <= i:
print("%d*%d=%2d " % (i,j,i*j),end="")
j+=1
print()
i+=1
方式四
i = 9
while i >= 1:
k = 9 - i
while k > 0:
print(" ",end="")
k-=1
j = 1
while j <= i:
print("%d*%d=%2d " % (i,j,i*j),end="")
j+=1
print()
i-=1
5.求吉利数字 100~999 666 888 111 222 333 … 123 456 987 654
个位: 987 % 10 = 7
十位: 987 // 10 % 10 = 8
百位: 987 // 100 = 9
方法一
i = 100
while i < 1000:
gewei = i % 10
shiwei = i // 10 % 10
baiwei = i // 100
# 111
if gewei == shiwei and shiwei == baiwei:
print(i)
# 123
elif shiwei == gewei - 1 and shiwei == baiwei + 1:
print(i)
# 321
elif shiwei == gewei + 1 and shiwei == baiwei - 1:
print(i)
i+=1
方法二
i = 100
while i < 1000:
strvar = str(i)
baiwei = int(strvar[0])
shiwei = int(strvar[1])
gewei = int(strvar[-1])
# 111
if gewei == shiwei and shiwei == baiwei:
print(i)
# 123
elif shiwei == gewei - 1 and shiwei == baiwei + 1:
print(i)
# 321
elif shiwei == gewei + 1 and shiwei == baiwei - 1:
print(i)
i+=1
6.百钱买百鸡
公鸡1块钱1只,母鸡3块钱1只,小鸡0.5块钱1只,问花100块钱买100只鸡,有多少种买法?
# 公鸡
x = 0
count = 0
while x <= 100:
# 母鸡
y = 0
while y <= 33:
# 小鸡
z = 0
while z <= 100:
if x+y+z == 100 and x*1+y*3+z*0.5 == 100:
print(x,y,z)
count+=1
z+=1
y+=1
x+=1
print(count)
2. for 循环
1.打印十行十列小星星
for i in range(10):
for j in range(10):
print("*",end="")
print()
2.打印十行十列小星星(隔列换色)
for i in range(10):
for j in range(10):
if j % 2 == 0:
print("★",end="")
else:
print("☆",end="")
print()
3.打印十行十列小星星(隔行换色)
for i in range(10):
for j in range(10):
if i % 2 == 0:
print("★",end="")
else:
print("☆",end="")
print()
4.99乘法表
方式一
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%2d " % (i,j,i*j),end="")
print()
方式二
for i in range(9,0,-1):
for j in range(1,i+1):
print("%d*%d=%2d " % (i,j,i*j),end="")
print()
方式三
for i in range(1,10):
for k in range(9-i,0,-1):
print(" ",end="")
for j in range(1,i+1):
print("%d*%d=%2d " % (i,j,i*j),end="")
print()
方式四
for i in range(9,0,-1):
for k in range(9-i,0,-1):
print(" ",end="")
for j in range(1,i+1):
print("%d*%d=%2d " % (i,j,i*j),end="")
print()
5.求吉利数字100 ~ 999 666 888 111 222 333 444 … 123 789 567 765 432
方法一
for i in range(100,1000):
gewei = i % 10
shiwei = i // 10 % 10
baiwei = i // 100
# 111
if gewei == shiwei and shiwei == baiwei:
print(i)
# 123
elif shiwei == gewei - 1 and shiwei == baiwei + 1:
print(i)
# 321
elif shiwei == gewei + 1 and shiwei == baiwei - 1:
print(i)
方法二
for i in range(100,1000):
strvar = str(i)
baiwei = int(strvar[0])
shiwei = int(strvar[1])
gewei = int(strvar[-1])
if gewei == shiwei and shiwei == baiwei:
print(i)
elif shiwei == gewei - 1 and shiwei == baiwei + 1:
print(i)
elif shiwei == gewei + 1 and shiwei == baiwei - 1:
print(i)
6.百钱买百鸡
公鸡1块钱1只,母鸡3块钱1只,小鸡0.5块钱1只,问花100块钱买100只鸡,有多少种买法?
count = 0
for x in range(0,101):
for y in range(0,34):
for z in range(0,101):
if x+y+z == 100 and x*1+y*3+z*0.5 == 100:
print(x,y,z)
count+=1
print(count)
3. 关键字的使用 pass break continue
1. pass 过(占位)
关键字 pass : 如果在代码块中有一段代码逻辑不知道怎么写,我们可以先写上关键字pass,继续写后面的代码,
等到想出来这段代码逻辑,我们再把pass替换掉.
if 10 == 10:
pass
while True:
pass
2. break 终止当前循环
关键字 break : 注意点 => 终止的是当前循环
# 打印 1 ~ 10 , 遇到5就终止循环
i = 1
while i <= 10:
if i == 5:
break
print(i)
i+=1
# break 终止的是当前循环
i = 1
while i <= 3:
j = 1
while j <= 3:
if j == 2:
break
print(i,j)
j+=1
i+=1
3. continue 跳过当前循环,从下一次循环开始
关键字 continue : 当执行 continue 时,后面的代码不执行,会跳到while循环的条件判断处
# 打印 1 ~ 10 , 跳过5
i = 1
while i <= 10:
if i == 5:
# 需手动自增加1 当执行 continue 时,后面的代码不执行,跳到while循环的条件判断处,会造成死循环
i+=1
continue
print(i)
i+=1
# 打印 1 ~ 100 , 所有不含4的数字
"""
// 可以取到一个数的高位
% 可以取到一个数的低位
46 // 10 = 4
46 % 10 = 6
"""
# 方法一
i = 1
while i <= 100:
if i // 10 == 4 or i % 10 == 4:
i+=1
continue
print(i)
i+=1
# 方法二
i = 1
while i <= 100:
strvar = str(i)
if "4" in strvar:
i+=1
continue
print(i)
i+=1
4. for 循环
for 循环 : 遍历 循环 迭代
for : 主要用于遍历数据而提出的, while 在遍历数据的时候,有局限性
for 循环的代码结构 :
for 变量 in 可迭代的对象:
code1
code2
可迭代的对象 : 容器类型数据,range对象,迭代器
lst = ["熊大","张三","李四","王五"]
i = 0
while i < len(lst):
print(lst[i])
i+=1
# 遍历字符串
container = "今天是个好日子"
# 遍历列表
container = ["熊大","张三","李四","王五"]
# 遍历元组
container = (1,2,3,4,66)
# 遍历集合
container = {"小明","小花","小红","小兰","小鹿"}
# 遍历字典 (遍历字典时,只遍历键)
container = {"dgz":"刚强","dbt":"智慧","dpz":"嘴炮","huaer":"彪悍"}
for i in container:
print(i)
# 遍历不等长的二级容器
container = [["小明","小东","小花","小路"],("小兰","小莲")]
for i in container:
for j in i:
print(j)
# 变量的解包
a,b = 1,2
a,b = [3,4]
a,b = {"a":5,"b":6}
print(a,b)
# 遍历等长的二级容器
container = [("宋晓峰","宋小宝","宋大兵"),("马云","马化腾","马三炮"),["姜东九","李俊基","韩允儿"]]
for a,b,c in container:
print(a,b,c)
# a,b,c = ("宋晓峰","宋小宝","宋大兵")
# a,b,c = ("马云","马化腾","马三炮")
# a,b,c = ["姜东九","李俊基","韩允儿"]
range对象 的结构:
range(开始值,结束值,步长)
结束值本身取不到,只能取到结束值之前的那个数
# 只有一个值
for i in range(10):
print(i) # 0 1 2 3 4 5 6 7 8 9
# 只有两个值
for i in range(3,11):
print(i) # 3 4 5 6 7 8 9 10
# 只有三个值
for i in range(1,11,3):
print(i) # 1 4 7 10
# 倒叙打印 10 ~ 1
for i in range(10,0,-1):
print(i) # 10 9 8 7 6 5 4 3 2 1
总结 :
while : 较为复杂的逻辑
for : 数据的遍历
while 和 for 部分代码可以互相转换 (可以参考前两节"双向循环练习"中 while 循环和 for 循环的相互转换)
区别写法1
# 打印 1 ~ 10 跳过 5
# while 循环
i = 1
while i <= 10:
if i == 5:
i+=1
continue
print(i)
i+=1
# for 循环
for i in range(1,11):
if i == 5:
continue
print(i)
区别写法2
# 99乘法表
# while 循环
i = 1
while i <= 9:
j = 1
while j <= i:
print("%d*%d=%2d " % (i,j,i*j),end="")
j+=1
print()
i+=1
# for 循环
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%2d " % (i,j,i*j),end="")
print()