程序控制

程序控制

标签(空格分隔): 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
posted @ 2022-12-21 14:00  yao-yuan-ge  阅读(177)  评论(0)    收藏  举报