今天第二周诺核,給大家分享的是:
python數(shù)字類型和列表的知識披粟。
平時偶爾會發(fā)發(fā)pygame小游戲代碼碧绞,但是日常課程還是要做的祝钢。
一比规、數(shù)字類型
python中的數(shù)字類型: int(整型)、float(浮點型)拦英、bool(布爾)蜒什、complex(復(fù)數(shù))
1. int(整型)
所有整數(shù)對應(yīng)的類型。(注意:在python2.x有l(wèi)ong)
2.float(浮點型)
所有的小數(shù)對應(yīng)的類型, 支持科學計數(shù)法
print(3e4, 4e-2)
3. bool(布爾)
只有True和False兩個值疤估,其他 True 本質(zhì)就是數(shù)字 1灾常, False 本質(zhì)是數(shù)字 0 。
print(1+1, True + 1, False + 1)
4.complex(復(fù)數(shù))
包含實部和虛部的數(shù)就是復(fù)數(shù)铃拇,對應(yīng)的數(shù)據(jù)類型是 complex钞瀑。
python 中表示復(fù)數(shù)的時候,虛數(shù)單位是 j锚贱; j前面如果是1仔戈,1不能省
num1 = 10+2j
num2 = 2 - 1j
num3 = 20j
print(type(num1), type(num2))
python支持復(fù)數(shù)運算
print(num1 + num2)
print(num1 * num2)
"""
10 2
2j -1j
-10j + 20 + 4j + 2 = 22-6j
"""
5. 數(shù)據(jù)類型轉(zhuǎn)換
python中所有數(shù)據(jù)類型的轉(zhuǎn)換方式: 類型名(數(shù)據(jù))
1)整型: int(數(shù)據(jù)) - 將制定的數(shù)據(jù)轉(zhuǎn)換成10進制的整數(shù)
所有的數(shù)字類型對應(yīng)的數(shù)據(jù)都可以轉(zhuǎn)換成整型(復(fù)數(shù)不行),部分字符串也可以轉(zhuǎn)換成整型
對于字符串來說拧廊,去掉引號以后本身是合法的制定進制的整數(shù)對應(yīng)的字符串才能轉(zhuǎn)換成對應(yīng)的整型
print(int(12.5), int(-12.9)) # 12, -12
print(int(True), int(False)) # 1, 0
print(int('123')) # 123
print(int('+123'), int('-123')) # 123 -123
print(int('123.25')) # 報錯
print(int('abc')) # 報錯
# int(數(shù)據(jù)监徘,進制數(shù))
print(int('0b1101', 2))
print(int('1101', 2)) # 13
print(int('1201', 2)) # 報錯
2) 浮點型:float(數(shù)據(jù))
整型和布爾都可以轉(zhuǎn)換成浮點型,部分字符串也可以轉(zhuǎn)換成浮點型(去掉引號后本身就是一個合法的浮點型或者整型數(shù)據(jù))吧碾。
print(float(10)) # 10.0
print(float(True)) # 1.0
print(float('100')) # 100.0
print(float('12.5')) # 12.5
# print(float('12.5a')) # 報錯
print(float('3e4')) # 30000.0
3)布爾:bool(數(shù)據(jù))
所有類型的所有的數(shù)據(jù)都可以轉(zhuǎn)換成布爾凰盔。
所有零值或者空值會轉(zhuǎn)換成False,其他都是True
二、 列表
容器型數(shù)據(jù)類型:可以同時保存多個數(shù)據(jù)的數(shù)據(jù)倦春。常見的容器型數(shù)據(jù)類型有:列表户敬、元組、字典睁本、集合尿庐、字符串、迭代器呢堰、生成器
容器中的每個獨立的數(shù)據(jù)叫元素
1. 什么是列表
列表是容器型數(shù)據(jù)類型抄瑟,將[]作為容器的標志,里面的多個數(shù)據(jù)(元素)用逗號隔開枉疼。比如: [120, 30, 40]
列表是可變的(列表中元素的個數(shù)和值可變);列表是有序的
列表中的元素: 可是任何類型的數(shù)據(jù)皮假;不同元素的類型可以不一樣
scores = [90, 89, 67, 90, 56, 88]
print(scores)
list1 = [90, 12.89, True, 'abc', [1, 2, 3]]
print(list1)
2. 獲取列表元素
1)獲取單個元素
語法:
列表[下標]
說明:
列表 - 任何結(jié)果是列表的表達式: 獨立的列表數(shù)據(jù)鞋拟、保存列表的變量、返回值是列表的函數(shù)調(diào)用表達式惹资、結(jié)果是列表的運算表達式
[] - 固定寫法
下標 - 想要獲取的元素對應(yīng)的下標
補充:什么是下標
下標又叫索引贺纲,是用來表示有序序列中元素的位置(順序)。
列表中的每個元素都有固定的下標用來表示這個元素在列表中的位置褪测,下標值的范圍是從0開始依次增加猴誊,其中0表示第一個元素...
列表中的每個元素有兩種下標值,一種是正的下標值(從0開始),另一種是負的下標值(從-1開始汰扭,依次減少稠肘,-1表示是最后一個元素)
注意: 下標不能越界
names = ['張飛', '劉備', '關(guān)羽']
print(names[1], names[-2]) # 劉備 劉備
print([1, 2, 3, 4][1])
print(names[10]) # IndexError: list index out of range
2)獲取部分元素 - 切片
語法:
列表[開始下標:結(jié)束下標:步長] - 從開始下標開始,每次下標值增加步長萝毛,取到結(jié)束下標前為止
說明:
列表 - 任何結(jié)果是列表的表達式: 獨立的列表數(shù)據(jù)项阴、保存列表的變量、返回值是列表的函數(shù)調(diào)用表達式笆包、結(jié)果是列表的運算表達式
[] - 固定寫法
開始下標环揽、結(jié)束下標 - 下標值,整數(shù)
步長 - 整數(shù)
如果步長是正,表示獲取元素的時候是從前往后取庵佣, 保證開始下標對應(yīng)的元素要在結(jié)束下標對應(yīng)的元素的前面歉胶,否則切片的結(jié)果是[];
如果步長是負巴粪,表示獲取元素的時候是從后往前取, 保證開始下標對應(yīng)的元素要在結(jié)束下標對應(yīng)的元素的后面通今,否則切片的結(jié)果是[]。
注意: 切片的時候下標可以越界
nums = [1, 2, 3, 4, 5, 6, 7, 8]
print(nums[1:4:1]) # range(1, 4, 1) -> 1, 2, 3
names = ['魯班7號', '亞索', '妖姬', '盲僧', '狗頭']
print(names[1:3:1]) # ['亞索', '妖姬']
print(names[-4:3:1]) # ['亞索', '妖姬']
print(names[1:-1:2]) # ['亞索', '盲僧']
print(names[4:1:1]) # []
print(names[-1:1:1]) # []
print(names[-1:1:-1]) # ['狗頭', '盲僧', '妖姬']
print(names[-1:0:-2]) # ['狗頭', '妖姬']
print(names[2:5:1]) # ['妖姬', '盲僧', '狗頭']
3)切片語法的省略寫法
a. 省略步長
列表[開始下標:結(jié)束下標] ---> 列表[開始下標:結(jié)束下標:1]
names = ['魯班7號', '亞索', '妖姬', '盲僧', '狗頭']
print(names[1:4]) # ['亞索', '妖姬', '盲僧']
print(names[-2:4]) # ['盲僧']
print(names[-1:4]) # []
b. 省略開始下標
列表[:結(jié)束下標:步長] / 列表[:結(jié)束下標]
步長為正肛根, 表示從第一個元素開始往后取
步長為負辫塌,表示從最后一個元素開始往前取
movies = ['肖生克的救贖', '鄉(xiāng)村老尸', '霸王別姬', '綠里奇跡', '辛德勒的名單', '盜夢空間']
print(movies[:-1]) # ['肖生克的救贖', '鄉(xiāng)村老尸', '霸王別姬', '綠里奇跡', '辛德勒的名單']
print(movies[:2:-1]) # ['盜夢空間', '辛德勒的名單', '綠里奇跡']
print(movies[:0:-2]) # ['盜夢空間', '綠里奇跡', '鄉(xiāng)村老尸']
c. 省略結(jié)束下標
列表[開始下標::步長] / 列表[開始下標:]
步長為正,從前往后取到最后一個元素為止
步長為負派哲,從后往前取到第一個元素為止
print(movies[-3:]) # ['綠里奇跡', '辛德勒的名單', '盜夢空間']
print(movies[-1::2]) # ['盜夢空間']
d. 同時省略開始下標和結(jié)束下標
列表[::步長] / 列表[:]
步長為正臼氨,從第一個元素取到最后一個元素
步長為負,從最后一個元素取到第一個元素
movies = ['肖生克的救贖', '鄉(xiāng)村老尸', '霸王別姬', '綠里奇跡', '辛德勒的名單', '盜夢空間']
print(movies[::-1]) # ['盜夢空間', '辛德勒的名單', '綠里奇跡', '霸王別姬', '鄉(xiāng)村老尸', '肖生克的救贖']
print(movies[:]) # ['肖生克的救贖', '鄉(xiāng)村老尸', '霸王別姬', '綠里奇跡', '辛德勒的名單', '盜夢空間']
print(movies[::2]) # ['肖生克的救贖', '霸王別姬', '辛德勒的名單']
4)遍歷列表 - 將列表中的元素一個一個的取出來
方法一:直接法
for 變量 in 列表:
循環(huán)體
方法二:通過下標間接獲取
for 下標 in 下標對應(yīng)的數(shù)字序列:
列表[下標]
循環(huán)體
movies = ['肖生克的救贖', '鄉(xiāng)村老尸', '霸王別姬', '綠里奇跡', '辛德勒的名單', '盜夢空間']
for m in movies:
print(m)
print('===================================')
len(列表) - 返回列表中元素的個數(shù)
for index in range(len(movies)):
print(movies[index])
練習1:用一個列表保存一個班所有學生的分數(shù)芭届,統(tǒng)計不及格學生的人數(shù)
練習2:用一個列表保存一個班所有學生的分數(shù)储矩,計算班級學生的平均分
scores = [89, 45, 60, 23, 68, 9, 76]
count = 0
for score in scores:
if score < 60:
count += 1
print('不及格學生人數(shù):', count)
sum1 = 0
for score in scores:
sum1 += score
print('平均分:', sum1 / len(scores))
三、列表的增刪改&判斷
1.增 - 添加元素
1)append - 追加
列表.append(元素) - 在指定列表的最后添加指定的元素
list1 = [10, 20, 30]
print(list1)
list1.append(100)
print(list1)
2)insert - 插入
列表.insert(下標, 元素) - 在指定列表指定下標對應(yīng)的元素前插入指定的元素
list1 = [10, 20, 30]
list1.insert(1, 100)
print(list1)
練習:不斷輸入學生的成績褂乍,并且把所有輸入的成績保存在一個列表中持隧。(輸入-1表示結(jié)束)
請輸入成績: 56
請輸入成績: 90
請輸入成績: 89
請輸入成績: -1
[56, 90, 89]
scores = []
while True:
score = int(input('請輸入成績:'))
if score == -1:
break
else:
# scores.append(score)
scores.insert(0, score)
print(scores)
2. 刪 - 刪除元素
1) del語句
del 列表[下標] - 刪除列表中指定下標對應(yīng)的元素(下標不能越界)
teleplays = ['甄嬛傳', '大明王朝', '瑯琊榜', '慶余年', '還珠格格', '請回答1988']
del teleplays[2]
print(teleplays)
del teleplays[-4]
print(teleplays)
2) remove
列表.remove(元素) - 刪除列表中指定的元素(如果指定的元素不存在,程序會報錯;如果指定的元素存在多個逃片,只刪最前面的那一個)
teleplays.remove('西游記') # ValueError: list.remove(x): x not in list
teleplays = ['甄嬛傳', '大明王朝', '瑯琊榜', '慶余年', '還珠格格', '請回答1988', '甄嬛傳']
teleplays.remove('甄嬛傳')
print(teleplays)
3) pop
列表.pop() - 取出列表中的最后一個元素屡拨,并且返回被取出的元素
列表.pop(下標) - 取出列表中指定下標對應(yīng)的元素,并且返回被取出的元素
teleplays = ['甄嬛傳', '大明王朝', '瑯琊榜', '慶余年', '還珠格格', '請回答1988', '甄嬛傳']
t = teleplays.pop(1)
print(teleplays)
print(t)
t = teleplays.pop()
print(teleplays, t)
3.改 - 修改元素的值
a. 列表[下標] = 新元素 - 將列表中指定下標對應(yīng)的元素修改成新的元素 (下標不能越界)
anime_list = ['火影忍者', '海賊王', '死神', '天線寶寶', '死亡筆記']
anime_list[-2] = '海綿寶寶'
print(anime_list)
練習: 將列表[89, 45, -55, 30, -78, 90, -34, 87, 10, 59, 100, -19]中所有的負數(shù)都改成0
[89, 45, 0, 30, 0, 90, 0, 87, 10, 59, 100, 0]
nums = [89, 45, -55, 30, -78, 90, -34, 87, 10, 59, 100, -19]
for index in range(len(nums)):
if nums[index] < 0:
nums[index] = 0
print(nums)
b. 列表1[開始下標:結(jié)束下標] = 列表2 - 將列表1中開始下標到結(jié)束下標選中的所有元素替換成列表2中所有的元素
nums = [10, 20, 30, 40, 50]
nums[1:3] = [100, 200, 300] # [10, 100, 200, 300, 40, 50]
print(nums)
4. in 和 not in
元素 in 列表 - 判斷指定元素是否在指定列表中
元素 in not 列表 - 判斷指定元素是否不在指定列表中
print(10 in nums) # True
print(20 not in nums) # True