zoukankan      html  css  js  c++  java
  • 分支和循环

    基础语法

    程序控制

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

    分支

    单分支

    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子句。

  • 相关阅读:
    Oracle学习笔记<5>
    Oracle学习笔记<4>
    fabric动态获取远程目录列表
    fabric查看本地与远程主机信息
    fabric安装使用
    pexpect实现远程操作
    pexpect的pxssh类实现远程操作
    Most Distant Point from the Sea
    Art Gallery
    Rotating Scoreboard(半平面交模板题)
  • 原文地址:https://www.cnblogs.com/d1anlong/p/11868780.html
Copyright © 2011-2022 走看看