while/for循环用法
while循环
用法1:
while 条件:
代码块
用法2:
while 条件:
代码块
else:
不满足条件时,执行的代码块
例如:
i = 0
while i < 3:
print(i)
i += 1
else:
print('此时 i 的值为 %d ,已经不满足条件了' % i)
结果是:
0
1
2
此时 i 的值为 3 ,已经不满足条件了
for循环
用法1:
for 条件:
代码块
用法2:
for 条件:
代码块
else:
不满足条件时执行的代码
例如:
for i in range(3):
print(i)
i += 1
else:
print('此时 i 的值为 %d ,已经不满足条件了' % i)
结果是:
0
1
2
此时 i 的值为 3 ,已经不满足条件了
循环关键字 break/continue
break作用:停止当前循环
例如:
i = 0
while i < 10:
if i == 5:
break
else:
print(i)
i += 1
结果是:
0
1
2
3
4
continue作用:停止本次循环continue关键字之后的执行
例如:
i = 0
while i < 5:
if i == 3:
i += 1
continue
print(i)
i += 1
结果是:
0
1
2
4
练习
1、打印九九乘法表
for m in range(1, 10):
for n in range(1, m + 1):
print('%d*%d=%d' % (n, m, m * n), end=' ')
print()
# 结果是:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
2、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?
s = 0
h = 100.00
for i in range(10):
if i == 0:
s += 100
print('第 1 次落地经过的距离为:%.2f' % s)
else:
s += h
h /= 2
print('第 %d 次落地经过的距离为:%.2f' % (i + 1, s))
# 结果是:
第 1 次落地经过的距离为:100.00
第 2 次落地经过的距离为:200.00
第 3 次落地经过的距离为:250.00
第 4 次落地经过的距离为:275.00
第 5 次落地经过的距离为:287.50
第 6 次落地经过的距离为:293.75
第 7 次落地经过的距离为:296.88
第 8 次落地经过的距离为:298.44
第 9 次落地经过的距离为:299.22
第 10 次落地经过的距离为:299.61
3、猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半 在加一个。到第10天早上想再吃时,见只剩下一个桃子了。
请通过一段通过代码来计算第一天摘了多少个桃子?
n = 1
i = 0
while i < 10:
if i == 0:
n = 1
print(f'第 {10 - i} 天的桃子个数为:%d' % n)
else:
n = (n + 1) * 2
print(f'第 {10 - i} 天的桃子个数为:%d' % n)
i += 1
# 结果为:
第 10 天的桃子个数为:1
第 9 天的桃子个数为:4
第 8 天的桃子个数为:10
第 7 天的桃子个数为:22
第 6 天的桃子个数为:46
第 5 天的桃子个数为:94
第 4 天的桃子个数为:190
第 3 天的桃子个数为:382
第 2 天的桃子个数为:766
第 1 天的桃子个数为:1534
4、剪刀石头布游戏
import random
d = {1:'石头', 2:'剪刀',3:'布'}
print('------ 石头剪刀布游戏开始 --------
请按下面提示出拳:')
while True:
print('石头【1】 剪刀【2】 布【3】 退出【4】')
num = int(input('请输入你的选项:'))
if 4 == num:break
random_num = random.randint(1,3)
if num == random_num:
res = '平局'
elif random_num - 1 == num or random_num + 2 == num:
res = '您赢了!'
else:
res = '您输了!'
print('您的出拳为:%s,电脑出拳为:%s,%s' %(d[num],d[random_num],res))
# 结果为:
------ 石头剪刀布游戏开始 --------
请按下面提示出拳:
石头【1】 剪刀【2】 布【3】 退出【4】
请输入你的选项:1
您的出拳为:石头,电脑出拳为:石头,平局
石头【1】 剪刀【2】 布【3】 退出【4】
请输入你的选项:2
您的出拳为:剪刀,电脑出拳为:剪刀,平局
石头【1】 剪刀【2】 布【3】 退出【4】
请输入你的选项:3
您的出拳为:布,电脑出拳为:剪刀,您输了!
石头【1】 剪刀【2】 布【3】 退出【4】
请输入你的选项:1
您的出拳为:石头,电脑出拳为:剪刀,您赢了!
石头【1】 剪刀【2】 布【3】 退出【4】
请输入你的选项:4
5、冒泡排序
l = [3, 2, 5, 2, 5, 7, 4, 8, 3, 9, 11, 25, 2, 8]
while True:
n = 0
for i in range(len(l)):
# 一轮比较结束,重新开始
if len(l) - 1 == i: break
if l[i] > l[i + 1]:
# 比较大小,交换位置
l[i], l[i + 1] = l[i + 1], l[i]
print(l)
else:
n += 1
continue
# 所有比较未调整位置,则退出
if len(l) - 1 == n: break
# 结果为:
[2, 3, 7, 4, 8, 3, 11, 25, 2]
[2, 3, 4, 7, 8, 3, 11, 25, 2]
[2, 3, 4, 7, 3, 8, 11, 25, 2]
[2, 3, 4, 7, 3, 8, 11, 2, 25]
[2, 3, 4, 3, 7, 8, 11, 2, 25]
[2, 3, 4, 3, 7, 8, 2, 11, 25]
[2, 3, 3, 4, 7, 8, 2, 11, 25]
[2, 3, 3, 4, 7, 2, 8, 11, 25]
[2, 3, 3, 4, 2, 7, 8, 11, 25]
[2, 3, 3, 2, 4, 7, 8, 11, 25]
[2, 3, 2, 3, 4, 7, 8, 11, 25]
[2, 2, 3, 3, 4, 7, 8, 11, 25]
6、斐波纳挈
n = int((input('请输入一个整数(返回斐波那契数列的前n个数):')))
l = []
i = 0
while i <= n:
if i == 0:
# 为零不输出
i += 1
continue
elif i <= 3:
# 前三个数确定下来
l = [1, 1, 2][:i]
else:
l.append(l[i - 2] + l[i - 3])
i += 1
print(l)
# 结果为:
请输入一个整数(返回斐波那契数列的前n个数):11
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
7、有1 2 3 4 这四个数字,设计程序计算能组成多少个互不相同且无重复数字的3位数?分别是什么?
l = [1, 2, 3, 4]
total = 0
res = []
for o in l:
for p in l:
for q in l:
if o != p and p != q and o != q:
res.append('%d%d%d' % (o, p, q))
total += 1
print('统共有%d组,他们是:' % total)
print(res)
# 结果是:
统共有24组,他们是:
['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']
8、通过函数实现一个计算器,运行程序分别提示用户输入数字1,数字2,然后再提示用户选择 :加【1】 减【2】 乘【3】 除【4】,根据不同的选择完成不同的计算 ,然后返回结果。
def calc(x, y, z):
d = {1: x + y, 2: x - y, 3: x * y, 4: x / y}
return '结果是:'+str(d.get(int(z)))
if __name__ == '__main__':
a = float(input('请输入第一个数:'))
b = float(input('请输入第二个数:'))
c = input('请选择:加【1】,减【2】,乘【3】,除【4】')
print(calc(a, b, c))
# 结果是:
请输入第一个数:2
请输入第二个数:5
请选择:加【1】,减【2】,乘【3】,除【4】3
结果是:10.0
这里没有使用if来判断输入运算符,而是直接使用字典保存了计算逻辑。不过这里有个不符合规范的问题:字典的key不建议使用数值类型(此处只是为了符合题意)。当然,还可以这么玩来容错:
def calc(x, y, z):
d = {'1': x + y, '2': x - y, '3': x * y, '4': x / y}
return '结果是:' + str(d.get(z, '运算符输出错误!'))
# 结果为:
请输入第一个数:2
请输入第二个数:4
请选择:加【1】,减【2】,乘【3】,除【4】+
结果是:运算符输出错误!
9、实现一个注册的流程的函数,调用函数就执行下面要求功能
基本要求:
1、运行程序,提示用户,输入用户名,输入密码,再次确认密码。
2、判读用户名有没有被注册过,如果用户名被注册过了,那么打印结果该用户名已经被注册。
3、用户名没有被注册过,则判断两次输入的密码是否一致,一致的话则注册成功,否则给出对应的提示。
def get_user(name):
'''
:param name:根据传入的用户名判断是否已注册
:return: 已注册返回True,否则返回False
'''
d = ['张三', '李四', '王五']
return True if name in d else False
def check_passwd(pwd, confirm_pwd):
'''
:param pwd:密码
:param confirm_pwd:二次密码
:return: 两次密码相同返回T,否则返回F
'''
return True if pwd == confirm_pwd else False
def reg():
user_name = input('请输入用户名:')
passwd = input('请输入密码:')
confirm_passwd = input('请再次输入密码:')
if get_user(user_name):
print('很抱歉,该用户名已经被注册~')
elif check_passwd(passwd, confirm_passwd):
# 此处可以吧用户信息加入用户列表d中
print('注册成功')
else:
print('密码不一致,请重新输入~')
if __name__ == '__main__':
reg()
# 结果为:
请输入用户名:哈哈
请输入密码:123456
请再次输入密码:123456
注册成功
------------------
请输入用户名:张三
请输入密码:123
请再次输入密码:123
很抱歉,该用户名已经被注册~