python-常见代码

以下是一些python 中常见的编程题目

class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

# 创建对象
my_dog = Dog("Buddy")
print(my_dog.speak())



##### 反转列表 #####
def reverse_list(lst):
    return lst[::-1]    #步长:-1 表示从后向前逐个元素获取,即逆序遍历。

my_list = [1, 2, 3, 4, 5]
reversed_list = reverse_list(my_list)
print(reversed_list)  # 输出: [5, 4, 3, 2, 1]





##### 判断是否是回文 #####
def is_huiwen(s):
    return s==s[::-1]   #

print(is_huiwen('123321'))
print(is_huiwen('123456'))



#### 字符串中字符出现的次数 ####
def count_chars(s):
    result = {}
    for char in s:
        if char in result:
            result[char] += 1       #使用字典来存储字符出现的字数
        else:
            result[char] = 1
    return result

s = "hello world"
print(count_chars(s))
# 输出: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}



##### 斐波那契数列 #####
def fibonacci(n):
    fib_list = []
    a, b = 0, 1
    for _ in range(n):  #一种常用的循环的方式,相当于循环n次
        fib_list.append(a)
        a, b = b, a + b
    return fib_list

print(fibonacci(10))  # 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]


##### 最大值 #####
def find_max(lst):
    if not lst:
        return None  # 如果列表为空,返回None
    max_value = lst[0]
    for num in lst[1:]:
        if num > max_value:
            max_value = num
    return max_value

# 示例用法
my_list = [3, 7, 2, 9, 4]
print(find_max(my_list))  # 输出: 9

##### 合并字典 #####
def merge_dicts(dict1, dict2):
    result = dict1.copy()  # 先复制第一个字典
    for key, value in dict2.items():    #   通过迭代去除字典中的 key value
        if key in result:           #   会检查字典中是否存在该键
            result[key] += value  # 键重复则相加
        else:
            result[key] = value   # 不重复则直接添加
    return result

# 示例用法
d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'b': 3, 'c': 4, 'd': 5}
print(merge_dicts(d1, d2))
# 输出: {'a': 1, 'b': 5, 'c': 7, 'd': 5}


##### 找出列表中的所有偶数  #####
def find_even_numbers(lst):
    return [num for num in lst if num % 2 == 0]

# 列表推导式
# [表达式 for 变量 in 可迭代对象 if 条件]
# lst:你要处理的原始列表。
# for num in lst:依次取出列表中的每个元素,赋值给变量 num。
# if num % 2 == 0:判断当前的 num 是否为偶数(即能被2整除)。
# num:如果条件成立,就把这个 num 加入到新列表中。


# 示例用法
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(find_even_numbers(my_list))  # 输出: [2, 4, 6, 8, 10]



#####  实现二分查找 #####
def binary_search(lst, target):
    # 先对列表排序
    sorted_lst = sorted(lst)
    left, right = 0, len(sorted_lst) - 1
    while left <= right:
        mid = (left + right) // 2
        if sorted_lst[mid] == target:
            return mid  # 返回的是排序后列表中的索引
        elif sorted_lst[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1  # 没找到返回-1

# 示例用法
my_list = [7, 2, 5, 3, 9, 1]
print(binary_search(my_list, 5))  # 输出: 3(排序后[1,2,3,5,7,9],5的索引是3)
print(binary_search(my_list, 8))  # 输出: -1


##### python 中的装饰器 #####
def my_decorator(func):
    def wrapper():
        print("函数开始执行...")
        func()
        print("函数执行完毕...")
    return wrapper

@my_decorator
def say_hello():
    print("函数正在执行...")

say_hello() # 输出: 函数开始执行... 函数正在执行... 函数执行完毕...




##### 使用装饰器实现计数器 #####
import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()  # 记录开始时间
        result = func(*args, **kwargs)  #任意数量的位置参数,和任意数量关键字参数
        end_time = time.time()    # 记录结束时间
        print(f"{func.__name__} 执行时间: {end_time - start_time:.6f} 秒")
        return result
    return wrapper

# 示例用法
# example_function() 实现一个数据累加的函数
# 使用装饰器,来查看这个函数的执行时间
@timer
def example_function():
    total = 0
    for i in range(1000000):
        total += i
    return total

example_function()


##### 使用生成器 实现 fibonacci 数列 #####
def fibonacci_generator(n):
    a, b = 0, 1
    for _ in range(n):
        yield a         #yield 将函数变为一个生成器,每一次 next(func) 或者 for item in func() 都会暂停,并返回 yield 的值
                        # 这里相当于将 a 的值返回给了 调用者 中的 num
        a, b = b, a + b

# 示例用法
for num in fibonacci_generator(10):
    print(num, end=' ')
# 输出: 0 1 1 2 3 5 8 13 21 34
print()

gen = fibonacci_generator(3)
print(next(gen))  # 输出 0
print(next(gen))  # 输出 1
print(next(gen))  # 输出 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值