Python 初級 6 循環 (二)

1、複習

1 for循環

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

1) 每次循環開始,會依次把列表中的數按順序賦值給looper,第一次looper爲1,第二次爲2,第三次爲3,第四次爲4函數

2) 每賦一次值,就會把下面指令塊的全部工做執行一遍,這個指令塊也叫循環體oop

3) 每次執行完後,變量looper會賦上列表中下一個值,直到賦完爲止spa

2 break跳出

3 range()函數

1)range(1, 5)表示的爲列表[1, 2, 3, 4],右邊的5表示邊界,不是具體的值code

2)range一般咱們寫成range(0, 4), 表示列表[0,1, 2, 3],這也是計算機一般表示數的方法,從0這個具體的數開始,到邊界4結束(不包括邊界4)一共有4個數orm

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

4 字符串格式化:佔位符

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

控制佔多少個字符的:2表示佔用2個字符的位置字符串

好比input

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

分別表示佔用1個字符,2個字符,3個字符for循環

 

2、練習:

一、試着打印一個長方形:

********form

*           *

*           *

********

方法:

步驟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
****************
*              *
*              *
*              *
*              *
*              *
*              *
****************

 

二、試着打印一個直角三角形:

*

***

*****

*******

步驟一:

最後一行是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
*
***
*****
*******
*********
***********
*************
***************

 

 

三、試着打印一個乘法口訣表:假設三行三列

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 
相關文章
相關標籤/搜索