2020-12-30 Python入門(控制語句)

小黑班♪(・ω・)ノ發表於2020-12-31

條件表示式

特點

1、在選擇和迴圈結構中,條件表示式情況如下

  • 值為false

    • false、0、0.0、空值None、空序列物件(空列表、空元組、空集合、空字典、空字串)、空range物件、空迭代物件
  • 值為true

    • 除以上空系列外的其他情況(合法表示式)均為true,包括函式呼叫的表示式

2、條件表示式中不能有賦值符“=”,出現即報錯

選擇結構

單分支結構

tips:
多條語句縮排必須對齊一致
描述語法格式時,中括號[]通常表示可選非必選

  • 單分支

    • if 條件表示式: #邏輯、算數、關係等表示式
      語句/語句塊 #一或多條
  • 雙分支

    • if 條件表示式:
      語句1/語句塊2
      else:
      語句2/語句塊2
  • 三元條件運算子

    • 條件為真時的值 if (條件表示式) else 條件為假時的值

多分支結構

tips:
多分支結構,幾個分支之間有邏輯關係,不能隨意顛倒順序
注意控制好不同級別程式碼塊的縮排,縮排量決定程式碼的從屬關係

  • 多分支

if 條件表示式 1 :
語句 1/語句塊 1
elif 條件表示式 2:
語句 2/語句塊 2 .
.
.
elif 條件表示式 n :
語句 n/語句塊 n
[else:
語句 n+1/語句塊 n+1
]

在這裡插入圖片描述

  • 選擇結構巢狀
if 表示式 1:
	語句塊 1
	if 表示式 2:
		語句塊 2 
	else:
		語句塊 3 
else:
	if 表示式 4: 
		語句塊 4

迴圈結構

tips:
1、迴圈結構用來重複執行一條或多條語句
2、判斷條件表示式,true則重複執行迴圈體裡的語句,執行後再次回到此過程
3、迴圈體中應有使迴圈體趨於結束的語句,否則便是死迴圈

while/for迴圈、語句

  • while

    • while True:死迴圈

while 條件表示式:
迴圈體語句

  • for

    • 通常用於可迭代物件的遍歷

for 變數 in 可迭代物件:
迴圈體語句

  • 可迭代物件

    • 序列:字串、列表、元組

    • 字典

    • 迭代器物件

      • range:用來產生指定範圍的數字序列,range(start, end [,step]),包頭不包尾
    • 檔案物件

  • break語句

    • 結束while和for迴圈,但當有巢狀迴圈時只能跳出最近一層的迴圈
  • continue語句

    • 結束本次迴圈,但當有巢狀迴圈時只能跳出最近一層的迴圈
  • else語句

    • while/for迴圈可以附帶1個else語句,它只有沒被break結束時才會執行

while 條件表示式:
迴圈體
else: 語句塊
或者:
for 變數 in 可迭代物件:
迴圈體
else:
語句塊

  • zip()

    • 對多個序列進行並行迭代
    • 在最短序列用完時就會停止,(1)4,(2)4,(3)3,迭代只會到3

推導式建立序列

  • 列表推導式

    • [表示式 for item in 可迭代物件 if 條件判斷]
  • 字典推導式

    • [keys : values for 表示式 in 可迭代物件]
  • 集合推導式

    • {表示式 for item in 可迭代物件 if 條件判斷}
  • 生成器推導式(生成元組)

    • (表示式 for item in 可迭代物件 if 條件判斷)
    • 實際是一個生成器物件,只能迭代一次,再次會無資料
#列表推導式
print([x for x in range(1,5)])
print([m*2 for m in range(1,20) if m%2==0])
print([a for a in 'abcdefg'])
ab = [(a,b) for a in range(1,5) for b in range(1,5)]#2個迴圈巢狀
for abs in ab:
    print(abs,end=',')	

print("-----------------------------------------------")

#字典推導式
my_text = 'xiaohu,xiaoshou,xiaoshui'
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)

print("-----------------------------------------------")

#集合推導式
print({x for x in range(1,10) if x%2==0})

print("-----------------------------------------------")

#生成器推導式
d = (x for x in range(1,100) if x%5==0)
print(d) #結果是一個生成器物件,沒有具體數值,只能使用一次

章節作業

score = int(input("請輸入你的分數:"))
grade = ''  #建立空字元接收
if score <60:
    grade = '不及格'
elif score <80:
    grade = '及格'
elif score <90:
    grade = '良好'
elif score <=100:
    grade = '優秀'

print("分數是{0},等級是{1}".format(score,grade))
x = int(input("請輸入x座標\n"))
y = int(input("請輸入y座標\n"))

if(x==0 and y==0):
    print("原點")
elif(x==0):
    print("y軸")
elif(y==0):
    print("x軸")
elif(x>0 and y >0):print("第一象限")
elif(x<0 and y >0):print("第二象限")
elif(x<0 and y <0):print("第三象限")
else:print("第四象限")
score = int(input("請輸入你的分數:"))
grade = ''
if (score>100 or score <0):
    score = int(input("false!請重新輸入數字:"))
else:
    if score>=90:
        grade = 'A'
    elif score >=80:
        grade = 'B'
    elif score >=70:
        grade = 'C'
    elif score >=60:
        grade = 'D'
    else:
        grade = 'E'
print("分數是{0},等級是{1}".format(score,grade))
print('------------------------------------------------')
score = int(input("請輸入數字:\n"))
degree = 'ABCDE'
if score>100 or score <0:
    score = int(input("輸入錯誤,重新輸入數字:\n"))
else:
    num = score//10
    if num<6:num = 5
print("你的分數是{0},等級是{1}".format(score,degree[9-num]))
num2 = 0
sum_all = 0
sum_ou = 0
sum_ji = 0
while num2 <= 100:
    sum_all += num2
    if num2 % 2 == 0:
        sum_ou += num2
    else:
        sum_ji += num2
    num2 += 1  # 新增條件使while語句趨向於結束
print("0-100累計和是:", sum_all)
print("0-100奇數和是:", sum_ji)
print("0-100偶數和是:", sum_ou)
sum_all = 0
sum_ou = 0
sum_ji = 0
for i in range(101):
    sum_all += i
    if i%2==0:
        sum_ou+= i
    else:
        sum_ji+=i
print("0-100的累加和是{0},奇數和是{1},偶數和是{2}".format(sum_all,sum_ji,sum_ou))
for i in range(5):
    for i 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()
r1 = dict(name='xiaohu',age=20,salary=30000,city='PeiKing')
r2 = dict(name='xiaoshou',age=21,salary=20000,city='Tibet')
r3 = dict(name='xiaoshui',age=22,salary=10000,city='Boston')

tb = [r1,r2,r3]

for i in tb:
    if i.get('salary')>15000:
        print(i)
empSum = 0
salarySum = 0
salary = []

while True:
    s = input("輸入員工工資:\n")
    if s.upper()=='Q' or s.upper() =='q':
        print("over,out")
        break
    if float(s) < 0:
        continue

    empSum +=1
    salary.append(float(s))
    salarySum += float(s)
print("員工數{0}個".format(empSum))
print("員工薪資",salary)
print("員工平均薪資{0}".format(salarySum/empSum))
salarySum = 0
salary = []
empSum = 0

for i in range(4):
    s = input("請輸入薪資:\n")
    if s.upper()=='Q' or s.upper()=='q':
        print("over,out")
        break

    if float(s) <0:
        continue

    empSum += 1
    salarySum += float(s)
    salary.append(float(s))

else:
        print("錄入結束")

print("員工數{0}".format(empSum))
print("員工薪資",salary)
print("員工平均薪資{0}".format(salarySum/empSum))
import turtle
#定義變數接收畫筆資訊
t = turtle.Pen()

#定義形狀顏色速度
t.width(5)
t.speed(0)  #0最快,1最慢
colors = ('red','blue','purple','yellow','green','black')
#定義繪製辦法
for i in range(20): #圓圈數量
    t.penup()   #找到位置
    t.goto(0,-i*10) #座標向下,下降比例一致
    t.pendown() #開始畫
    t.color(colors[i%len(colors)])
    t.circle(10+i*10)    #圓圈一層比一層大


turtle.done()
import turtle

t = turtle.Pen()

width = 30
num = 18

x1 = [(-250,250),(-250+width*num,250)]
y1 = [(-250,250),(-250,250-width*num)]

t.speed(0)

for i in range(0,19):
    t.penup()
    t.goto(x1[0][0],x1[0][1]-30*i)
    t.pendown()
    t.goto(x1[1][0],x1[1][1]-30*i)

for i in range(0,19):
    t.penup()
    t.goto(y1[0][0]+30*i,y1[0][1])
    t.pendown()
    t.goto(y1[0][0]+30*i,y1[1][1])


turtle.done()

相關文章