"""
第五章:流程控制
所謂的流程控制就是程序執(zhí)行的過程
三種結(jié)果:
順序執(zhí)行:按部就班
選擇:根據(jù)條件不同執(zhí)行不同的代碼段
循環(huán):體現(xiàn)的是重復(fù)性的執(zhí)行一件事
"""
# 縮進(jìn):python使用每行前面的空白(縮進(jìn))來決定當(dāng)前代碼的層次。
"""
同一個(gè)層次的語句必須要有相同的縮進(jìn)
通常情況下使用四個(gè)空格(tabs)來表示一個(gè)縮進(jìn)層次
"""
# 一、選擇判斷
# 背景,有的時(shí)候希望程序是根據(jù)條件來按照不同的條件執(zhí)行不同的代碼,而不是按部就班的一行
#?????? 一行執(zhí)行。
# 所有的關(guān)鍵字
import keyword
print(keyword.kwlist)
# 1. if條件:當(dāng)if條件成立的時(shí)候,會(huì)執(zhí)行的代碼段
"""
語法結(jié)構(gòu)
if 條件(布爾類型):
??? 當(dāng)條件返回True,會(huì)執(zhí)行的代碼段
??? 當(dāng)條件返回True,會(huì)執(zhí)行的代碼段
??? 當(dāng)條件返回True,會(huì)執(zhí)行的代碼段
??? ....
else:(else的后面沒有條件)???
??? 當(dāng)if條件返回False,會(huì)執(zhí)行的代碼段
??? 當(dāng)if條件返回False,會(huì)執(zhí)行的代碼段
??? 當(dāng)if條件返回False,會(huì)執(zhí)行的代碼段
其他代碼段
用法注意:
(1)if可以單獨(dú)存在,但是else不可以
(2)if后面有條件,else后面沒有條件
"""
a=101
if a<=100:
??? print("我現(xiàn)在很瘦")
??? print("我可以繼續(xù)胡吃海塞")
else:
??? print("我不能吃飯了")
??? print("還得去減肥")
print("其他的代碼段")
# 練習(xí):
# 1. 輸入一個(gè)成績,如果>=60就輸出及格了,否則輸出:這次得交掛科費(fèi)了,回家還不能吃飯。
# score=int(input("請輸入你的成績"))
# if score>=60:
#???? print("及格了")
# else:
#???? print("交掛科費(fèi)")
#???? print("回家不能吃飯")
# 2.根據(jù)今天是星期幾(1-7),輸入星期幾,輸出要做的事情:
# 周一-周五 上課
# 周六????? 自習(xí)
# 周日????? 休息
# day=int(input("請輸入星期幾:"))
# if day==6:
#???? print("自習(xí)")
# if day==7:
#???? print("休息")
# if 1<=day<=5:
#???? print("上課")
#問題:
# 1. 效率,當(dāng)條件符合了一個(gè)if之后,還會(huì)走其他的if條件
# 2. 如果輸入的8
# 解決:
# 1.使用嵌套if來解決多次執(zhí)行if問題
# 2.將概率大的放在前面
# 小知識(shí):debug
# 1. 設(shè)置斷點(diǎn):當(dāng)使用debug模式執(zhí)行的時(shí)候,代碼就會(huì)停止在斷點(diǎn)的位置
# 2. F8鍵,會(huì)使程序一行 一行執(zhí)行
# 3. F9鍵,能夠使得程序走完(走到下一個(gè)斷點(diǎn))
# 4. 鼠標(biāo)懸停在變量的位置,會(huì)顯示變量值
"""
if 布爾條件:
?? if 布爾條件:
????? 語句體
?? else:
????? 語句體
else:
?? if 布爾條件:
????? 語句體
?? else:
????? 語句體
"""
# day=int(input("請輸入星期幾:"))
# if 5>=day>=1:
#???? print("上課")
# else:
#???? if day==6:
#???????? print("自習(xí)")
#???? else:
#???????? if day==7:
#???????????? print("休息")
#???????? else:
#???????????? print("輸入錯(cuò)誤")
# 3. 輸入一個(gè)工資,如果工資<=5000,輸出我很窮;
# 如果<=10000,輸出可以溫飽;如果<=20000,輸出我是土豪
# salary=int(input("請輸入一個(gè)工資:"))
# if salary<=5000:
#???? print("我很窮")
# else:
#???? if salary<=10000:
#???????? print("可以溫飽")
#???? else:
#???????? if salary<=20000:
#???????????? print("我是土豪")
# if salary<=5000:
#???? print("我很窮")
# else:
#???? if 10000<=salary<=20000:
#???????? print("我是土豪")
#???? else:
#???????? print("可以溫飽")
"""
二、循環(huán)
1. for
for 循環(huán):依據(jù)任意序列中的子項(xiàng),按其在序列中的順序進(jìn)行迭代
"""
# 背景:
# print("hello world")
# print("hello world")
# print("hello world")
# print("hello world")
# print("hello world")
?需要重復(fù)五次的輸入,耗時(shí)耗力,可以用for循環(huán)來解決
"""
for循環(huán)的語法
# 變量名:是序列中的每一個(gè)元素
迭代對象:序列(字符串、字節(jié)、列表、元組)和其他可迭代對象
遍歷:指將一個(gè)可迭代的對象每個(gè)元素都查看一遍。
for 變量名 in 序列(字符串、字節(jié)、列表、元組)和其他可迭代對象:
?? 循環(huán)體
"""
# 使用for循環(huán)輸出5次hello world
# for i in "11111":
#???? print("hello world")
# 可迭代對象可以換成其他的,只要滿足可迭代對象是五次就可以。
# for i in "12345":
#???? print("開始:")
#???? print("hello world")
# 將可迭代對象中的每一個(gè)元素都加1
for i in "11111":
??? # print(i,type(i))
??? n=int(i)
??? n+=1
??? print(n)
# 1+2+3+4+5
s=0
for i in "12345":
??? n=int(i)
??? s=s+n
print(s)
#1+2+3+...100
# range(start,end,step)函數(shù):能夠產(chǎn)生一個(gè)列表
# 包含start不包含end
# step:默認(rèn)1:方向是從左到右
# print(range(1,5))? # [1,2,3,4]? python2x
# print(list(range(1,5)))???????? python3x
a=range(1,5)
print(type(a))
for i in a:
??? print(i)
print(list(range(1,101)))
# 1+...+100累加和
s=0
for? i? in range(1,101):
??? # s=s+i
??? s+=i
print(s)
# 練習(xí)
"""
1. 定義字符串、定義字節(jié),使用for循環(huán)對其進(jìn)行遍歷,計(jì)算長度
"""
s="hello world python"
l=0
for i in s:
??? print(i)
??? l=l+1
print("通過for循環(huán)計(jì)算出的l={}".format(l))
# 0 1 2 3? ... len(s)-1
# for i in range(0,len(s)):
for i in range(len(s)):# 簡化
??? print("通過索引訪問每一個(gè)元素",s[i])
# 字節(jié)的遍歷是ascii
# 通過索引訪問的也是ascii
l1=0
b=b"helloworldpython"
for i in b:
??? l1+=1
??? # print(i)
print("通過for循環(huán)計(jì)算出的l1={}".format(l1))
for i in range(len(b)):
??? print("通過索引的方式訪問字節(jié)元素",b[i])
#2. 輸出1-100以內(nèi)所有的奇數(shù) 使用兩種辦法
# print(list(range(1,101,2)))
for i in range(1,101):
??? if i%2!=0:
??????? print(i,end=" ")
print()
#3.輸出1-100以內(nèi)所有的偶數(shù)
for i in range(1,101):
??? if i%2==0:
??????? print(i,end=" ")
print()
#4.有一些列的溫度數(shù) 30? 50? 66? 99? 58? 20代表華氏溫度
?? #希望將這些溫度變成攝氏溫度: 攝氏溫度=(華氏溫度-32)/1.8
# (1)需要將每個(gè)溫度變成攝氏溫度
#(2)希望得到的結(jié)果仍然是字符串
"""
思路:
(1)如何將字符串處理成單個(gè)元素(溫度),split(",")
?(2) 使用for循環(huán)處理每一個(gè)溫度
??? 處理之前需要將溫度轉(zhuǎn)換float
(3)+可以拼接字符串
??? format也能組裝字符串
"""
s="30,50,66,99,58,20"
print(s.split(","))
t=s.split(",")
a=""
for? i in t:
??? # print(i)攝氏溫度=(華氏溫度-32)/1.8
??? x=(float(i)-32)/1.8
??? # print(x)
??? # a+=str(x)+","
??? a+="{},".format(x)
s=a.rstrip(",")
print(s)
s="1.2,1.5,1.65892......."
# 2.循環(huán)的嵌套
"""
語法:
for? i? in 外循環(huán)對象:
?? for j in 內(nèi)循環(huán)對象:
????? 循環(huán)體
外循環(huán)每執(zhí)行一次,內(nèi)循環(huán)都會(huì)完整的執(zhí)行一輪。
"""
#打印星星*
# print("******")
# print("*"*6)
#
# for i in? range(6):
#???? print("*",end="")
# 需要打印10行,每行6個(gè)星星
for j in range(10):
??? for i in range(6):
??????? print("*", end="")
??? print()
# 寫代碼,通常先寫內(nèi)循環(huán),再寫外循環(huán)
#3. 跳出循環(huán)
# break:終止當(dāng)前循環(huán)
# 希望在字符中檢測有沒有*
for i in "hel*djlkgdljgklgdjdkgj":
??? if "*"==i:
??????? print("找到*")
??????? break
#輸入一個(gè)數(shù),判斷是不是質(zhì)數(shù)
# 質(zhì)數(shù):只能被自己和1整除
# 判斷不是質(zhì)數(shù)更容易
# num%(2...n-1) !=0 是質(zhì)數(shù)
# num%(2...n-1) ==0 不是質(zhì)數(shù) break
import math
num=int(input("請輸入一個(gè)數(shù)"))
tag=True
# print(math.sqrt(7))
for i in range(2,int(math.sqrt(num))+1):
??? if num%i==0:
??????? print("不是質(zhì)數(shù)")
??????? tag=False
??????? break
??? # else:
??? #???? print("是質(zhì)數(shù)")
# if tag==True:
if tag:#(簡化)
??? print("是質(zhì)數(shù)")
# 因式分解
# 8=2*4
# 8=4*2
# 16=2*8
# 16=4*4
# 16=8*2