day4 - 數(shù)字和列表
數(shù)字
python中和數(shù)字相關(guān)的類型:
int(整型)赠摇、float(浮點(diǎn)型)、bool(布爾)、complex(復(fù)數(shù))
-
int(整型) -- 所有整數(shù)對應(yīng)的類型
python 中整數(shù)支持的4中寫法:
十進(jìn)制數(shù)、二進(jìn)制數(shù)士飒、八進(jìn)制數(shù)、十六進(jìn)制數(shù)
基數(shù) 程序中表示 其他進(jìn)制轉(zhuǎn)換 十進(jìn)制 0 - 9 直接寫:1,2,52,36,0 二進(jìn)制 0 和 1 0b/0B: 0b1011 bin(數(shù)字) 八進(jìn)制 0 - 7 0o/0O: 0o1574 oct(數(shù)字) 十六進(jìn)制 0 - 9蔗崎,a-f(A-F) 0x/0X: 0x12aff hex(數(shù)字)
-
floa(浮點(diǎn)型) -- 所有小數(shù)對應(yīng)的類型
# 支持科學(xué)技術(shù)法: xey - x乘以10的y次方 # 計算機(jī)在存儲浮點(diǎn)數(shù)的時候可能會出現(xiàn)誤差 num = 3e7 num2 = 3.24e-4
-
bool(布爾)
bool類型的本質(zhì)就是一種特殊的
整型
酵幕,其中True,就是1,F(xiàn)alse就是0
print(1 + True) # 2 print(1 + False) # 1
-
complex(復(fù)數(shù))
由實(shí)部和虛部組成的數(shù)字就是復(fù)數(shù)蚁趁,數(shù)學(xué)中虛數(shù)單位是i裙盾,python中虛數(shù)單位是j:A + Bj `注意:如果虛部是1這個1不能省`
num5 = 10+ 32j num6 = 2 + 1j print(type(num5)) # <class 'complex'> print(num5 + num6) # (12+33j) print(num5 * num6) # (-12+74j)
列表
-
什么是列表(list)
1)列表是容器型數(shù)據(jù)類型(序列),將[]作為容器的標(biāo)志,里面多個元素用逗號隔開:[元素1,元素2,元素3番官,....]
- 列表是可變的(元素個數(shù)可變庐完,元素值可變);列表是有序(元素在容器中有順序)
3)任何類型的數(shù)據(jù)都可以作為列表的元素
# 1)空列表 list1 = [] print(list1,type(list1)) # [] <class 'list'> # 2) 列表元素是任何類型的數(shù)據(jù) list2 = [45,'ad',True,[1,5],'adfd']
-
列表的增刪改查
-
查 - 獲取元素
a.獲取單個元素
# 列表[下標(biāo)] - 獲取列表中指定下標(biāo)對應(yīng)的元素 # 列表 - 想要獲取元素對應(yīng)的列表 # [] - 固定寫法 # 下標(biāo) - 又叫索引徘熔;是元素在列表中位置信息對應(yīng)的標(biāo)號门躯,每個元素對應(yīng)的下標(biāo)有兩種:從0開始依次增加(0表示第一個...)從-1開始依次減小(-1表示第一個...) movies = ['八佰','花木蘭','信條'] print(movies[1]) # 花木蘭 # 注意:下標(biāo)不能越界 # print(movies[10]) # 報錯 IndexError: list index out of range
b.遍歷 - 將列表中的元素一個一個的全部取出來
""" for 變量 in 列表: 循環(huán)體 這兒的變量獲取到的就是列表中的元素 """ # 直接遍歷 for i in movies: print(i)
c.遍歷同時獲取列表元素和元素對應(yīng)的下標(biāo)
""" for 變量1酷师,變量2 in 列表: 循環(huán)體 變量1獲取到的是每個元素對應(yīng)的下標(biāo)讶凉,變量2獲取到的是每個元素 """ for x,y in movies: print('x:',x,'y:',y) # 通過遍歷列表中每個元素的下標(biāo)來間接的遍歷元素 for i in range(3): print(movies[i]) list1 = [25,56,8,63,9,8,2,522,52] for x in range(len(list1)): print(list1[x])
-
-
增 - 添加元素
a.列表.append(元素) -- 在指定列表的最后添加指定的元素
hero_list = ['魯班七號','亞瑟','盧錫安'] hero_list.append('妲己') print(hero_list)
b.列表.insert(下標(biāo),元素) -- 在列表指定的下標(biāo)對應(yīng)的元素前插入指定的元素
hero_list = ['魯班七號','亞瑟','盧錫安'] hero_list.insert(1,'妲己') print(hero_list)
-
刪 - 刪除元素
a.del 列表[下標(biāo)] - 刪除列表中指定下標(biāo)對應(yīng)的元素
masters = ['貂蟬','小喬','王昭君','周瑜'] del masters[1] print(masters)
b.remove(元素) - 刪除列表指定的元素
masters = ['貂蟬','小喬','王昭君','周瑜'] masters.remove('小喬') print(masters)
c.pop() - 取出列表最后一個元素
? pop(下標(biāo)) - 取出列表指定下標(biāo)對應(yīng)的元素
masters = ['魯班七號', '盲嶒', '妲己','亞瑟', '盧錫安', '妲己'] x = masters.pop() print(masters,x) # ['魯班七號', '盲嶒', '妲己', '亞瑟', '盧錫安'] 妲己 x = masters.pop(1) print(masters,x) # ['魯班七號', '妲己', '亞瑟', '盧錫安'] 盲嶒
-
改 - 修改元素的值
列表[下標(biāo)] = 新值 - 將列表指定下標(biāo)對應(yīng)的元素修改成新值
teleplays = ['人名的名義','甄嬛傳','絕命毒師','請回答1988'] teleplays[0] = '特種兵' print(teleplays)
作業(yè)
1.已知一個數(shù)字列表山孔,求列表中心元素懂讯。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
if len(list1) & 1:
print(list1[len(list1) // 2])
else:
print(list1[len(list1) // 2 - 1], list1[len(list1) // 2])
"""
奇數(shù):count // 2
個數(shù) 下標(biāo)
5 -> 2
7 -> 3
9 -> 4
偶數(shù):count // 2, count // 2 - 1
4 -> 1,2
6 -> 2,3
8 -> 3,4
"""
2.已知一個數(shù)字列表,求所有元素和台颠。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sum = 0
for s in list1:
sum += s
print(sum)
print(sum(list1))
3.已知一個數(shù)字列表褐望,輸出所有奇數(shù)下標(biāo)元素。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(len(list1)):
if i & 1:
print(list1[i])
for index in range(1,len(list1),2)
print(list1[index])
print(list1[1::2])
4.已知一個數(shù)字列表串前,輸出所有元素中瘫里,值為奇數(shù)的元素。
list1 = [25, 65, 98, 99, 2, 12, 65, 35, 65]
for num in list1:
if num & 1:
print(num)
5.已知一個數(shù)字列表荡碾,將所有元素乘二谨读。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 修改列表元素
for index in range(len(list1)):
list1[index] *= 2
6.有一個長度是10的列表,數(shù)組內(nèi)有10個人名坛吁,要求去掉重復(fù)的
例如:names = ['張三', '李四', '大黃', '張三'] -> names = ['張三', '李四', '大黃']
names = ['張三', '李四', '大黃', '張三']
# 方法一:
names1 = []
for i in range(0,len(names)):
for j in range(i+1,len(names)):
if names[i] == names[j]:
break
else:
names1.append(names[i])
print(names1)
names = ['張三', '李四', '大黃', '張三','張三','李四','王五','張三','小明','小紅']
# 方法二:
new_names = []
for i in names:
if i not in new_names:
new_names.append(i)
print(new_names)
# 方法四: # 拷貝一個新列表 遍歷新列表劳殖,刪除原列表
for name in names.copy():
if names.count(name) > 1:
names.remove(name)
print(names)
# 方法三:集合,集合是可迭代的
names = set(names)
print(names)
7.用一個列表來保存一個節(jié)目的所有分?jǐn)?shù),求平均分?jǐn)?shù)(去掉一個最高分拨脉,去掉一個最低分闷尿,求最后得分)
# 方法一:
scores = [96,87,63,84,82,100,75,56]
max = min = scores[0] # 假設(shè)第一個數(shù)為最大值、最小值
sum = 0
for i in range(len(scores)):
if max < scores[i]:
max = scores[i]
elif min > scores[i]:
min = scores[i]
sum += scores[i]
print('最后平均分:',(sum - max - min) / (len(scores) -2))
# 方法二:
scores = [96,87,63,84,82,100,75,56]
sum =0
scores.remove(max(scores))
scores.remove(min(scores))
for i in scores:
sum += i
print(float(sum / len(scores)))
# 方法三:
scores.remove(max(scores))
scores.remove(min(scores))
print(sum(scores) / len(scores))
8.有兩個列表A和B女坑,使用列表C來獲取兩個列表中公共的元素
例如: A = [1, 'a', 4, 90] B = ['a', 8, 'j', 1] --> C = [1, 'a']
A = [1, 'a', 4, 90,1]
B = ['a', 8, 'j', 1]
C = []
for a in A:
if a in B and a not in C:
C.append(a)
print(C) # [1, 'a']
9.有一個數(shù)字列表,獲取這個列表中的最大值.(注意: 不能使用max函數(shù))
例如: nums = [19, 89, 90, 600, 1] —> 600
scores = [96,87,63,84,82,100,75,56]
max = 0 # 假設(shè)一個最大值
for i in scores:
if max < i:
max = i
print(max)
max_score = scores[0]
for score in scores[1:]:
if score > max_score:
max_score = score
print(max_score)
10.獲取列表中出現(xiàn)次數(shù)最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [1, 2, 3,1,4,2,1,3,2,7,3,3]
count = 0
cou = 0
cou_i = 0
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i] == nums[j]:
count += 1
if cou < count:
cou = count
cou_i = i
print(nums[cou_i])
# 方法二:
nums = [1, 2, 3,1,4,2,1,3,7,3,3
max_count = 0
for x in nums:
count = nums.count(x)
if count > max_count:
max_count = count
new_num = []
for x in nums:
if nums.count(x) == max_count and x not in new_num:
new_num.append(x)
print(new_num)
-
判斷101-200之間有多少個素數(shù)统舀,并輸出所有素數(shù)匆骗。
count = 0 nums = [] for i in range(101, 200): for j in range(2, i): if i % j == 0: break else: count += 1 nums.append(j) print('101-200之間共有{}個素數(shù):'.format(count),nums)
-
求整數(shù)1~100的累加值,但要求跳過所有個位為3的數(shù)誉简。
sum = 0 for i in range(101): if i % 10 == 3: continue sum += i print(sum)
-
有?分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數(shù)列的第20個分?jǐn)?shù)
n = 20 p1,p2 = 2,1 if n == 1: p1,p2 = 2,1 else: for x in range(n-1): p1,p2 = p1+p2 ,p1 print(p1,'/',p2)
寫程序計算 n 的階乘 n! 的結(jié)果
求1+2!+3!+...+20!的和
-
寫程序求表達(dá)式 a + aa + aaa + aaaa+ ... 的結(jié)果碉就,其中a是1~9的數(shù)字,求和的項(xiàng)數(shù)用n來控制闷串。(a和n可以用變量來表示)
例如:a為3瓮钥, n為5的時候: 3 + 33 + 333 + 3333 + 33333
-
控制臺輸出三角形
a.根據(jù)n的值的不同,輸出相應(yīng)的形狀 n = 5時 n = 4 ***** **** **** *** *** ** ** * * n = 4 for j in range(n): for i in range(j,n): print('*',end=' ') print('') b.根據(jù)n的值的不同,輸出相應(yīng)的形狀(n為奇數(shù)) n = 5 n = 7 * * *** *** ***** ***** ******* c. 根據(jù)n的值的不同碉熄,輸出相應(yīng)的形狀 n = 4 1 121 12321 1234321 n = 5 1 121 12321 1234321 123454321
小明單位發(fā)了100元的購物卡桨武,小明到超市買三類洗化用品,洗發(fā)水(15元)锈津,香皂(2元)呀酸,牙刷(5元)。要把100元正好花掉琼梆,可有哪些購買結(jié)合性誉?
一張紙的厚度大約是0.08mm,對折多少次之后能達(dá)到珠穆朗瑪峰的高度(8848.13米)茎杂?
古典問題:有一對兔子错览,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子煌往,假如兔子都不死倾哺,問每個月的兔子總數(shù)為多少?
將一個正整數(shù)分解質(zhì)因數(shù)携冤。例如:輸入90,打印出90=2x3x3x5悼粮。
某個公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù)曾棕,在傳遞過程中是加密的扣猫,加密規(guī)則如下:每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換翘地,第二位和第三位交換申尤。求輸入的四位整數(shù)加密后的值
將一個正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2x3x3x5衙耕。
本金10000元存入銀行昧穿,年利率是千分之三。每過1年橙喘,將本金和利息相加作為新的本金时鸵。計算5年后,獲得的本金是多少厅瞎。
輸入一個整數(shù)饰潜,計算它各位上數(shù)字的和。(注意:輸入的整數(shù)可以是任意位)
求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)和簸。(提示:公約數(shù)一定小于等于兩數(shù)中的小的那個數(shù)彭雾,且能同時被兩個數(shù)整除;公倍數(shù)一定大于等于兩數(shù)中的大數(shù)锁保,且是大數(shù)的倍數(shù)又能被兩數(shù)中的小數(shù)整除)