1. 程式人生 > 其它 >2022.3.8筆記總結

2022.3.8筆記總結

2022.3.8學習筆記

  • 昨日作業講解
  • while+else
  • 死迴圈與while的巢狀
  • for迴圈基本使用
  • range關鍵字
  • for迴圈補充(break、continue、else)
  • for迴圈的巢狀
  • 基本資料型別及內建方法

一、昨日作業講解

注意:前期作為小白的我,要先用中文寫出步驟,之後翻譯成python程式碼,另外編寫程式碼不要考慮優化,實現功能即可。

!!!所以這裡作業重新加註釋寫一遍

要點:先搭建主題功能,再配套優化

作業:

​ 要求:編寫一個猜年齡的遊戲

​ 基本要求:
​ 如果不對的情況下可以猜三次 如果對了直接結束
​ 拔高練習:
​ 三次機會用完之後提示使用者是否繼續猜測 如果使用者輸入了y則再給使用者三次機會 如果使用者輸入n則直接結束

# 1.定義真實的年齡
real_age = 18
# 2.由於需要計數,因此先設定一個計數器初始值
count = 1
# 2.需要用到迴圈,判斷條件是否正確,輸入正確則直接結束迴圈
while count < 4:  # 設定計數為3次,條件滿足進入迴圈
    # 3.進入迴圈後需要判斷使用者輸入是否正確,因此需要先獲取使用者輸入資訊
    guess_age = input('請猜年齡>>>:')
    if guess_age == str(real_age):  # 判斷年齡是否正確
        print('答對了!')  # 根據要求答對了需要直接結束因此加break
        break
    else:
        count += 1  # 猜錯後顯示答錯了,需要計數1次,因為進入else就說明已經答錯了,所以需要放在print前面,否則會多執行1次print('答錯了')
        print('答錯了!')
        while count == 4:  # count = 3 時代表使用者輸入了3次,這裡加入迴圈
        # 4.答錯了之後要求詢問使用者是否需要再來3次,因此需要加入判斷,並且需要與使用者互動,需要加入一個input變數
            ask= input('是否再來3次y/n>>>:')
            if ask == 'y':  # 加入判斷
                count = 1  # 選擇y則重新計數
            elif ask == 'n':  # 選擇n結束本層
                count = 5
            else:
                print('錯誤指令')

二、while迴圈補充

1.while與else

​ while與else的關係跟if...else不同,它是並列關係,就是說while正常迴圈結束之後,會緊接著執行else下的子程式碼,因此:

(1)while與else連用沒有從屬以及互斥關係,兩者按照順序結構執行

(2)當while是被人為中斷(break),則不執行else的子程式碼

2.死迴圈

​ 死迴圈的意思是while下的子程式碼無限重複執行,而且會給計算機效能造成負擔甚至破壞,如下

count = 1
while True:
    count += 2
    print(count)

​ 這樣的結果就是count = 1+2+2+2...無限迴圈,因此沒有結果,而且無法自動退出迴圈,所以再寫程式碼的時候需要注意,使用迴圈程式碼不是為了無限迴圈,而是為了達成某種條件結束執行。

3.while巢狀

舉例,需要編寫使用者登入程式,登入成功以後再獲取使用者指令並列印,程式碼如下:

tag = True
while tag
    username = input('username>>>:')
    password = input('password>>>:')
    if username == 'jason' and password == '123':
        print('登入成功!')
        while tag
            question = input('請輸入指令(exit退出)>>>:')
            print(question)
            if question == 'exit'
            	tag = False
    else:
        print('登入失敗!')

這裡需要注意,當while多層巢狀時,需要退出所有迴圈,有幾種形式:

(1)while條件設定為資料為布林值的變數:while tag

(2)while前一行設定初始條件,可以是帶數字的變數如count = 1,這樣只要想退出所有while迴圈,只要讓此變數count=任意其他值就可以退出while迴圈

三、for迴圈

for迴圈能完成的程式碼,while迴圈都能做到,但是for在某些方面更加簡單,比如說迴圈取值的時候。

for迴圈結構:

for+變數名+in+迴圈物件

迴圈物件可以是:字串、列表、字典、元組、集合等

作用:for迴圈每1次迴圈都是在迴圈物件中將其中一個元素賦值給變數名,一次迴圈賦值一次,知道元素被取完

eg(這裡以列表為例):

name_list = ['jason', 'mark', 'tony', 'tank']
for i in name_list:
    print(i)
jason
mark
tony
tank  # 執行結果為name_list的所有元素都被i取完

for迴圈補充:

# for + break
	break為結束本層迴圈
# for + continue
	continue為結束本次迴圈,直接開始下一次
# for + else
	for迴圈正常結束後執行else的子程式碼

因此可以看出,for迴圈的結束指令與while相差無幾!

range關鍵字

(1)range(10)

​ 表示[0,1,2,3,4,5,6,7,8,9],range左邊預設取0,右邊10不取

(2)range(1,10)

​ 表示[1,2,3,4,5,6,7,8,9,],1到9的資料集

(3)range(1,10,2)

​ 表示[1,3,5,7,9],後面的2表示步長,代表1到10之間每隔1個數取值,表示每相鄰2個數差值為2

利用for迴圈和range可以迴圈取值,如下:

for i in range(10):
    print(i)  # 執行結果為1-9的數字

四、資料型別內建方法

1.int

(1)型別轉換

res = int('123')  # 括號裡面必須是數字型別的字串等

(2)進位制數轉換

整型十進位制轉其他進位制:
bin(100)  # 十進位制轉二進位制
oct(100)  # 十進位制轉八進位制
hex(100)  # 十進位制轉十六進位制
其他進位制數轉十進位制:
int('0b1100100',2)  # 二進位制轉十進位制,2代表二進位制

2.float

型別轉換

res = float('11.11')  # 字串型別數字轉浮點型
print(float('11'))  # 執行結果為11.0(浮點型數字)

3.str

型別轉換:

​ 可以轉換所有的資料型別

字串:

​ s1 = 'hello world'

(1)索引取值

s1[0],所選值為h

(2)切片操作

s1[1:5],所選值為ello(顧頭不顧尾,5所在索引的值不取)

(3)步長

s1[1:5:2],所選值為索引1-4之間間隔為1的數,即el,這個跟range步長取值比較相似,可以類比

(4)索引取切片拓展(倒著來)

s1[-1], 表示獲取最後一個字元,即d

s1[-5:-1],表示-5到-2之間的值,即worl

s1[-1:-5:-1],本來括號內數字應當是由小到大,即從左到右,但是通過步長改為-1,可以將索引倒過來取值,即dlro

(5)統計字串中字元的個數,空格也是字元

len(s1),表示s1字元的長度,結果為11,包含空格

(6)成員運算

print('11' in s1)
True  # 結果為True

(7)strip移除字串首尾指定的字元(使用頻率高)

name = '$$jason$$'

name.strip(),表示移除前後字串

name.strip('$'),表示移除前後$,結果為'jason'

name.lstrip('$'),表示移除左邊$,結果為'jason$$'

name.rstrip('$'),表示移除右邊$,結果為'$$jason'

(8)split按照指定的字元切割字串

data = 'jason|123|dbj'

data.split('|'),表示以'|'分割字串data,並且分割後是一個列表

這裡可以結合解壓賦值進行賦值

data = 'jason|123|dbj'
name, pwd, hobby = data.split('|')  # 解壓賦值

print(data.split('|', maxsplit=1))  # 結果為['jason','123|dbj'],預設從左往右切割,maxsplit按照字面意思理解就是最大切割數,為1則是切割1次
print(data.rsplit('|', maxsplit=1))  # 結果為['jason|123', 'DBJ'],rsplit表示從右往左切割,同理只切割1次

五、今日作業解答

'''
作業練習:
編寫一個使用者登入程式
   要求最多嘗試失誤三次 過期自動提示並可重置嘗試次數
    使用者登入成功之後進入內部迴圈 使用者輸入什麼就列印什麼 並給使用者提供一個結束程式的特殊指令
    獲取使用者輸入的使用者名稱和密碼可以處理首尾空格
    使用者的使用者名稱和密碼使用變數儲存 通過程式獲取使用者名稱和密碼比對
       data = 'jason|123'
'''
data = 'jason|123'
real_info = data.split('|')
count = 1
tag = True
while tag:
    username = input('輸入使用者名稱>>>:').strip()
    password = input('輸入密碼>>>:').strip()
    info = [username,password]
    if info == real_info:
        print('登陸成功!')
        while tag:
            instruction = input('請輸入您的指令>>>:')
            if instruction == '退出':
                tag = False
            else:
                print(instruction)
    else:
        count += 1
        if count == 4:
            while tag:
                ask = input('已錯誤3次,是否再來3次(是/否)>>>:')
                if ask == '是':
                    count = 1
                    break
                elif ask == '否':
                    tag = False
                else:
                    print('對不起,錯誤指令!')
        else:
            print('對不起使用者名稱或密碼錯誤!')