python之手撕代码

该博客通过一系列实例深入探讨Python编程,包括装饰器、文件路径操作、数组下标求和、线程安全与互斥锁的实现,以及多种排序算法的详细解析,旨在提升读者的代码熟练度和理解力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

书读百遍,其意自见,代码亦如是,无他,唯熟练尔。

装饰器之代码运行时间

  1 # coding=utf8
  2 # 使用装饰器实现统计一段代码的运行时间
  3 
  4 import time
  5 
  6 def w(func):
  7     def inner():
  8         s = time.time()
  9         func()
 10         e = time.time()
 11         t = e-s
 12         print('运行时间为%f'%t)
 13     return inner()
 14 
 15 @w
 16 def f1():
 17     n = 0
 18     for i in range(101):
 19         n += i
 20     print(n)

运行结果

5050
运行时间为0.000068

文件路径

  1 # coding=utf8
  2 # 根据路径打印出路径下的文件夹以及文件的路径与名称
  3 import os
  4 
  5 def f1(p):
  6     fs = os.listdir(p)
  7     for f in fs:
  8         temp_path = os.path.join(p,f)
  9         if not os.path.isdir(temp_path):
 10             print('文件:%s'%temp_path)
 11         else:
 12             print('文件夹:%s'%temp_path)
 13             f1(temp_path)
 14 
 15 path = '/home/python/Desktop/test'
 16 f1(path)

运行结果

文件夹:/home/python/Desktop/test/03
文件:/home/python/Desktop/test/03/c.txt
文件:/home/python/Desktop/test/z.txt
文件夹:/home/python/Desktop/test/01
文件:/home/python/Desktop/test/01/a.txt
文件夹:/home/python/Desktop/test/02
文件:/home/python/Desktop/test/02/b.txt

两数之和之下标

  1 # coding=utf8
  2 # 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同
    样的元素不能被重复利用。
  3 
  4 # 求差值、把差值存进字典里作为键、索引作为值,第一次循环理解:d[7]=0 即字典d={7:0},表示为索引0需要数组里值为7的元素配对。 if 判断是否为前面元素所需要配对的值 , 是则返回两个索引值。(补充:nums[x] in d是判断值是否在字典某个key里面)
  5 
  6 def f1():
  7     l = [2,7,13,16]
  8     t = 9
  9     n = len(l)
 10     d = {
   
   }
 11     for x in range(n):
 12         # 差值
 13         a = t-l[x]
 14         # 如果有需要我作为差值的元素
 15         if l[x] in d:
 16             # 返回需要我的元素的下标,我的下标
 17             return d[l[x]],x
 18         else:
 19             # 否则,把我需要的差值和我的下标作为键值对存进去
 20             d[a]=x
 21 
 22 ret 
### Python编程基础代码练习 #### 一、贪心算法实践 通过解决实际问题来掌握贪心算法的核心思想。例如,在学生重新排队的问题中,可以尝试实现一个函数 `rearrange_students` 来模拟这一过程[^1]。 ```python def rearrange_students(students): students.sort(reverse=True) # 按照身高降序排列 result = [] while len(students) > 0: tallest_student = students.pop(0) # 取最高的学生加入队列 result.append(tallest_student) if len(students) > 0: shortest_student = students.pop() # 取最矮的学生加入队列 result.insert(0, shortest_student) return result ``` 此代码片段展示了如何利用贪心策略解决问题。 --- #### 二、字符串重构挑战 针对LeetCode上的题目《767. 重构字符串》,可以通过优先级队列(堆)的方式构建解决方案[^3]。 ```python from collections import Counter import heapq def reorganize_string(s: str) -> str: count = Counter(s) max_heap = [(-freq, char) for char, freq in count.items()] heapq.heapify(max_heap) prev_freq, prev_char = 0, '' result = [] while max_heap: freq, char = heapq.heappop(max_heap) result.append(char) if prev_freq < 0: heapq.heappush(max_heap, (prev_freq, prev_char)) freq += 1 # 减少频率计数 prev_freq, prev_char = freq, char reconstructed_str = ''.join(result) if len(reconstructed_str) != len(s): # 如果无法满足条件返回空串 return "" return reconstructed_str ``` 上述方法基于字符频率调整位置以达到最优解。 --- #### 三、Linux常用命令与跨平台脚本执行 对于工作中常见的Linux命令,如`awk`, `sed`, `vim`等工具的应用场景进行了总结[^2]。当需要在Linux上运行来自Windows环境的脚本时,可能遇到编码格式不兼容的情况。此时可借助Vim编辑器修改文件格式: ```bash vim test.sh :set ff=dos # 查看当前文件格式是否为DOS :set ff=unix # 将文件格式转换为Unix :wq # 保存并退出 ``` 以上操作能够有效处理因操作系统差异引发的问题。 --- #### 四、Python基础知识巩固 为了进一步提升Python编程能力,可以从以下几个方面入: - **数据结构**:熟练运用列表推导式、字典解析以及集合运算。 - **控制流语句**:深入理解循环中的`break`和`continue`关键字作用。 - **异常处理机制**:学会定义自定义错误类及其触发逻辑。 示例程序如下所示: ```python try: num = int(input("请输入一个整数: ")) except ValueError as e: print(f"输入有误! {e}") else: factorial = 1 for i in range(1, num + 1): factorial *= i print(f"{num} 的阶乘是 {factorial}.") finally: print("计算完成.") ``` 这段代码演示了基本的异常捕获流程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值