python_base_day005

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
很抱歉,该用户名已经被注册~
原文地址:https://www.cnblogs.com/wjlv/p/12159056.html