迴圈_推導式_繪製棋盤_函式

wy3165307090發表於2020-11-21

for迴圈

#元組
for x in (10,20,30):
    print(x*30)
#字串
for y in 'abcdef':
    print(y)
#字典
d = {'name':'wy','age':18,'job':'stu'}
for z in d:
    print(z)
for z in d.keys():
    print(z)
for z in d.values():
    print(z)
for z in d.items():
    print(z)

range物件

range(start,stop,step)

一個小練習:計算累加和

#利用for迴圈,計算1-100之間數字的累加和;計算1-100之間偶數的累加和;計算1-100之間奇數的累加和
#方法一
sum_all=0
for i in range(1,101):
    sum_all+=i
print("累加和",sum_all)
sum_all=0
for i in range(1,101,2):
    sum_all+=i
print("奇數的累加和",sum_all)
sum_all=0
for i in range(2,101,2):
    sum_all+=i
print("偶數的累加和",sum_all)
#方法二
sum_all = 0
sum_ou = 0
sum_ji = 0
for i in range(1,101):
    sum_all+=i
    if i%2 == 0:
        sum_ou+=i
    elif i%2 != 0:
        sum_ji += i
print("1-100的累加和為{0},偶數的累加和為{1},奇數的累加和為{2}".format(sum_all,sum_ou,sum_ji))

巢狀迴圈

for i in range(5):
    for j in range(5):
        print(i,end='\t')
    print()  #起到換行的作用

#列印九九乘法表
for m in range(1,10):
    for n in range(1,m+1):
        print("{0}*{1}={2}".format(m,n,(m*n)),end='\t')
    print()

#用列表和字典儲存資訊
tb = []
r1 = dict(name='wy',salary='30000',city='bj')
r2 = dict(name='wa',salary='20000',city='ss')
r3 = dict(name='wb',salary='10000',city='rr')
tb = [r1,r2,r3]
for x in tb:
    if int(x.get('salary'))>15000:
        print(x)

break 和continue

break跳出最近的一次迴圈
continue結束本次迴圈,繼續下一次

while True:
    a = input("請輸入一個字元(輸入Q或q的時候退出):")
    if a == 'q' or a == 'Q':
        print("迴圈結束,退出")
        break
    else:
        print(a)
#輸入員工薪資,若薪資小於0則重新輸入,最後列印出錄入員工的數量和薪資明細
empNum = 0
salarySum = 0
salarys = []
while True:
    s = input("請輸入員工的薪資(按Q或qjie)")
    if s.upper()=='Q':
        print("錄入完成,退出")
        break
    if float(s)<0:
        continue
    empNum += 1
    salarys.append(float(s))
    salarySum += float(s)
print("員工數{0}".format(empNum))
print("錄入薪資:",salarys)
print("平均薪資{0}".format(salarySum/empNum))

else語句

#方法一
while 條件表示式:
	迴圈體
else:
	語句塊
#方法二
for i in 可迭代物件:
	迴圈體
else:
	語句塊

一個小例子

salarySum = 0
salarys = []
for i in range(4):
    s = input("請輸入4名員工的薪資(按Q或q中途結束)")
    if s.upper()=='Q':
        print("錄入完成,退出")
        break
    if float(s)<0:
        continue

    salarys.append(float(s))
    salarySum += float(s)
else:
    print("您已經全部錄入4名員工的薪資")

print("錄入薪資:",salarys)
print("平均薪資{0}".format(salarySum/4))

迴圈程式碼的優化

  • 儘量減少迴圈內部不必要的計算
  • 巢狀迴圈中,儘量減少內層迴圈的計算,儘可能向外提
  • 區域性變數查詢較快,儘量使用區域性變數
  • 連線多個字串,使用join()而不使用+
  • 列表進行元素插入和刪除,儘量在尾部操作

zip並行迭代

names=("a","b","c","d")
ages=(18,79,56,53)
jobs = ('dd','ss','se')
for a,b,c in zip(names,ages,jobs):
    print("{0}--{1}--{2}".format(a,b,c))
for i in range(3):
    print("{0}--{1}--{2}".format(names[i],ages[i],jobs[i]))

推導式

  • 列表推導式
    列表推導式生成列表物件,語法如下:
    [表示式 for item in 可迭代物件 if 條件判斷]
>>> [x for x in range(1,5)]
[1, 2, 3, 4]
>>> [x*2 for x in range(1,5)]
[2, 4, 6, 8]
>>> y = [x*2 for x in range(1,50) if x%5==0]
>>> y
[10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> cells = [(row,col)for row in range(1,10)for col in range(1,10)]
>>> cells
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]
  • 字典推導式
    {key_expression: value_expression for 表示式 in 可迭代物件}
#字典推導式
my_text = 'i love you,i love sxt,i love wy'
#統計文字中各個字元出現的次數
char_count={c:my_text.count(c) for c in my_text}
print(char_count)

#使用普通迴圈實現上面字典推導式
ls1 = []
for i in range(len(my_text)):
    ls1.append(my_text[i])
ls2 = list(set(ls1))
for j in range(len(ls2)):
    print(str(ls2[j])+":"+str(my_text.count(ls2[j])),end='\t')
  • 集合推導式
b = [x for x in range(1,100) if x%9==0]
print(b)
  • 生成器推導式
#生成器推導式(生成元組)一個生成器只能執行一次
gnt = (x for x in range(4))
for x in gnt: #gnt是生成器物件,生成器是可迭代的物件,只能使用一次
    print(x,end=',')

繪製棋盤

#例子:繪製圓
'''
import turtle
t = turtle
my_colors = ("red","green","yellow","black")
t.width(4)
t.speed(0)
for i in range(10): #0,1,2,3,4
    t.penup()
    t.goto(0,-i*10)     #0,-100,-200,-300,-400
    t.pendown()
    t.color(my_colors[i%len(my_colors)])
    t.circle(15+i*10)           #100,200,300,400,500

turtle.done() #程式執行完,視窗仍然在
'''
#繪製棋盤 18*18
import turtle
t = turtle
t.width(1)
t.speed(0)
for i in range(18): #0,1,2,3,4...
    t.goto(i, 0)
    t.goto(i,100)
    t.penup()
    t.goto((i+1)*10,0)
    t.pendown()
    t.goto((i+1)*10, 100)
    t.penup()
t.goto(0,0)
t.pendown()
for j in range(19):
    t.goto(0,(100/18)*j)
    t.pendown()
    t.goto(180,(100/18)*j)
    t.penup()
turtle.done()

#(0,0)(0,100)
#(10,0)(10,100)
#(20,0)(20,100)

#(0,0)(180,0)
#(0,(100/18)*1)(180,(100/18)*1)
#(0,(100/18)*2)(180,(100/18)*2)

函式用法和底層分析

  • 可重用的程式程式碼塊
  • 代表一個功能
    (1)內建函式
    (2)標準庫函式
    (3)第三方庫函式
    (4)自定義函式
    def 函式名(引數列表):
    “文件字串”
    函式體/若干語句
def test01():
    print("*"*10)
    print("@"*10)

test01()
test01()
test01()

for i in range(10):
    test01()

引數列表

  • 圓括號內是形式引數列表,有多個引數則用逗號隔開
  • 形式引數不需要宣告型別,也不需要指定函式返回值型別
  • 無引數,也必須保留空的圓括號
  • 實參列表必須與形參列表一一對應

return

  • 如果函式體中包含return語句,則結束函式執行並返回值
  • 如果函式體中不包含return語句,則返回None值

形參和實參

形參:定義函式時使用,英文逗號隔開
實參:具體用函式時
實參和形參必須一一對應

def printMax(a,b):
    if a>b:
        print(a,"較大值")
    else:
        print(b,"較大值")
printMax(10,20)
printMax(45,96)

函式的註釋

def printMax(a,b):
    '''用於比較函式的大小,列印較大值 '''
    if a>b:
        print(a,"較大值")
    else:
        print(b,"較大值")
printMax(10,20)
printMax(45,96)
help(printMax.__doc__)

返回值

返回值,結束函式

def add(a,b):
    print("計算兩個數的和:{0},{1},{2}".format(a,b,(a+b)))
    return a+b
def test02():
    print("a")
    print("b")
    return
    print("hello")
def test03(x,y,z):
    return [x*10,y*10,z*10]
c = add(30,40)
test02()
print(test03(1,2,3))

相關文章