Day02 python基礎

一 數據類型:
列表類型:
定義:
在[]內,能夠存放多個任意類型的值,並以逗號隔開。
通常用於存放學生的愛好,課堂的週期等等...

優先掌握的操做:
一、按索引存取值(正向存取+反向存取):便可存也能夠取
二、切片(顧頭不顧尾,步長)
三、長度
四、成員運算in和not in
五、追加
六、刪除
七、循環

須要掌握的:
一、index
二、count
三、pop
四、remove
五、insert
六、extend

元組類型:
定義:
在()內,能夠存放多個任意類型的值,並以逗號隔開。
注意:
元組與列表不同的是,只能在定義時初始化值,不能對其進行修改。
優勢:
在內存中佔用的資源比列表要小。
# 定義一個學生列表,可存放多個學生
list(['錢垚', '李小龍', '張全蛋', '趙鐵柱'])
students = ['錢垚', '李小龍', '張全蛋', '趙鐵柱']
print(students[1])  # 李小龍
#
student_info = ['楊波', 84, 'male', ['泡8', '喝9']]
# # 取楊波同窗的全部愛好
print(student_info[3])
# # # 取楊波同窗的第二個愛好
print(student_info[3][1])
#
# # 優先掌握的操做:
# # 一、按索引存取值(正向存取+反向存取):便可存也能夠取
print(student_info[-2])  # 楊波
#
# # 二、切片(顧頭不顧尾,步長)
print(student_info[0:4:2])  # ['楊波', 'male']
#
# # 三、長度
print(len(student_info))  # 4
#
# # 四、成員運算in和not in
print('楊波' in student_info)  # True
print('楊波' not in student_info)  # False
#
# # 五、追加
student_info = ['楊波', 84, 'male', ['泡8', '喝9']]
# 在student_info列表末尾追加一個值
student_info.append('安徽最牛的學員,合肥學院')
print(student_info)
#
# # 六、刪除
# # 刪除列表中索引爲2的值
del student_info[2]
print(student_info)

# 七、循環
for student in student_info:
    print(student)

# 須要掌握的:
student_info = ['尹浩卿', 95, 'female', ['尬舞', '喊麥'], 95]
# 1.index 獲取列表中某個值的索引
print(student_info.index(95))  # 1

# 2.count 獲取列表中某個值的數量
print(student_info.count(95))  # 2

# 3.取值,默認取列表中最後一個值,相似刪除
# 若pop()括號中寫了索引,則取索引對應的值
student_info.pop()
print(student_info)
# 取出列表中索引爲2的值,並賦值給sex變量名
sex = student_info.pop(2)
print(sex)
print(student_info)
# 
student_info = ['尹浩卿', 95, 'female', ['尬舞', '喊麥'], 95]

# 4.移除,把列表中的某個值的第一個值移除
student_info.remove(95)
print(student_info)  # ['尹浩卿', 'female', ['尬舞', '喊麥'], 95]

name = student_info.remove('尹浩卿')
print(name)  # None
print(student_info)  # ['female', ['尬舞', '喊麥'], 95]
# 
5.插入值
student_info = ['尹浩卿', 95, 'female', ['尬舞', '喊麥'], 95]
# # 在student_info中,索引爲3的位置插入「合肥學院」
# student_info.insert(3, '合肥學院')
# print(student_info)
# 
6.extend 合併列表
student_info1 = ['尹浩卿', 95, 'female', ['尬舞1', '喊麥2'], 95]
student_info2 = ['婁逸夫', 94, 'female', ['尬舞1', '喊麥2']]
# 把student_info2全部的值插入student_info1內
student_info1.extend(student_info2)
print(student_info1)
元組:
# 定義:
#  tuple((1, 2, 3, '五', '六'))
tuple1 = (1, 2, 3, '', '')
print(tuple1)  # (1, 2, 3, '五', '六')
# 優先掌握的操做:
# 一、按索引取值(正向取+反向取):只能取
print(tuple1[2])  # 3

# 二、切片(顧頭不顧尾,步長)
# 從0開始切片到5-1, 步長爲3
print(tuple1[0:5:3])  # (1, '五')

# 三、長度
print(len(tuple1))  # 5

# 四、成員運算in和not in
print(1 in tuple1)  # True
print(1 not in tuple1)  # False

# 五、循環
for line in tuple1:
    # print(line)
    # print默認end參數是\n
    print(line, end='_')

 




字典類型:
做用:
在{}內,可存放多個值,以key-value存取,取值速度快。

定義:
key必須是不可變類型,value能夠是任意類型

dict1 = dict({'age': 18, 'name': 'tank'})
dict1 = {'age': 18, 'name': 'tank'}
print(dict1)  # {'age': 18, 'name': 'tank'}
print(type(dict1))  # <class 'dict'>
# 
# 取值,字典名 + [],括號內寫值對應的key
print(dict1['age'])
# 
# 優先掌握的操做:
# 一、按key存取值:可存可取
# 存一個 level: 9的值到dict1字典中
dict1['level'] = 9
print(dict1)  # {'age': 18, 'name': 'tank', 'level': 9}
print(dict1['name'])  # tank

# 二、長度len

# 三、成員運算in和not in  只判斷字典中的key
print('name' in dict1)  # True
print('tank' in dict1)  # False
print('tank' not in dict1)  # True

# 四、刪除
del dict1['level']
print(dict1)  # {'age': 18, 'name': 'tank'}

# 五、鍵keys(),值values(),鍵值對items()
# 獲得字典中全部key
print(dict1.keys())
# 獲得字典中全部值values
print(dict1.values())
# 獲得字典中全部items
print(dict1.items())
# 
# 六、循環
# 循環遍歷字典中全部的key
for key in dict1:
    print(key)
    print(dict1[key])
# 
get
# dict1 = {'age': 18, 'name': 'tank'}
print(dict1.get('age'))
# []取值
print(dict1['sex'])  # KeyError: 'sex'
# 
get取值
print(dict1.get('sex'))  # None
# 若找不到sex,爲其設置一個默認值
print(dict1.get('sex', 'male'))
不可變類型:
    變量的值修改後,內存地址必定不同。
    數字類型
        int
        float
        
    字符串類型
#         str
#     
#     元組類型
#         tuple
#         
# 可變類型:
#     列表類型
#         list
#     
#     字典類型
#         dict
#         
# '''
# # 不可變類型
# int
number = 100
print(id(number))  # 1434810944
number = 111
print(id(number))  # 1434811296

# float
sal = 1.0
print(id(sal))  # 2771339842064
sal = 2.0
print(id(sal))  # 2771339841896

str1 = 'hello python!'
print(id(str1))  # 1975751484528
str2 = str1.replace('hello', 'like')
print(id(str2))  # 1975751484400


# 可變類型:
# 列表

list1 = [1, 2, 3]

list2 = list1
list1.append(4)

# list1與list2指向的是同一分內存地址
print(id(list1))
print(id(list2))
print(list1)
print(list2)



二 流程控制:
if 判斷:
語法:
if 判斷條件:
# 若條件成立,則執行此處代碼
邏輯代碼

elif 判斷條件:
# 若條件成立,則執行此處代碼
邏輯代碼

else:
# 若以上判斷都不成立,則執行此處代碼
邏輯代碼



while循環
語法:
while 條件判斷:
# 成立執行此處
邏輯代碼

break # 跳出本層循環
continue # 結束本次循環,進入下一次循環
# 判斷兩數大小
x = 10
y = 20
z = 30

# 縮進快捷鍵,tab往右移動四個空格,shift + tab 往左移動四個空格
if x > y:
    print(x)

elif z > y:
    print(z)

else:
    print(y)



'''
while循環
    語法: 
        while 條件判斷:
            # 成立執行此處
            邏輯代碼
            
break  # 跳出本層循環
continue  # 結束本次循環,進入下一次循環
'''

# str1 = 'tank'
#
# # while循環
# while True:
#     name = input('請輸入猜想的字符: ').strip()
#     if name == 'tank':
#         print('tank success!')
#         break
#
#     print('請從新輸入! ')


# 限制循環次數
str1 = 'tank'
# 初始值
num = 0  # 0 1 2 3

# while循環
while num < 3:
    name = input('請輸入猜想的字符: ').strip()
    if name == 'tank':
        print('tank success!')
        break

    print('請從新輸入!')
    num += 1

 





三 文件處理:
open()

寫文件
wt: 寫文本

讀文件
rt: 讀文本

追加寫文件
at: 追加文本

注意: 必須指定字符編碼,以什麼方式寫
就得以什麼方式打開。 如: utf-8

執行python文件的過程:
1.先啓動python解釋器,加載到內存中。
2.把寫好的python文件加載到解釋器中。
3.檢測python語法,執行代碼。
SyntaxError: 語法錯誤!

打開文件會產生兩種資源:
1.python程序
2.操做系統打開文件



文件處理之上下文管理:

一、with能夠管理open打開的文件,
會在with執行完畢後自動調用close()關閉文件

with open()

二、with能夠管理多個文件
# 寫文本文件
# 參數一: 文件的絕對路徑
# 參數二: mode 操做文件的模式
# 參數三: encoding 指定的字符編碼
f = open('file.txt', mode='wt', encoding='utf-8')
f.write('tank')
f.close()  # 關閉操做系統文件資源


# 讀文本文件  r == rt
f = open('file.txt', 'r', encoding='utf-8')
print(f.read())
f.close()
#
#
# # 追加寫文本文件
a = open('file.txt', 'a', encoding='utf-8')
a.write('\n 合肥學院')
a.close()



'''
文件處理之 上下文管理.
with open() as f "句柄"
'''
#
with open('file1.txt', 'w', encoding='utf-8') as f:
    f.write('墨菲定律')

# # 讀
with open('file1.txt', 'r', encoding='utf-8') as f:
    res = f.read()
    print(res)
#
# # 追加
with open('file1.txt', 'a', encoding='utf-8') as f:
    f.write('圍城')
    # f.close()



'''
對圖片、音頻、視頻讀寫
rb模式,讀取二進制,不須要指定字符編碼
'''

# 讀取相片cxk.jpg
with open('cxk.jpg', 'rb') as f:
    res = f.read()
    print(res)

jpg = res

# 把cxk.jpg的二進制流寫入cxk_copy.jpg文件中
with open('cxk_copy1.jpg', 'wb') as f_w:
    f_w.write(jpg)


'''
with 管理多個文件
'''
# 經過with來管理open打開的兩個文件句柄f_r,f_w
with open('cxk.jpg', 'rb') as f_r, open('cxk_copy2.jpg', 'wb') as f_w:
    # 經過f_r句柄把圖片的二進制流讀取出來
    res = f_r.read()
    # 經過f_w句柄把圖片的二進制流寫入cxk_copy.jpg文件中
    f_w.write(res)

 



四 函數
什麼是函數?
函數指的其實一把工具。

使用函數的好處:
1.解決代碼冗餘問題。
2.使代碼的結構更清晰。
3.易管理。

函數的使用必須遵循: 先定義,後調用。

函數定義語法:

def 函數名(參數1, 參數2...):
'''註釋: 聲明函數'''
邏輯代碼

return 返回值

def: defind 定義。
函數名: 必須看其名知其意。
(): 接收外部傳入的參數。
註釋: 用來聲明函數的做用。
return: 返回給調用者的值。
        
函數調用:
    函數名 + () 調用
    
'''

# # 1.無參函數
def login():
    user = input('請輸入用戶名').strip()
    pwd = input('請輸入密碼').strip()

    if user == 'tank' and pwd == '123':
        print('login successful!')

    else:
        print('login error!')
#
#
# # 函數的內存地址
print(login)
#
#
# # 函數調用
login()


# 2.有參函數
# username,password 用來接收外部傳入的值
def login(username, password):
    user = input('請輸入用戶名').strip()
    pwd = input('請輸入密碼').strip()

    if user == username and pwd == password:
        print('login successful!')

    else:
        print('login error!')


# # 函數調用
# # 若函數在定義時須要接收參數,調用者必須爲其穿傳參
login('tank', '123')


# 3.空函數
'''
ATM:
    1.登陸
    2.註冊
    3.提現
    4.取款
    5.轉帳
    6.還款
'''


# # 登陸功能
# def login():
#     # 表明什麼都不作
#     pass
#
#
# # 註冊功能
# def register():
#     # 表明什麼都不作
#     pass
#
#
# # 還款功能
# def repay():
#     pass

# ...


'''
函數的參數:
'''
# 在定義階段: x, y稱之爲形參。
def func(x, y):  # x, y
    print(x, y)

# # 在調用階段: 10, 100 稱之爲實參。
func(10, 100)


# '''
# 位置參數:
#     位置形參
#     位置實參
#     必須按照位置一一傳參。
# '''
# # 在定義階段: 位置形參
def func(x, y):  # x, y
    print(x, y)
# #
# # # 在調用階段: 10, 100 稱位置實參。
func(10, 100)  # 10 100
#
# '''
# 關鍵字參數:
#     關鍵字實參
#     按照關鍵字傳參。
# '''
# # 位置形參x, y
def func(x, y):
    print(x, y)
#
# # 在調用階段: x=10, y=100稱之爲關鍵字參數。
func(y=111, x=10)  # 10 111

# 不能少傳
func(y=111)  # 報錯TypeError


# 不能多傳
func(y=111, x=222, z='333')  # 報錯TypeError


'''
默認參數:
    在定義階段,爲參數設置默認值
'''

def foo(x=10, y=20):
    print(x, y)
#
# # 不傳參,則使用默認參數
foo()
#
# # 傳參,使用傳入的參數
foo(200, 300)
'''
函數的嵌套定義:
    在函數內部定義函數。

函數對象:
    函數的內存地址稱之爲函數對象。

函數的名稱空間:
    內置: 
        python解析器自帶的都稱之爲"內置名稱空間"。

    全局:
        全部頂着頭寫的變量、函數...都稱之爲"全名稱空間"。
        
    局部:
        在函數內部定義的,都稱之爲"局部名稱空間"。

    名稱空間加載順序:
        內置 ---> 全局 ---> 局部
    
    名稱空間查找順序:  
        局部 ---> 全局 ---> 內置
'''


# 函數的嵌套定義
def func1():
    print('from func1...')

    def func2():
        print('from func2...')


# 函數對象
print(func1)


def f1():
    pass


def f2():
    pass


dic1 = {'1': f1, '2': f2}

choice = input('請選擇功能編號: ')
if choice == '1':
    print(dic1[choice])
    dic1[choice]()

elif choice == '2':
    print(dic1[choice])
    dic1[choice]()

x = 10


# 名稱空間
# 函數的嵌套定義
def func1():
    # x = 20

    print('from func1...')

    print(x)  # 報錯

    x = 30

    def func2():
        print('from func2...')


func1()

總結:今日內容比較多,也是python的基礎。明日就開始講爬蟲了,還有點小期待呢!python

相關文章
相關標籤/搜索