python之道_python之道07

2.用户输入一个数字,判断一个数是否是水仙花数。

水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 13 + 53 + 3**3

答案

# 方法一:

while 1:

my_input = input('>>>')

li = list(my_input)

sum = int(li[0])**3 + int(li[1])**3 + int(li[-1])**3

if sum == int(my_input):

print('是水仙花')

else:

print('不是水仙花')

'''

个人见解

使用while循环列表加切片,将列表中的每个值都切出来进行计算,这种方法能实现但是比较low,这个可以持续输入判断,是不是水仙花数,常见的水仙花三位数的有4个:153,370,371,407

'''

# 方法二:

count = 0

my_input = input('>>>')

for i in my_input:

x = int(i)

count += x ** 3 # 1 #5**3 +1 #5**3+3**+1

if count == int(my_input):

print('是水仙花')

else:

print('不是水仙花')

'''

输出结果

>>>370

是水仙花

>>>125

不是水仙花

'''

'''

个人见解

该方法简单高效,推荐使用

'''

3.请说出下面a,b,c三个变量的数据类型。

a = ('太白金星')

b = (1,)

c = ({'name': 'barry'})

答案

a是字符型

b是元组

c是字典

4.按照需求为列表排序:

l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]

从大到小排序

答案

l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]

l1.sort(reverse=True)

print(l1)

'''

输出结果

[9, 8, 7, 6, 5, 4, 3, 2, 1]

'''

从小到大排序

答案

l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]

l1.sort()

print(l1)

'''

输出结果

[1, 2, 3, 4, 5, 6, 7, 8, 9]

'''

反转l1列表

答案

l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]

l1.reverse()

print(l1)

'''

输出结果

[2, 4, 5, 8, 9, 7, 6, 3, 1]

'''

5.看代码写结果:

dic = dict.fromkeys('abc',[])

dic['a'].append(666)

dic['b'].append(111)

print(dic)

答案

{'a': [666, 111], 'b': [666, 111], 'c': [666, 111]}

'''

个人见解

第一次做错了,字典中的列表是可变的,一个变都变

'''

6.完成彩票36选7的功能. 从36个数中随机的产生7个数. 最终获取到7个不重复的数据作为最终的开奖结果.

随机数:

from random import randint

randint(0, 20) # 0 - 20 的随机数

答案

from random import randint

s = set()

while int(len(s)) < 7:

s.add(randint(0,36))

print(s)

'''

输出结果

{0, 32, 2, 16, 17, 21, 25}

'''

# 讲解方法:

from random import randint

s = set() # 设置一个集合

while len(s) != 7: # 如果集合的长度不等于7,就将1,36之间的随机数添加到集合中,等于7就停止添加

s.add(randint(1,36))

print(s)

7.字符串和字节转换

s1 = '太白金星'

将s1转换成utf-8的bytes类型。

答案

s1 = '太白金星'

s2 = s1.encode('utf-8')

print(s2)

'''

b'\xe5\xa4\xaa\xe7\x99\xbd\xe9\x87\x91\xe6\x98\x9f'

'''

将s1转化成gbk的bytes类型。

答案

s1 = '太白金星'

s2 = s1.encode('gbk')

print(s2)

'''

b'\xcc\xab\xb0\xd7\xbd\xf0\xd0\xc7'

'''

b = b'\xe5\xae\x9d\xe5\x85\x83\xe6\x9c\x80\xe5\xb8\x85'

b为utf-8的bytes类型,请转换成gbk的bytes类型。

答案

b = b'\xe5\xae\x9d\xe5\x85\x83\xe6\x9c\x80\xe5\xb8\x85'

b1 = b.decode('utf-8')

print(b1)

'''

宝元最帅

'''

b2 = b1.encode('gbk')

print(b2)

8.把列表中所有姓周的⼈的信息删掉(升级题:此题有坑, 请慎重):

lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']

结果: lst = ['麻花藤']

答案

# 方法一:

lst = ['周⽼⼆', '周星星', '麻花藤','周扒⽪']

new_li = []

for i in lst:

if '周' in i:

new_li.append(i)

for i in new_li:

lst.remove(i)

print(lst)

'''

['麻花藤']

'''

# 方法二:

lst = ['周⽼⼆', '周星星', '麻花藤','周扒⽪']

new_li = []

for i in lst:

if i[0] == '周':

new_li.append(i)

for i in new_li:

lst.remove(i)

print(lst)

# 方法三:

lst = ['周⽼⼆', '周星星', '麻花藤','周扒⽪']

for i in range(len(lst)-1,-1,-1):

if lst[i][0] == '周':

lst.pop(i) # 倒序删除

print(lst)

9.⻋牌区域划分, 现给出以下⻋牌. 根据⻋牌的信息, 分析出各省的⻋牌持有量. (升级题)

cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041'.....]

locals = {'沪':'上海', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南','京':'北京'}

结果: {'⿊⻰江':2, '⼭东': 2, '北京': 1,'上海':1}

答案

cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041']

locals = {'沪':'上海', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南','京':'北京'}

dic = {}

lst = []

for i in cars:

lst.append(i[0])

for k,v in locals.items():

if k in lst:

dic.setdefault(k,lst.count(k))

print(dic)

'''

输出结果

{'沪': 1, '黑': 2, '鲁': 2, '京': 1}

'''

# 讲解方法

dic1 = {}

for i in cars:

# print(i[0]) 鲁鲁京⿊⿊沪

dic1[locals[i[0]]] = dic1.get(locals[i[0]],0) +1 #意思就是get到就+1 get不到就返回0

print(dic1)

'''

{'⼭东': 2, '北京': 1, '⿊⻰江': 2, '上海': 1}

'''

10.⼲掉主播. 现有如下主播收益信息: zhubo = {'卢本伟':122000, '冯提莫':189999, '⾦⽼板': 99999, '吴⽼板': 25000000, 'alex': 126} 1. 计算主播平均收益值 2. ⼲掉收益⼩于平均值的主播 3. ⼲掉卢本伟

答案

1.

zhubo = {'卢本伟':122000, '冯提莫':189999, '⾦⽼板': 99999, '吴⽼板': 25000000, 'alex': 126}

count = 0

for k,v in zhubo.items():

count += v

print(count / len(zhubo))

2.

zhubo = {'卢本伟':122000, '冯提莫':189999, '⾦⽼板': 99999, '吴⽼板': 25000000, 'alex': 126}

count = 0

lst = []

for k,v in zhubo.items():

count += v

avg = count / len(zhubo)

for k,v in zhubo.items():

if v < avg:

lst.append(k)

for i in lst:

zhubo.pop(i)

print(zhubo)

'''

{'吴⽼板': 25000000}

'''

3.

# 方法一:

zhubo = {'卢本伟':122000, '冯提莫':189999, '⾦⽼板': 99999, '吴⽼板': 25000000, 'alex': 126}

lst = []

for k,v in zhubo.items():

if v == 122000:

lst.append(k)

for i in lst:

zhubo.pop(i)

print(zhubo)

'''

{'冯提莫': 189999, '⾦⽼板': 99999, '吴⽼板': 25000000, 'alex': 126}

'''

'''

这个实在有点儿周了

'''

# 方法二 # 删除卢本伟

zhubo = {'卢本伟':122000, '冯提莫':189999, '⾦⽼板': 99999, '吴⽼板': 25000000, 'alex': 126}

zhubo.pop("卢本伟")

print(zhubo)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值