日常练习_2

#笔记/日常练习/日常练习_2

日常练习_2

1.输出数字 1-100,逢 3 的整倍数输出 Fizz,逢 5 的整倍数输出 Buzz,又是 3 又是 5 的整倍数输出 FizzBuzz。

for i in range(101):
    if (i % 3 == 0) and (i % 5 == 0):
        print(str(i) + '   FizzBuzz')
    elif i % 5 == 0:
        print(str(i) + '   Buzz')
    elif i % 3 == 0:
        print(str(i) + '   Fizz')

2.给一个数组,数组内的元素是整数,找出其中重复出现过的整数,返回以这些重复的整数为元素组成的新数组,顺序无所谓。

test_list = [4, 3, 2, 7, 8, 2, 3, 1, 2]
count_test_dict = {}
result_list = []
for i in test_list:
    if i not in count_test_dict.keys():
        count_test_dict[i] = 1
    else:
        count_test_dict[i] += 1
for key, value in count_test_dict.items():
    if value > 1:
        result_list.append(key)
print(result_list)  # [3, 2]

遍历数组以数组的元素为key,元素出现的次数为value构成一个字典,再遍历该字典寻找有重复的元素,即次数大于2的。
相当于实现了一个实现Counter。
Counter的实现:

array = ['red', 'blue', 'red', 'green', 'blue', 'blue']
result = {}
for word in array:
    if word not in result.keys():
        result[word] = 1
    else:
        result[word] += 1
print(result)  # {'red': 2, 'blue': 3, 'green': 1}

3.给定一个正整数,要求算出它转成二进制之后的数里1的个数,例如,给定9,转化成二进制是1001,其中有两个1,那么结果为2。

sum_num = 0
for i in bin(9)[2:]:
    if i == '1':
        sum_num += 1
print(sum_num)  # 2

4.什么是pickling和unpickling?怎么用?

python3之序列化(pickle&json&shelve) - Py.qi - 博客园
Pickle模块接受任何Python对象并将其转换为字符串表示形式,pickle模块将任意一个python对象转换成一系统字节的这个操作过程叫做串行化对象,并使用dump函数将其转储到文件中,此过程称为pickling(序列化)。从存储的字符串表示中检索原始Python对象的过程称为unpickling(反序列化)。

import pickle
data_1 = [1, 'a', 2, 'b', 3, 'c']
pi = pickle.dumps(data_1)  # 序列化对象
print(pi)
print(pickle.loads(pi))  # 反序列化对象

延伸:json模块

import json

data = {'k3': 'v3', 'k4': 'k4', 'k1': 'v1', 'k2': 'v2'}
print(type(json.dumps(data, sort_keys=True)))  # <class 'str'>
print(json.dumps(data, sort_keys=True))  # "{"k1": "v1", "k2": "v2", "k3": "v3", "k4": "k4"}"

data = '{"k3": "v3", "k4": "k4", "k1": "v1", "k2": "v2"}'
print(type(json.loads(data)))  # <class 'dict'>
print(json.loads(data))  # {'k3': 'v3', 'k4': 'k4', 'k1': 'v1', 'k2': 'v2'}

5.用lambda函数实现两个数相乘

关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解 - 测试不将就 - CSDN博客

lambda x, y: x * y

# 其他用法
print(list(map(lambda x: x ** 3, [y for y in range(10)])))  # [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]

6.编码实现s=“ajidjlajfdlifddd”去重并从小到大排序输出”adfji”

s = "ajldjlajfdljfddd"
print(''.join(sorted(list(set(s)))))  # adfjl

7.字典根据键从小到大排序dict={“name”:“zs”,“age”:18,“city”:“深圳”,“tel”:“1362626627”}

dic = {"name": "zs", "age": 18, "city": "深圳", "tel": "1362626627"}
print(dict(sorted(dic.items())))  # {'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}

8.字符串a=”not 404 found 张三 99 深圳”,每个词中间有空格分割,用正则过滤数字和英文最后输出”张三 深圳”

import re
a = "not 404 found 张三 99 深圳"
array = a.split(" ")
print(array)
res = re.findall('[a-zA-Z0-9]+', a)
for i in res:
    if i in array:
        array.remove(i)
new_str = " ".join(array)
print(res)
print(new_str)

9.用python实现单例模式

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, 'instance'):
            cls.instance = super().__new__(cls)
        return cls.instance
a = Singleton()
b = Singleton()
print(a)  # <__main__.Singleton object at 0x102e1ab38>
print(b)  # <__main__.Singleton object at 0x102e1ab38>
延伸:__new__,__init__,__call__
创建实例时,__init__() 是类的初始化函数,而__new__()则是对象构造函数,在一个类是实例化时先执行__new__对此实例进行构造,__new__返回实例(就是__init__里面的self参数),然后执行__init_对实例进行初始化。
定义了__call__方法以后,对象实体可以直接被调用,调用到__call__。

Python Python 之 new() 方法与实例化 - iFantasticMe - 博客园

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值