day4 - 数字和列表
数字
python中和数字相关的类型:
int(整型)、float(浮点型)、bool(布尔)、complex(复数)
-
int(整型) -- 所有整数对应的类型
python 中整数支持的4中写法:
十进制数、二进制数、八进制数、十六进制数
基数 程序中表示 其他进制转换 十进制 0 - 9 直接写:1,2,52,36,0 二进制 0 和 1 0b/0B: 0b1011 bin(数字) 八进制 0 - 7 0o/0O: 0o1574 oct(数字) 十六进制 0 - 9,a-f(A-F) 0x/0X: 0x12aff hex(数字)
-
floa(浮点型) -- 所有小数对应的类型
# 支持科学技术法: xey - x乘以10的y次方 # 计算机在存储浮点数的时候可能会出现误差 num = 3e7 num2 = 3.24e-4
-
bool(布尔)
bool类型的本质就是一种特殊的
整型
,其中True,就是1,False就是0
print(1 + True) # 2 print(1 + False) # 1
-
complex(复数)
由实部和虚部组成的数字就是复数,数学中虚数单位是i,python中虚数单位是j:A + Bj `注意:如果虚部是1这个1不能省`
num5 = 10+ 32j num6 = 2 + 1j print(type(num5)) #
print(num5 + num6) # (12+33j) print(num5 * num6) # (-12+74j)
列表
-
什么是列表(list)
1)列表是容器型数据类型(序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1,元素2,元素3,....]
- 列表是可变的(元素个数可变,元素值可变);列表是有序(元素在容器中有顺序)
3)任何类型的数据都可以作为列表的元素
# 1)空列表 list1 = [] print(list1,type(list1)) # []
# 2) 列表元素是任何类型的数据 list2 = [45,'ad',True,[1,5],'adfd']
-
列表的增删改查
-
查 - 获取元素
a.获取单个元素
# 列表[下标] - 获取列表中指定下标对应的元素 # 列表 - 想要获取元素对应的列表 # [] - 固定写法 # 下标 - 又叫索引;是元素在列表中位置信息对应的标号,每个元素对应的下标有两种:从0开始依次增加(0表示第一个...)从-1开始依次减小(-1表示第一个...) movies = ['八佰','花木兰','信条'] print(movies[1]) # 花木兰 # 注意:下标不能越界 # print(movies[10]) # 报错 IndexError: list index out of range
b.遍历 - 将列表中的元素一个一个的全部取出来
""" for 变量 in 列表: 循环体 这儿的变量获取到的就是列表中的元素 """ # 直接遍历 for i in movies: print(i)
c.遍历同时获取列表元素和元素对应的下标
""" for 变量1,变量2 in 列表: 循环体 变量1获取到的是每个元素对应的下标,变量2获取到的是每个元素 """ for x,y in movies: print('x:',x,'y:',y) # 通过遍历列表中每个元素的下标来间接的遍历元素 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(下标,元素) -- 在列表指定的下标对应的元素前插入指定的元素
hero_list = ['鲁班七号','亚瑟','卢锡安'] hero_list.insert(1,'妲己') print(hero_list)
-
删 - 删除元素
a.del 列表[下标] - 删除列表中指定下标对应的元素
masters = ['貂蝉','小乔','王昭君','周瑜'] del masters[1] print(masters)
b.remove(元素) - 删除列表指定的元素
masters = ['貂蝉','小乔','王昭君','周瑜'] masters.remove('小乔') print(masters)
c.pop() - 取出列表最后一个元素
pop(下标) - 取出列表指定下标对应的元素
masters = ['鲁班七号', '盲嶒', '妲己','亚瑟', '卢锡安', '妲己'] x = masters.pop() print(masters,x) # ['鲁班七号', '盲嶒', '妲己', '亚瑟', '卢锡安'] 妲己 x = masters.pop(1) print(masters,x) # ['鲁班七号', '妲己', '亚瑟', '卢锡安'] 盲嶒
-
改 - 修改元素的值
列表[下标] = 新值 - 将列表指定下标对应的元素修改成新值
teleplays = ['人名的名义','甄嬛传','绝命毒师','请回答1988'] teleplays[0] = '特种兵' print(teleplays)
作业
1.已知一个数字列表,求列表中心元素。
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])
"""
奇数:count // 2
个数 下标
5 -> 2
7 -> 3
9 -> 4
偶数:count // 2, count // 2 - 1
4 -> 1,2
6 -> 2,3
8 -> 3,4
"""
2.已知一个数字列表,求所有元素和。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sum = 0
for s in list1:
sum += s
print(sum)
print(sum(list1))
3.已知一个数字列表,输出所有奇数下标元素。
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.已知一个数字列表,输出所有元素中,值为奇数的元素。
list1 = [25, 65, 98, 99, 2, 12, 65, 35, 65]
for num in list1:
if num & 1:
print(num)
5.已知一个数字列表,将所有元素乘二。
例如: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的列表,数组内有10个人名,要求去掉重复的
例如: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.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
# 方法一:
scores = [96,87,63,84,82,100,75,56]
max = min = scores[0] # 假设第一个数为最大值、最小值
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.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
scores = [96,87,63,84,82,100,75,56]
max = 0 # 假设一个最大值
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.获取列表中出现次数最多的元素
例如: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之间有多少个素数,并输出所有素数。
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之间共有{}个素数:'.format(count),nums)
-
求整数1~100的累加值,但要求跳过所有个位为3的数。
sum = 0 for i in range(101): if i % 10 == 3: continue sum += i print(sum)
-
有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数
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! 的结果
求1+2!+3!+...+20!的和
-
写程序求表达式 a + aa + aaa + aaaa+ ... 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)
例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333
-
控制台输出三角形
a.根据n的值的不同,输出相应的形状 n = 5时 n = 4 ***** **** **** *** *** ** ** * * n = 4 for j in range(n): for i in range(j,n): print('*',end=' ') print('') b.根据n的值的不同,输出相应的形状(n为奇数) n = 5 n = 7 * * *** *** ***** ***** ******* c. 根据n的值的不同,输出相应的形状 n = 4 1 121 12321 1234321 n = 5 1 121 12321 1234321 123454321
小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?
一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)
求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)