程序控制
程序控制
标签(空格分隔): python
1,程序控制类型
- 顺序
按照先后顺序一条一条执行 - 分支
根据不同的情况判断,条件满足执行某条件下的语句 - 循环
条件满足就反复执行,不满足就不执行或不再执行
2,单分支
好的编程习惯
当我有写新功能的时候,先可以用pass来搭架子,然后再来写功能
if 真:
pass # TODO
-
condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价
-
if 语句这行最后,会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进
- if、for、def、class 等关键字后都可以跟代码块
- 这些关键字后面,如果有一条语句,也可以跟在这一行的后面。例如:if 1>2: pass
英文单词:
positive 正数
zero 零
negative 负数
3,多分支
多分支结构,只要有一个分支被执行,其他分支都不会被执行
前一个条件被测试过,下一个条件相当于隐含着这个条件
x = input('please input a num: >>')
if int(x) > 5:
print("{} is 大于 5".format(x))
elif int(x) == 5:
print("{} is 等于 5".format(x))
elif int(x) < 5:
print("{} is 小于 5".format(x))
4,while循环
while循环多用于死循环,或者不明确知道循环次数的场景
while cond:
block
while True: # 死循环
pass
a = 10
while a: # 条件满足则进入循环
print(a)
a -= 1
- 上例执行结果是什么?
10 到 1 - 会不会打印出0?要注意边界的分析
不会打印出0,因为0是假 - 如果a=-10可以吗?如何改?回忆一下,False等价是什么?
x = input()
while x != 'quit': # 进入循环体
print("~~~{}~~~".format(x))
x = input() # 卡住了,阻塞
5,for语句
for element in iteratable: # 可迭代对象中有元素可以迭代,进入循环体
block
for i in range(0, 10):
print(i)
| 内建函数 | 函数签名 | 说明 |
|---|---|---|
| range | range(stop) range(start, stop[,step]) | 返回惰性的对象可以生成一个序列,遍历它就可以得到这个序列的一个个元素 前包后不包 |
# 计数器
for i in range(0):
print(i)
print('---------')
for i in range(-2): #range(负数) 相当于 range(0)
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)
for i in range(10):
if i % 2 != 1:
print("{} is oushu".format(i))
else:
print("{} is jishu".format(i))
优化原则:循环里面尽量减少迭代的次数
练习:
从1开始,到1000为止,请你把7的倍数,前18个打出来 for while不限
# while循环
# 第一种
count = 1
start = 7
while True:
print(count,start)
if count == 18:
break
count += 1
start += 7
# 第二种:
count=1
for i in range(7, 1000, 7):
print(count, i)
count += 1
if count > 18:
break
# 计数器
for i in range(18):
print((i+1),(i+1)*7)
# for循环
for i in range(1,1000):
if i % 7:
continue
else:
if i <= 18 * 7:
print(i)
6,for循环的else语句
能不能执行到else子句,在于循环有没有循环完
如果循环正常结束,else子句会被执行,即使是可迭代对象没有什么元素可迭代
for i in range(3):
print(i)
else:
print("end...")
0
1
2
end
# 循环没有循环完,所以不打印end...
for i in range(9):
if i >3:
break
print(i)
else:
print('end...')
0
1
2
3
# 循环已经循环完了,所以会打印end...
for i in range(9):
if i >3:
continue
print(i)
else:
print('end...')
0
1
2
3
end...
7,continue
跳过当前循环的当次循环,继续下一次循环
for i in range(0, 10):
if i % 2 != 0 : continue
print(i)
for i in range(10):
if i % 2 != 0 :
continue
print(i)
for i in range(10):
if i & 1: continue
print(i)
8,break
结束当前循环
练习:计算1000以内的,从7开始,被7整除的前15个正整数(for循环)
# 计算1000以内的被7整除的前15个正整数
count = 0
for i in range(7, 1000, 7):
print(i)
count += 1
if count >= 15:
print(count)
break
总结:
- continue和break是循环的控制语句,只影响当前循环,包括while和for循环
- 如果循环嵌套,continue和break也只影响语句所在的那一层循环
- continue和break只影响循环,所以if cond: break 不是跳出if,而是终止if外的break所在的循环体
- 分支和循环结构可以嵌套使用,也可以嵌套多层
9,三元表达式
value = input('')
print('empty') if value == '' else print(value)
value = input(">>")
print("empty" if not value else value)
print(value if value else "empty")
print('empty' if value == '' else value)
练习:
1. 打印九九乘法表
for i in range(1, 10):
for j in range(1, 10):
if i >= j:
print('{}*{}={}'.format(j, i, i*j), end='\t')
print()
2. 用户登陆验证
- 用户依次输入用户和密码,然后提交验证
- 用户不存在、密码错误,都显示用户名和密码错误提示
- 错误3次,则退出程序
- 验证成功则显示登陆信息
count = 0
while True:
user = input("user:")
passwd = input("passwd:")
if user == "admin" and passwd == "admin":
print("welcome to python")
break
else:
print("user and passwd error")
count += 1
if count == 3:
print("passwd input error 3 times,lock for a day")
break
else:
continue
输入三次错误后,请输入验证码(输完验证码后又恢复三次登录机会)
count = 0
while True:
user = input('user:')
passwd = input('passwd:')
if user == 'admin' and passwd == 'admin':
print('login success')
break
else:
print('user or passwd failed')
count += 1
if count >= 3:
yanzheng_num = input('please input yanzheng num')
if yanzheng_num == '100':
count = 0
else:
print('yanzheng failed')
print('user and passwd input failed than three times, bye bye')
break

浙公网安备 33010602011771号