1.while 循环结构

特征:减少代码冗余,提升代码效率

语法:

while 条件表达式:
	code1
	code2
	...

1.初始化一个变量

2.写上循环的条件表达式

3.自增自减的变量值

案例1:打印1~100

i = 1
while i<=100:
	# 要执行的逻辑 ... 
	print(i)
	i += 1

"""
初始化一个变量 i

第一次循环:
i <= 100 条件成立,执行循环
直接打印 print(i) => 1
i += 1 => i = 2

第二次循环:	
回到17行,重新回到判断,看一看是否满足条件
2 <= 100 条件成立,执行循环
直接打印 print(i) => 2
i += 1 => i = 3

第三次循环:
回到17行,重新回到判断,看一看是否满足条件
3 <= 100 条件成立,执行循环
直接打印 print(i) => 3
i += 1 => i = 4

...
...
依次类推进行循环 ... 

到什么时候结束?
当打印100 结束之后 
i += 1 => i = 101 回到循环的判断条件中
发现101 <= 100 不满足条件,不成立,不执行循环体代码块
到此为止,循环直接结束.

"""

案例2 : 打印1~100的累加和?1+2+3+4+ …+100 ?

#方法一
total 负责做累加和
total = 0
i = 1
while i<=100:
	total += i
	i+=1

print(total)

"""
# 代码解析:

第一次循环:
1 <= 100 条件为真 , 执行循环
total += i => total = total + i => total = 0 + 1
i+=1 => i=2


第二次循环:
回到条件表达式中进行判断 
2<=100  条件为真 , 执行循环
total += i => total = total + i => total = 0 + 1 + 2
i+=1 => i=3

第三次循环:
回到条件表达式中进行判断 
3<=100  条件为真 , 执行循环
total += i => total = total + i => total = 0 + 1 + 2 + 3
i+=1 => i=4

...
...
依次循环


什么时候结束?
total = 0 + 1 + 2 + 3 + ... + 100
i+=1 => i = 101
回到条件表达式中进行判断 
101 <= 100 条件不成立,不执行循环体;
直接终止循环;

print(total)  5050
"""
'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333 
'''


# 方法二
# 1+2+3+4+ .....+100 ? 用while True 的方式实现;
total = 0 
i = 1
sign = True
while sign:
	total += i
	i+=1
	
	# 手动加上终止的条件
	if i == 101:
		sign = False

print(total)
# 这种情况下就不执行循环了;用这样的方式终止循环;
while False:
	print(111)
2.死循环
while True:
	print(123)

(1.单循环练习:

1.打印一行十个小星星

i = 1
while i <= 10:
	print("★",end="")
	i += 1

2.用一个变量打印出一行十个小星星

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333 
'''

i = 0
strvar = ""
while i<10:
	# 循环10次,拼接10个星星,每循环一次拼接一个星星
	strvar += "★"
	i+=1
print(strvar)

3.打印一行十个小星星 奇数个打印★ 偶数个打印☆

i = 1
while i <= 10:
	if i % 2 == 0:
		print("☆",end='')
	else:
		print("★",end="")
	i += 1

#方法二
print("-----分割线-------")
count = 1
str_var = ""
while count <= 10:
	if count % 2 == 0:
		str_var += "☆"
	else:
		str_var += "★"
	count += 1
print(str_var)

4.一个循环,打印十行十列小星星

#循环100和星星
i = 1
while i <= 100:
	#1.打印小星星
	print("★",end='')
	#2.打印换行
	if i % 10 == 0:
		print()
	i += 1

5.一个循环 打印十行十列隔列变色小星星

#方法一
i = 0
while i < 100:
	if i % 2 == 0:
		print("☆",end="")
	else:
		print("★",end='')
	if i % 10 == 9:
		print()
	i += 1

#方法二
_str_var = ""
count = 1
while count <= 100:
	if count % 2 == 0:
		_str_var += "☆"
	else:
		_str_var += "★"
	if count % 10 == 0:
		_str_var +="\n"
	count += 1
print(_str_var)

6.一个循环 打印十行十列隔行变色小星星

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333 
'''

i = 0
while i < 100:
	#打印星星
	if i // 10 %2 == 0:
		print("☆", end="")
	else:
		print("★",end="")
	if i % 10 == 9:
		print()
	i += 1

(2.pass break continue

1.pass 过 (当不能直接在代码块中写上具体代码时,先用pass占位;)

num = 10
if num == 10:
	pass


i = 0
while i<10:
	pass
	i+=1

2.break 终止当前循环,只能用在循环当中

# 打印1~10 ,遇到5就终止循环
# 单循环 (终止当前循环)
i = 1
while i<=10:
	
	if i == 5:
		break
		
	print(i)
	
	i+=1

多循环 (终止当前循环)

i = 0 
while i<3:
	j = 0
	while j<3:
		if j ==2:
			break
		print(i,j)
		j+=1
	i+=1
# 不能再循环外使用break
"""
if 5==5:
	print(111)
	break
"""

3.continue 跳过当前循环,从下一次开始 ,只能用在循环当中

打印1 ~ 10 不包括5

i = 1
while i<=10:
	
	if i == 5:
		# 手动加1 , 防止跳过下面代码,忽略自增形成死循环;
		i+=1
		continue
	print(i)
	i+=1

打印1~100 所有不含有4的数字;

"""
// 地板除可以取一个数的高位
%  取余  可以取一个数的低位

任意数 // n 会产生n个相同的数字
任意数 %  n 取值范围是0~(n-1)
"""
# 方法一
i = 1
while i<=100:
	
	if i % 10 == 4 or i // 10 == 4:
		# 手动自增1,防止死循环
		i+=1
		continue
	print(i)
	i+=1
	

# 方法二 in 
i = 1
while i<=100:
	strvar = str(i)
	if '4' in strvar:
		i+=1
		continue
		
	print(i)
	i+=1

(3.双层循环练习

1.十行十列小星星

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333 
'''

#j动1次,i动10次,外层循环动的慢.内层循环动的快
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 时,在内存循环,循环了10次 ☆
当j = 1 时,在内层循环,循环了10次 ★
"""
print("------分割线------")
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控制行 里层的j控制列
当前j跟当前行数有关系,不能大于当前行 所以j <= i
"""
#方法一(正序 1~9)
i = 1
while i <= 9:
	j = 1
	while j <= i:
		#字符串的格式化 让最后的乘积占用2位,据右边显示;
		print("%s*%s =%2s"%(i,j,i*j),end=" ")
		j += 1
	print()
	i += 1
"""
'字符串'%(值1,值2,值3,......)
%s 字符串占位符
res = "%s * %s = ?"% (5,6)
print(res)
"""
# 方法二(倒序 9 ~1)
i = 9
while i >= 1:
	#字符串的格式化 让最后的乘积占用2位,据右边显示;
	j = 1
	while j <= i:
		#字符串的格式化 让最后的乘积占用2位,据右边显示;
		print("%d*%d=%2d"% (i,j,i*j),end=' ')
		j += 1
	#打印换行
	print()
	i -= 1

# 方法三
i = 1
while i <= 9:
	#(1)先打印空格
	k = 9 - i
	while k > 0:
#	"""打印空格"""
		print("      ",end="")
		k -= 1

	#print("       "*(9-i),end="")
	#(2)打印表达式
	j = 1
	while j <= i:
		print("%d*%d=%2d"% (i,j,i*j),end="")
		j += 1
	#(3)打印换行
	print()
	i +=1

print("-----分割线-----")
#方法四
i = 9
while i > 0:
	k = 9 - i
	while k > 0:
		print("         ",end='')
		k -= 1
	# print("       "*(9-i),end='')
	# (2) 打印表达式
	j = 1
	while j <= i:
		#字符串的格式化 让最后的乘积占用2位,据右边显示;
		print("%d*%d = %2d"% (i,j,i*j),end=' ')
		j += 1
	#打印换行
	print()
	i -= 1

5 求吉利数字100 ~ 999 666 888 111 222 333 444 … 123 789 567 987 321 543 210

"""
// 地板除可以获取一个数的高位
% 取余 可以获取一个数的低位

98 98 % 10 => 8
98 98 // 10 => 9

678
个位 = 678 % 10 => 8
十位 = 678 // 10 %10 => 7
百位 = 678 // 100 => 6
"""
#方法一
i = 100
while i <= 999:
	gewei = i % 10
	shiwei = i // 10 % 10
	baiwei = i // 100

	#gewei = shiwei = baiwei 三者相同
	if shiwei == gewei and shiwei ==baiwei:
		print(i)

	#678
	if shiwei == gewei -1 and shiwei == baiwei + 1:
		print(i)

	#876
	if shiwei == gewei + 1 and shiwei == baiwei - 1:
		print(i)
	i += 1

#方法二 字符串形式写
print("-----分割线-------")
i = 100
while i<= 999:
	num = str(i)
	#"987"
	geiwei = int(num[-1]) #7
	shiwei = int(num[1]) #8
	baiwei = int(num[0]) #9

	if shiwei == gewei and shiwei == baiwei:
		print(i)

	if shiwei == gewei - 1 and shiwei == baiwei + 1:
		print(i)

	if shiwei == gewei + 1 and shiwei == baiwei - 1:
		print(i)

	i += 1
经典题: 百钱买百鸡

公鸡,母鸡,小鸡,公鸡1块钱一只,母鸡3块钱一只,小鸡是5毛钱一只,问100块钱买100只鸡,有多少种买法
穷举法: 一个一个拿出来试

x [1,2]
y [3,4]
z [5,6]

满足 x+y+z = 10

1 + 3 + 5 = 9
1 + 3 + 6 = 10 ok

1 + 4 + 5 = 10 ok
1 + 4 + 6 = 11 

2 + 3 + 5 = 10 ok
2 + 3 + 6 = 11

2 + 4 + 5 = 11
2 + 4 + 6 = 12

公鸡x只,母鸡y只,小鸡z只

x+y+z = 100 #一百只鸡
x+3+y*1+0.5*z = 100

两个条件同时满足

x = 0
total = 0
while x<=100:
	y = 0
	while y<= 33:
		z = 0
		while z <= 100:
			if(x+y+z == 100) and (x+3*y+0.5*z == 100):
				total += 1
			z += 1
		y += 1
	x += 1
print(total)
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐