zoukankan      html  css  js  c++  java
  • day6. while双项循环及for循环

    一、双向循环经典练习

    1.打印十行十列小星星(2个循环)

    # j 外循环用来控制行数
    j = 0
    while j<10:
    
        # 打印一行十个星星
        i = 0
        while i <10:
            # 写上循环的逻辑
            print("*",end="")
            i+=1
            
        # 打印换行
        print()
    
    
        j+=1
    View Code

    2.打印十行十列小星星(隔列换色小星星,两个循环)

    i = 0
    while i<10:
        # 打印隔列换色星星
        j = 0
        while j < 10:
            if j % 2 == 0:
                print("",end="")
            else:
                print("",end="")
            j+=1
    
        # 打印换行
        print()
        i+=1
    View Code

    3.打印十行十列小星星(隔行换色小星星,两个循环)

    """外层循环动一次,内层循环动10次,外层循环动的慢,内层循环动的快"""
    i = 0
    while i<10:
        # 打印隔列换色星星
        j = 0
        while j < 10:
            if i % 2 == 0:
                print("",end="")
            else:
                print("",end="")
            j+=1
    
        # 打印换行
        print()
        i+=1
    View Code

    4.99乘法表

    方式一

    # i控制行
    i = 1
    while i <= 9:
        # j 控制列
        # 打印表达式
        j = 1
        while j<=i:
            # 打印表达式 谁*谁=谁 %2d 默认居右显示
            print("%d*%d=%2d " % (i,j,i*j),end="")
            j+=1
        
        # 打印换行
        print()
        i+=1
    View Code

    方式二

    print("<=====>")
    # i控制行
    i = 9
    while i >= 1:
        # j 控制列
        # 打印表达式
        j = 1
        while j<=i:
            # 打印表达式 谁*谁=谁 %2d 默认居右显示
            print("%d*%d=%2d " % (i,j,i*j),end="")
            j+=1
        
        # 打印换行
        print()
        i-=1
    View Code

    5. 99乘法表按方式一纵轴向右折叠

    i = 1
    while i<=9:
        
        # 1.打印空格
        """
        第一行循环8组空格 8~1 是循环8组空格
        第二行循环7组空格 7~1 是循环7组空格
        ...
        第八行循环1组空格 1 是循环1组空格
        第九行 不需要空格 所以 k>0
        """
        k = 9 - i
        while k>0:
            print("       " , end="")
            k -= 1 
    
        # 2.打印表达式 
        """"""
        j = 1
        while j<=i:
            # 打印表达式 谁*谁=谁 %2d 默认居右显示
            print("%d*%d=%2d " % (i,j,i*j),end="")
            j+=1
            
        # 3.打印换行
        print()
        
        i+=1
    View Code

    6. 99乘法表按方式二纵轴向右折叠

    i = 9
    while i>=1:
        
        # 1.打印空格
        """
        第一行循环8组空格 8~1 是循环8组空格
        第二行循环7组空格 7~1 是循环7组空格
        ...
        第八行循环1组空格 1 是循环1组空格
        第九行 不需要空格 所以 k>0
        """
        k = 9 - i
        while k>0:
            print("       " , end="")
            k -= 1 
    
        # 2.打印表达式 
        j = 1
        while j<=i:
            # 打印表达式 谁*谁=谁 %2d 默认居右显示
            print("%d*%d=%2d " % (i,j,i*j),end="")
            j+=1
            
        # 3.打印换行
        print()
        
        i-=1
    View Code

    7. 求吉利数字100 ~ 999  666 888 111 222 333  444 ... 123 789 567 765 432

    方法一

    """
    个位:987 % 10 = 7
    十位:987 // 10 % 10 = 8
    百位:987 // 100 = 9
    """
    i = 100
    while i<1000:
        gewei = i % 10
        shiwei = i // 10 % 10
        baiwei = i // 100
        
        if gewei == shiwei and shiwei == baiwei:
            print(i)
            
        #123
        elif shiwei  == gewei-1 and  shiwei == baiwei+1:
            print(i)
            
        #765
        elif shiwei == gewei+1 and shiwei == baiwei-1:
            print(i)
        i+=1
    View Code

    方法二

    i = 100
    while i<1000:
        strvar = str(i) # "123"
        baiwei = int(strvar[0])
        shiwei = int(strvar[1])
        gewei = int(strvar[-1])
        if gewei == shiwei and shiwei == baiwei:
            print(i)
            
        #123
        elif shiwei  == gewei-1 and  shiwei == baiwei+1:
            print(i)
            
        #765
        elif shiwei == gewei+1 and shiwei == baiwei-1:
            print(i)
        i+=1
    View Code

    8.百钱买百鸡

    """
    公鸡x 母鸡y 小鸡z
    公鸡1块钱1只,母鸡3块钱一只,小鸡5毛钱一只
    问: 用100块钱买100只鸡,有多少种买法?
    """
    """
    穷举法:把数拿出来,一个一个试
    x{1,2}
    y{3,4}
    z{5,6}
    x+y+z = 10 列出来
    1+3+5 = 9 不要
    1+3+6 = 10 要
    1+4+5 = 10 要
    1+4+6 = 11 不要
    
    2 + 3 + 5 = 10 要
    2 + 3 + 6 = 11 不要
    2 + 4 + 5 = 11 不要
    2 + 4 + 6 = 12 不要
    """
    
    """
    # 两个条件同时满足
    x+y+z = 100
    x*1 + y*3 + z*0.5 = 100
    """
    
    # 公鸡
    x = 0
    count = 0
    while x <= 100:
    
        # y母鸡
        y = 0
        while y <= 33:
            
            # z小鸡
            z = 0
            while z <= 100:
                if x+y+z == 100 and x*1 + y*3 + z*0.5 == 100:
                    count += 1
                    print(x,y,z)
                z+=1
        
            y+=1
    
        x += 1
    
    print(count)
    View Code

    二、pass

    if 10 == 10:
        print(123)
        
    while True:
        pass

    三、break 终止当前循环

    1、打印1~10 遇到5就终止循环

    i = 1
    while i <=10 :
        if i == 5:
            break
        print(i)
        i+=1
    View Code

    例:

    # break 终止的是当前循环
    i = 1
    while i <= 3:
        j = 1
        while j<=3:
            if j == 2:
                break
            print(i,j)
            j+=1
        i+=1
    View Code

    四、continue 跳过当前循环,从下一次循环开始

    1、打印1~10 跳过5

    i = 1
    while i<=10:
    
        if i == 5:
            # 需手动自增加1. 当执行continue时,后面的代码不执行,跳到while循环的条件判断处,会造成死循环
            i+=1
            continue
        print(i)
    
        i+=1
    View Code

    2、打印1~ 100 所有不含有4的数字

    方式一

    """
    //可以取到一个数的高位
    % 可以取到一个数的低位
    46 // 10 = 4
    46 % 10 = 6
    """
    i = 1
    while i<=100:
        if i // 10 == 4 or i % 10 == 4:
            i+=1
            continue
        print(i)
        i+=1
    View Code

    方式二

    i = 1
    while i <= 100:
        strvar = str(i)
        if "4" in strvar:
            i+=1
            continue
    
        print(i)
        i+=1

    五、for 循环

    # for主要用于遍历数据而提出,while在遍历数据时,有局限性
    # for 变量 in 可迭代对象:
    #    code1
    #    code2
    # 可迭代对象(容器类型数据,range对象,迭代器)
    # 遍历字符串
    container = "today is a good day"
    # 遍历列表
    container = ["jack","kxq","aaa","bbb"]
    # 遍历元组
    container = (1,2,3,45)
    # 遍历集合
    container = {"jack","kxq","xiaoming","aaa","bbb"}
    # 遍历字典 (遍历字典时,只遍历键)
    container = {"ww":"one","msr":"two","mh":"three"}
    
    
    for i in container:
        print(i)
    
    
    # 遍历不等长的二级容器
    container = [["jack","kxq","aaa","bbb"],("ooo","ppp")]
    
    for i in container:
        # print(i)
        for j in i:
            print(j)
    View Code

    1、变量的解包

    a,b = 1,2
    a,b = [3,4]
    a,b = {"a":5,"b":6}
    print(a,b)

    2、遍历等长的二级容器

    container = [("a","b","c") , ("aa","bb","cc") , ("aaa","bbb","ccc")  ]
    for a,b,c in container:
        print(a,b,c)
    # a,b,c = ("a","b","c")
    # a,b,c = ("aa","bb","cc")
    # a,b,c = ("aaa","bbb","ccc") 

    3、range对象

    """
    range(开始值,结束值,步长)
    结束值本身取不到,取到结束值之前的那个数
    """
    # 只有一个值  0~9
    for i in range(10):
        print(i)
    
    # 只有两个值
    for i in range(3,11):
        print(i)
    
    # 只有三个值
    for i in range(1,10,3):
        print(i)  # 1,4,7
    #1 (1+3)=>4  (4+3)=>7 (7+3)=>10取不到
    
    # 倒序打印10 ~ 1
    for i in range(10,0,-1):
        print(i)
    # 10 9 8 7 6 .... 1
    View Code

    总结

    """
    while : 较为复杂的逻辑
    for   : 数据的遍历
    while 和 for 部分代码可以互相转换
    """

    六、练习 

    '''
    1.利用if语句写出猜大小的游戏:
        设定一个理想数字比如:66,
        让用户三次机会猜数字,如果比66大,则显示猜测的结果大了;
        如果比66小,则显示猜测的结果小了;
        只有等于66,显示猜测结果正确,退出循环。
        最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力’。
    
    2.使用while循环分别打印字符串s="asdfer"中每个元素
    
    3.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb,    
    例如:asb, bsb,csb,...gsb。
    
    4.完成要求:
    用户可持续输入(while循环)
        输入A,则显示走大路回家,然后在让用户进一步选择:
            是选择公交车,还是步行?
            选择公交车,显示10分钟到家,并退出整个程序。
            选择步行,显示20分钟到家,并退出整个程序。
        输入B,
            则显示走小路回家,并退出整个程序。
        输入C,
            则显示绕道回家,然后在让用户进一步选择:
            是选择游戏厅玩会,还是网吧?
                选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
                选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。
                
    4.写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和?
                
    5.(升级题)打印菱形小星星
    '''
         *
        ***
       *****
      *******
     *********
    ***********
    ***********
     *********
      *******
       *****
        ***
         *
    '''
    '''
    """
    num = 66
    times = 1
    while times <= 3:
    
        num = input("请输入猜测的数字")
        if num.isdecimal():
            num = int(num)
            if num > 66:
                print("猜测的结果大了")
            elif num < 66:
                print("猜测的结果小了")
            else:
                print("猜对了")
                break
        else:
            print("输入有误")
            
        if times == 3:
            print("都没猜对,继续努力")
        
        
        times +=1
    """
        
    """
    num = 66
    times = 1
    sign = True
    while sign:
    
        num = input("请输入猜测的数字")
        if num.isdecimal():
            num = int(num)
            if num > 66:
                print("猜测的结果大了")
            elif num < 66:
                print("猜测的结果小了")
            else:
                print("猜对了")
                break
        else:
            print("输入有误")
            
        if times == 3:
            print("都没猜对,继续努力")
            sign = False
        
        
        times +=1
    """
    1
    # 2.使用while循环分别打印字符串s="asdfer"中每个元素
    s="asdfer"
    i = 0
    while i < len(s):
        print(s[i])
        i+=1
    2
    # 3.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb,    
    # 例如:asb, bsb,csb,...gsb。
    s = "abcdefg"
    for i in s:
        print(i + "sb")
    3
    """
    4.完成要求:
    用户可持续输入(while循环)
        输入A,则显示走大路回家,然后在让用户进一步选择:
            是选择公交车,还是步行?
            选择公交车,显示10分钟到家,并退出整个程序。
            选择步行,显示20分钟到家,并退出整个程序。
        输入B,
            则显示走小路回家,并退出整个程序。
        输入C,
            则显示绕道回家,然后在让用户进一步选择:
            是选择游戏厅玩会,还是网吧?
                选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
                选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。
    """
    """
    sign = True
    while sign:
        choice = input("请输入A,B,C选项")
        if choice.upper() == "A":
            choice2 = input("是选择公交车,还是步行?")
            if choice2 == "公交车":
                print("10分钟到家")
                break
            elif choice2 == "步行":
                print("20分钟到家")
                break
                
                
        elif choice.upper() == "B":
            print("走小路回家")
            break
        elif choice.upper() == "C":
            print("绕道回家")
            choice = input("是选择游戏厅玩会,还是网吧?")
            if choice == "游戏厅":
                print("一个半小时到家,爸爸在家,拿棍等你。")
            elif choice == "网吧":
                print("两个小时到家,妈妈已做好了战斗准备。")
    """
    4
    i = 1
    total = 0
    while i < 100:
    
        if i == 88:
            i+=1
            continue
    
        if i % 2 == 0:
            total -= i
        else:
            total += i
        i+=1
        
    print(total)
    
    total = 0
    for i in range(1,100):
        if i == 88 :
            continue
        if i % 2 == 0:
            total -= i
        else:
            total += i
    print(total)
    4
    '''
         *
        ***
       *****
      *******
     *********
    ***********
    
    ***********
     *********
      *******
       *****
        ***
         *
    '''
    
    """
    n = 11
    13 => 7
    11 => 6
    9  => 5
    ...
    
    n  => n // 2 + 1
    星星 和 行数之间的关系  hang = n // 2 + 1
    
    1 => 5
    2 => 4
    3 => 3
    4 => 2
    5 => 1
    6 => 0
    
    当前行i 和 空格之间的关系 kongge = hang - i
    空格数 = 总行数 - 当前行
    
    1 -> 1
    2 -> 3
    3 -> 5
    4 -> 7
    5 -> 9
    
    当前行i 和 星星之间的关系 xingxing = 2*i - 1
    
    """
    n = 13
    hang = n // 2 + 1
    i = 1
    while i <= hang: # 1 ~ 6
        # 打印空格
        print(" " *(hang - i),end="" )
        
        # 打印星星 
        print("*" * (2*i - 1),end="")
        
        # 打印换行
        print()
        i+=1
    
    i = hang
    while i > 0:
        # 打印空格
        print(" " *(hang - i),end="" )
        
        # 打印星星 
        print("*" * (2*i - 1),end="")
        
        # 打印换行
        print()
        i-=1
    
    
    
    
    n = 11
    hang = n // 2 + 1
    i = 1
    while i <= hang: # 1 ~ 6
        # 打印空格
        k = hang - i
        while k>0:
            print(" ",end="")
            k-=1
        
        # 打印星星 
        xingxing = 2*i - 1
        j = 1
        while j <=xingxing:
            print("*",end="")
            j+=1
        
        # 打印换行
        print()
        i+=1
    
    i = hang
    while i > 0:
        # 打印空格
        k = hang - i
        while k>0:
            print(" ",end="")
            k-=1
        
        # 打印星星 
        xingxing = 2*i - 1
        j = 1
        while j <=xingxing:
            print("*",end="")
            j+=1
        
        # 打印换行
        print()
        i-=1
    
    
    
    
    
    print(abs(-1))
    
    # 6 5 4 3 2 1 1 2 3 4 5 6 
    # 12
    # abs(-6) = 6
    
    """
    # 行数和空格之间的关系
    -6 -> 5
    -5 -> 4
    -4 -> 3
    -3 -> 2
    -2 -> 1
    -1 -> 0
    0  -> 跳过
    
    # 行数 和 星星之间的关系
    n = 11
    -6 -> 1
    -5 -> 3
    -4 -> 5
    
    13 - abs(i) * 2
    13 - 12 = 1
    13 - 10 = 3
    13 - 8  = 5
    """
    
    # abs用来算绝对值
    n = 29
    hang = n // 2 + 1
    
    for i in range(-hang,hang+1):
        
        if i == 0:
            continue
            
        # 打印空格
        print(" " * (abs(i)-1) , end="")
        # 打印星星
        print("*" * (n+2 - abs(i) * 2) )
    5
  • 相关阅读:
    处理客户端无法及时更新js、css
    关于JQ判断单选复选被选中
    一路风景,一路欣赏,一路有你
    Adobe Dreamweaver CC 2015新功能
    Eclipse导出APK文件报错 android lint problem
    swift2.0 计算圆面积
    zendStudio连接远程服务器报错java.net.SocketException
    IOS tableview 消除 分割线短 15 像素 ios8方法 swift版
    应用之间调用 UIApplication类的OpenURL方法
    iOS8 今日扩展
  • 原文地址:https://www.cnblogs.com/kongxiangqun/p/13281992.html
Copyright © 2011-2022 走看看