• Python 初级 6 循环 (二)


    一、复习

    1 for循环

    for looper in [1, 2, 3, 4]:
        print("hello")

    1) 每次循环开始,会依次把列表中的数按顺序赋值给looper,第一次looper为1,第二次为2,第三次为3,第四次为4

    2) 每赋一次值,就会把下面指令块的所有工作执行一遍,这个指令块也叫循环体

    3) 每次执行完后,变量looper会赋上列表中下一个值,直到赋完为止

    2 break跳出

    3 range()函数

    1)range(1, 5)表示的为列表[1, 2, 3, 4],右边的5表示边界,不是具体的值

    2)range通常我们写成range(0, 4), 表示列表[0,1, 2, 3],这也是计算机通常表示数的方法,从0这个具体的数开始,到边界4结束(不包括边界4)一共有4个数

    3) range简化版,range(4)即表示range(0, 4)

    4 字符串格式化:占位符

    print("{},{}".format(1, 2))

    控制占多少个字符的:2表示占用2个字符的位置

    比如

    print("{:1},{:2},{:3}".format(1, 2, 3))

    分别表示占用1个字符,2个字符,3个字符

     

    二、练习:

    1、试着打印一个长方形:

    ********

    *           *

    *           *

    ********

    方法:

    步骤1:

    打印出4行:

    for i in range(4):
        print("*")

    效果如下图:

    *
    *
    *
    *

    步骤2:

    打印出一行中的8列:
    text = ""
    for j in range(8):
        text += "*"
    print(text)

    效果如下图:

    ********

    步骤3:

    将打印行与打印列的合并起来:

    for i in range(4):
        text = ""
        for j in range(8):
            text += "*"
        print(text)
    打印出来的效果如下图:
    ********
    ********
    ********
    ********
     

    步骤4:

    观察步骤3与最终实现的差距,发现在for i in range中第0行和第3行是打印全部的*,第一行和第2行中for j in range的第0列和第7列打印,修改如下:
    for i in range(4):
        text = ""
        for j in range(8):
            if i == 0 or i== 3:
                text += "*"
            else:
                if j == 0 or j==7:
                    text += "*"
        print(text)

    效果如下:

    ********
    **
    **
    ********
     

    步骤5:

    观察步骤4发现,之所以把第7列的打到了第1列,是因为中间有空格没有考虑,即如果没有打印*号时,需打印空格,修改如下:
    for i in range(4):
        text = ""
        for j in range(8):
            if i == 0 or i== 3:
                text += "*"
            else:
                if j == 0 or j==7:
                    text += "*"
                else:
                    text += " "
        print(text)

    成功,效果如下:

    ********
    *      *
    *      *
    ********

    步骤6:

    拓展,将常数4行8列变成变量:然后最后一行与最后一列的判断需要用行和列减1来替换,代码如下:
    row = 4
    col = 8
    for i in range(row):
        text = ""
        for j in range(col):
            if i == 0 or i== row-1:
                text += "*"
            else:
                if j == 0 or j==col-1:
                    text += "*"
                else:
                    text += " "
        print(text)

    步骤7:

    拓展,将变量通过输入完成

    row = int(input("请输入长方形的行数:"))
    col = int(input("请输入长方形的列数:"))
    for i in range(row):
        text = ""
        for j in range(col):
            if i == 0 or i== row-1:
                text += "*"
            else:
                if j == 0 or j==col-1:
                    text += "*"
                else:
                    text += " "
        print(text)
    最终效果图:
    请输入长方形的行数:8
    请输入长方形的列数:16
    ****************
    *              *
    *              *
    *              *
    *              *
    *              *
    *              *
    ****************

    2、试着打印一个直角三角形:

    *

    ***

    *****

    *******

    步骤一:

    最后一行是7个*,有4行,因此可仿照前面打印出4行7列的图形出来

    for i in range(4):
        text = ""
        for j in range(7):
            text += "*"
        print(text)
    效果如下:
    *******
    *******
    *******
    *******

    步骤二:

    考虑要求的图形:在我们的for i in range(4)中
    第0行为1个*,1 + 0 * 2 = 1
    第1行为3个*,1 + 1 * 2 = 3
    第2行为5个*,1 + 2 * 2 = 5
    第3行为7个*,1 + 3 * 2 = 7
    观察发现*的个数与行存在一定的关系,看起来像是这样
    第0行,1 + 0 * 2 = 1
    第1行,1 + 1 * 2 = 3
    第2行,1 + 2 * 2 = 5
    第3行,1 + 3 * 2 = 7
    即每行的*数=1 + 行数 * 2:(针对range(4)行数是从0开始)
    修改代码,将 for j in range(7)即每次打印7个*改成每次打印 1 + 行数 *2
    具体代码如下:
    for i in range(4):
        text = ""
        for j in range(1 + i*2):
            text += "*"
        print(text)

    打印效果:

    *
    ***
    *****
    *******
    步骤三:将打印的行数换成变量,并由用户输入
    row = int(input("请输入打印直角三角形的高度:"))
    for i in range(row):
        text = ""
        for j in range(1 + i*2):
            text += "*"
        print(text)

    效果如下:

    请输入打印直角三角形的高度:8
    *
    ***
    *****
    *******
    *********
    ***********
    *************
    ***************

    3、试着打印一个乘法口诀表:假设三行三列

    1*1  1*2  1*3

    2*1  2*2  2*3

    3*1  3*2  3*3

    解法:

    第一步,考虑打印出第一行:

    text = ""
    for j in range(1, 3+1):
        text += "{}*{}".format(1,j)
    print(text)

    效果:

    1*11*21*3

    修正一下:

    text = ""
    for j in range(1, 3+1):
        text += "{}*{}  ".format(1,j)
    print(text)

    再看效果

    1*1  1*2  1*3

    第二步,打印相同的三行:

    for i in range(1, 3+1):
        text = ""
        for j in range(1, 3+1):
            text += "{}*{}  ".format(1,j)
        print(text)

    效果:

    1*1  1*2  1*3  
    1*1  1*2  1*3  
    1*1  1*2  1*3

    第三步,观察后我们发现,第一行从1开始,第二行从2开始,第三行从3开始,刚好对应变量i第一次为1,第二次为2,第三次为3

    for i in range(1, 3+1):
        text = ""
        for j in range(1, 3+1):
            text += "{}*{}  ".format(i,j)
        print(text)

    效果:

    1*1  1*2  1*3  
    2*1  2*2  2*3  
    3*1  3*2  3*3

    拓展1:将之打印成三角形如下的图样:

    1*1

    2*1  2*2

    3*1  3*2  3*3

    观察,第一行text加一次,第二行text加两次,第三行text加三次,看起来加的次数和行数i是相等的

    for i in range(1, 3+1):
        text = ""
        for j in range(1, i+1):
            text += "{}*{}  ".format(i,j)
        print(text)

    效果:

    1*1  
    2*1  2*2  
    3*1  3*2  3*3  

    拓展2:增加结果:

    for i in range(1, 3+1):
        text = ""
        for j in range(1, i+1):
            text += "{}*{}={}  ".format(i,j,i*j)
        print(text)

    拓展3:增加控制:

    begin = 3
    end = 9
    for i in range(begin, end+1):
        text = ""
        for j in range(begin, i+1):
            text += "{}*{}={}  ".format(i,j,i*j)
        print(text)

    效果:

    3*3=9  
    4*3=12  4*4=16  
    5*3=15  5*4=20  5*5=25  
    6*3=18  6*4=24  6*5=30  6*6=36  
    7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
    8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
    9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  

    拓展4:增加输入控制:

    begin = int(input("请输入乘法表第一个数:"))
    end = int(input("请输入乘法表第二个数:"))
    for i in range(begin, end+1):
        text = ""
        for j in range(begin, i+1):
            text += "{}*{}={}  ".format(i,j,i*j)
        print(text)

    效果:基本符合要求,可以根据用户输入打印出任意的乘法表,不过发现部分数据没有对齐,修改一下,使得先满足九九乘法表是对齐的

    请输入乘法表第一个数:2
    请输入乘法表第二个数:5
    2*2=4  
    3*2=6  3*3=9  
    4*2=8  4*3=12  4*4=16  
    5*2=10  5*3=15  5*4=20  5*5=25

     

    拓展5:增加结果宽度控制{:2}表示这个占位符占2个字符的位置

    前面代码修改为:

    begin = int(input("请输入乘法表第一个数:"))
    end = int(input("请输入乘法表第二个数:"))
    for i in range(begin, end+1):
        text = ""
        for j in range(begin, i+1):
            text += "{}*{}={:2}  ".format(i,j,i*j)
        print(text)

    效果如下:

    请输入乘法表第一个数:2
    请输入乘法表第二个数:5
    2*2= 4  
    3*2= 6  3*3= 9  
    4*2= 8  4*3=12  4*4=16  
    5*2=10  5*3=15  5*4=20  5*5=25 
  • 相关阅读:
    POJ 2240 Arbitrage spfa 判正环
    POJ 3259 Wormholes spfa 判负环
    POJ1680 Currency Exchange SPFA判正环
    HDU5649 DZY Loves Sorting 线段树
    HDU 5648 DZY Loves Math 暴力打表
    HDU5647 DZY Loves Connecting 树形DP
    CDOJ 1071 秋实大哥下棋 线段树
    HDU5046 Airport dancing links 重复覆盖+二分
    HDU 3335 Divisibility dancing links 重复覆盖
    FZU1686 神龙的难题 dancing links 重复覆盖
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/11516094.html
Copyright © 2020-2023  润新知