分支和循环

基础语法

程序控制

  • 顺序:按照先后顺序一条条执行
  • 分支:根据不同的情况判断,条件满足执行某条件下的语句
  • 循环:条件满足就反复执行,不满足就不执行或不再执行

分支

单分支

if condition
	代码块

if	1 < 2:  # if True:
	print('1 less than 2') # 代码块
  • condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价
  • if语句这行最后会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进
    • if、for、def、class等关键字后面都可以跟代码块
    • 这些关键后面,如果有一条语句,也可以跟在这一行后面。例如 if 1>2: pass

多分支

if condition1:
	代码块1
elif condition2:
	代码块2
elif condition3:
	代码块3
......
else:
	代码块
	
a = 5
if a<0:
	print('negative')
elif a==0: # 相当于 a >= 0
	print('zero')
else: # 相当于 a > 0
	print('positive')
  • 多分支结构,只要有一个分支被执行,其他分支都不会被执行
  • 前一个条件被测试过,下一个条件相当于隐含着这个条件

分支嵌套

score = 80
if score<0:
	print('wrong')
else: # score >=0
	if score==0:
		print('egg')
	elif score <= 100: # score > 0
		print('right')
	else: # score > 100
		print('too big')

分支和循环结构可以嵌套使用,可以嵌套多层。


循环

使用while或for语句,可以循环嵌套。

while语句

while cond:
	block
	
while True: # 死循环
	pass
	
a = 10
while a: # 条件满足则进入循环
	print(a)
	a -= 1

执行结果是什么?
为什么?
会不会出现0?要注意边界的分析。
如果flag=-10可以吗?如何改?
回忆一下,False等价是什么?

for语句

for element in iteratable: # 可迭代对象中有元素可以迭代,进入循环体。
	block
	
for i in range(0,10):
	print(i)
# 计数器
for i in range(0):
	print(i)
	print('---------')
for i in range(-2):
	print(i)
	print('---------')
for i in range(1):
	print(i)

range(i),i大于0,相当于计数器

练习:

  • 打印1到10
  • 打印10以内的奇数
  • 打印10以内的偶数
  • 倒着打印10以内的奇数或偶数
# 打印偶数
for i in range(0, 10):
	if i % 2 == 0 :
	print(i)
	
for i in range(0, 10, 2):
	print(i)
	
# 打印奇数
for i in range(0, 10):
	if i % 2 != 0 :
	print(i)
	
for i in range(1, 10, 2):
	print(i)
	
# 倒着打印
for i in range(8, -1 , -2):
	print(i)

continue
跳过当前循环的当次循环,继续下一次循环

for i in range(0, 10):
	if i % 2 != 0 : continue
	print(i)
	
for i in range(0, 10):
	if i % 2 != 0 :
		continue
	print(i)
	
for i in range(0, 10):
	if i & 1: continue
	print(i)

break
结束当前循环
练习:计算1000以内的被7整除的前20个正整数(for循环)

# 计算1000以内的被7整除的前20个正整数
count = 0
for i in range(7, 1000, 7):
	print(i)
	count += 1
	if count >= 20:
		print(count)
		break

总结

  • continue和break是循环的控制语句,只影响当前循环,包括while、for循环
  • 如果循环嵌套,continue和break也只影响语句所在的那一层循环
  • continue和break 只影响循环,所以 if cond: break不是跳出if,而是终止if外的break所在的循环

循环练习
1、给定一个不超过5位的正整数,判断该数的位数,依次打印出万位、千位、百位、十位、个位的数字
在这里插入图片描述

c = int('54321')

x = c // 10000
y = c % 10000
print(x, y)

x = y // 1000
y = y % 1000
print(x, y)

x = y // 100
y = y % 100
print(x, y)

x = y // 10
y = y % 10
print(x, y)

x = y // 1
y = y % 1
print(x, y)


每一趟中,整除就能获得最高位置的数,取模就能获得出去最高位的数的剩余数字,且取模后的数字作为下一趟的待处
理数字。
c = 54321 w = 10000
第一趟 out = c // w c = c % w w = w // 10
第二趟 out = c // w c = c % w w = w // 10
......
c = int('54321')
w = 10000

for i in range(5):
	print(c // w)
	c %= w
	w //= 10

2、给定一个不超过5位的正整数,判断该数是几位数,依次从万位打印到个位的数字
思路:
用上面的程序处理,从左到右处理数据,遇到0则长度减1,遇到第一个非0数字才开始打印并不再减

c = int('54001') # 00451, 01230
w = 10000 # 拿10000来试
length = 5 # 假设长度为5

flag = False # 开关量,打标记

while w:
	x = c // w
	if not flag:
		if x: # 找到第一个非0数字,从此开始打印
		flag = True
	else:
		length -= 1
	if flag:
		print(x)
	c = c % w
	w //= 10
print('The length of number is', length)

else子句
如果循环正常结束,else子句会被执行

for i in range(0):
	pass
else:
	print('ok')
	
for i in range(0,10):
	break
else:
	print('ok')
	
for i in range(0,10):
	continue
else:
	print('ok')

有上例可知,一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句。哪怕是range(0)也可以执行else子句。

原文地址:https://www.cnblogs.com/d1anlong/p/11868780.html