zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    异步解决方案----Promise与Await
    多页应用 Webpack4 配置优化与踩坑记录
    左侧固定,右侧自适应的布局方式(新增评论区大佬教的方法)
    精读《Epitath 源码
    如何编写 Typescript 声明文件
    状态码具体解释
    LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
    kafka教程
    double x = 10 ,y = 0;y = x % 2; 这个表达式正确吗?
    mongodb mapreduce使用总结
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/11516094.html
Copyright © 2011-2022 走看看