基础语法
程序控制
- 顺序:按照先后顺序一条条执行
- 分支:根据不同的情况判断,条件满足执行某条件下的语句
- 循环:条件满足就反复执行,不满足就不执行或不再执行
分支
单分支
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子句。