- 两数之和
number1 = 1.5
number2 = 3.8
sum = number1 + number2
print(f"{number1}+{number2}={sum}")
- 数字的阶乘
def get_jiecheng(number):
result = 1
while number > 0:
result *= number
number -= 1
return result
print("阶乘 6=", get_jiecheng(6))
print("阶乘 3=", get_jiecheng(3))
print("阶乘 100=", get_jiecheng(100))
- 计算圆的面积
import math
def computer_area_of_circle(r):
return round(math.pi * r * r, 2)
print("area of 2 is:", computer_area_of_circle(2))
print("area of 3.14 is:", computer_area_of_circle(3.14))
print("area of 6/78 is:", computer_area_of_circle(6.78))
- 区间内的所有素数
def is_prime(number):
if number in (1, 2):
return True
for idx in range(2, number):
if number % idx == 0:
return False
return True
def print_primes(begin, end):
for number in range(begin, end + 1):
if is_prime(number):
print(f"{number} is a prime")
begin = 11
end = 25
print_primes(begin, end)
- 前n个数字的平方和
def sum_of_square(n):
result = 0
for number in range(1, n + 1):
result += number * number
return result
print("sum of square 3:", sum_of_square(3))
print("sum of square 5:", sum_of_square(5))
print("sum of square 10:", sum_of_square(10))
- 计算列表数字的和
def sun_of_list(param_list):
total = 0
for item in param_list:
total += item
return total
list1 = [1, 2, 3, 4, ]
list2 = [17, 5, 3, 5]
# print(f"sum of {list1},", sun_of_list(list1))
# print(f"sum of {list2},", sun_of_list(list2))
# 内置
print(f"sum of {list1},", sum(list1))
print(f"sum of {list2},", sum(list2))
- 数字范围内的所有偶数
def get_even_numbers(begin, end):
result = []
for item in range(begin, end):
if item % 2 == 0:
result.append(item)
return result
begin = 4
end = 15
# 方式二
data = [item for item in range(begin, end) if item % 2 == 0]
print(f"begin={begin},end={end} even numbers:", get_even_numbers(begin, end))
print(f"begin={begin},end={end} even numbers:", data)
- 从列表中移除多个元素
def remove_elements_from_list(lista, listb):
for item in listb:
lista.remove(item)
return lista
lista = [3, 5, 7, 9, 11, 13]
listb = [7, 11]
print(f"from {lista} remove {listb},result:", remove_elements_from_list(lista, listb))
lista = [3, 5, 7, 9, 11, 13]
listb = [7, 11]
# 列表推到式
data = [item for item in lista if item not in listb]
print(f"from {lista} remove {listb},result:", data)
- 实现对列表的去重
def get_unique_list(lista):
result = []
for item in lista:
if item not in result:
result.append(item)
return result
lista = [10, 20, 30, 10, 20]
print(f"source list {lista},unique list:", get_unique_list(lista))
# set集合 去重
lista = [10, 20, 30, 10, 20]
print(f"source list {lista},unique list:", list(set(lista)))
- 简单对列表进行排序
lista = [20, 40, 30, 50, 10]
# 会改变列表 升序
lista.sort()
print(f"lista is {lista}")
# 降序
lista.sort(reverse=True)
print(f"lista is {lista}")
# 不会改变列表
lista = [20, 40, 30, 50, 10]
# 升序
listb = sorted(lista)
print(f"listb is {listb}")
# 降序
listb = sorted(lista, reverse=True)
print(f"listb is {listb}")
- 实现学生成绩的降序排序
students = [
{"sno": 101, "sname": "小张", "sgrade": 88},
{"sno": 102, "sname": "小王", "sgrade": 99},
{"sno": 103, "sname": "小李", "sgrade": 77},
{"sno": 104, "sname": "小赵", "sgrade": 66},
]
# reverse=True 降序排序
studenys_sort = sorted(students, key=lambda x: x["sgrade"], reverse=True)
print(students)
print(studenys_sort)
- 从列表中移除多个元素
def remove_elements_from_list(lista, listb):
for item in listb:
lista.remove(item)
return lista
lista = [3, 5, 7, 9, 11, 13]
listb = [7, 11]
print(f"from {lista} remove {listb},result:", remove_elements_from_list(lista, listb))
lista = [3, 5, 7, 9, 11, 13]
listb = [7, 11]
# 列表推到式
data = [item for item in lista if item not in listb]
print(f"from {lista} remove {listb},result:", data)
- 实现学生成绩的降序排序
students = [
{"sno": 101, "sname": "小张", "sgrade": 88},
{"sno": 102, "sname": "小王", "sgrade": 99},
{"sno": 103, "sname": "小李", "sgrade": 77},
{"sno": 104, "sname": "小赵", "sgrade": 66},
]
# reverse=True 降序排序
studenys_sort = sorted(students, key=lambda x: x["sgrade"], reverse=True)
print(students)
print(studenys_sort)
- 读取成绩文件实现排序
def read_file():
with open("./student_grade_input") as fin:
result = []
for line in fin:
line = line[:-1] # 去掉换行符
result.append(line.split(",")) # ,切割数据
return result
def sort_grades(datas):
return sorted(datas, key=lambda x: int(x[2]), reverse=True)
def write_file(datas):
with open("./student_grade_output.txt", "w") as fout:
for data in datas:
fout.write(",".join(data) + "\n") # 加逗号分割 和换行
# 读取文件
datas = read_file()
print("read_file datas:", datas)
# 排序数据
datas = sort_grades(datas)
print("sort_grades datas:", datas)
# 写出文件
write_file(datas)
- 读取成绩文件计算最高分、最低分、平均分
def compute_score():
scores = []
with open("./student_grade_input") as fin:
for line in fin:
line = line[:-1]
fields = line.split(",")
scores.append(int(fields[-1])) # 最后一列成绩
max_score = max(scores)
min_score = min(scores)
avg_score = round(sum(scores) / len(scores), 2) # 小数后2位
return max_score, min_score, avg_score
max_score, min_score, avg_score = compute_score()
print(f"max_score={max_score},min_score={min_score},avg_score={avg_score}")
student_grade_input
101,小张,88
102,小王,77
103,小李,99
104,小赵,66
105,小强,55
- 统计英文文章出现最多单词数目
word_count = {}
with open("./word.txt") as fin:
for line in fin:
line = line[:-1] # 去除换行符
words = line.split()
for word in words:
if word not in word_count:
word_count[word] = 0
word_count[word] += 1
print(word_count)
# 排序
dict_sort = sorted(word_count.items(), key=lambda x: x[1], reverse=True)[:10] # 排序前10
print(dict_sort)
- 统计目录下的文件大小
import os
print(os.path.getsize("word.txt")) # 统计文件大小
sum_size = 0
for file in os.listdir("."): # .代表当前目录
if os.path.isfile(file): # 判断是否是文件
sum_size += os.path.getsize(file)
print("all size of dir:", sum_size / 1000) # 得到结果为以kb单位
- 按文件后缀整理文件夹
import os
import shutil
dir = "./arrange_dir"
for file in os.listdir(dir): # os.listdir 列出文件
ext = os.path.splitext(file)[1] # splitext 得到文件的后缀
ext = ext[1:]
if not os.path.isdir(f"{dir}/{ext}"): # 非dir 和ext
os.mkdir(f"{dir}/{ext}") # os.mkdir 创建目录
# 按后缀进行存储
source_path = f"{dir}/{file}"
target_path = f"{dir}/{ext}/{file}" # 按后缀存储到不同文件
shutil.move(source_path, target_path) # shutil.move 移动文件
# print(file, ext)
- 计算每个班级的最高分最低分平均分
# key: course ,value: grade list
course_grades = {}
with open("doc/course_student_grade_input.txt", 'r', encoding='utf-8') as fin:
for line in fin:
line = line[:-1]
course, sno, sname, grade = line.split(",")
if course not in course_grades:
course_grades[course] = []
course_grades[course].append(int(grade))
print(course_grades)
for course, grades in course_grades.items():
print(course,
max(grades),
min(grades),
sum(grades) / len(grades))
- 实现不同文件的关联
course_teacher_map = {}
with open("./doc/course_teacher.txt", "r", encoding="utf-8") as fin:
for line in fin:
line = line[:-1] # 去掉分隔符
course, teacher = line.split(",")
course_teacher_map[course] = teacher
print(course_teacher_map)
with open("./doc/course_student_grade_input.txt", "r", encoding="utf-8") as fin:
with open("./doc/course_student_grade_output.txt", "w", encoding="utf-8") as fout:
for line in fin:
line = line[:-1]
course, sno, sname, sgrade = line.split(",")
teacher = course_teacher_map.get(course)
fout.write(f"{course}, {teacher}, {sno}, {sname}, {sgrade},'\n")
# print(course, teacher, sno, sname, sgrade)
course_teacher.txt
语文,于老师
数学,树老师
英语,影老师
- 实现批量txt文件的合并
import os
data_dir = "./datas/many_texts"
contents = []
for file in os.listdir(data_dir): # os.listdir 扫描文件夹
file_path = f"{data_dir}/{file}"
if os.path.isfile(file_path) and file.endswith(".txt"):
with open(file_path, encoding="utf-8") as fin:
contents.append(fin.read()) # fin.read() 读取所有内容放到contents中
# print(contents)
final_content = "\n".join(contents) # 合并文件
with open("./datas/many_texts.txt", "w", encoding="utf-8") as fout:
fout.write(final_content)
方法1:按行读取
for line in fin
方法2:一次读取所有内容到一个字符串
content=fin.read()
many_texts
文件001内容-01
文件001内容-02
文件001内容-03
文件001内容-04
文件001内容-05
文件002内容-01
文件002内容-02
文件002内容-03
文件002内容-04
文件002内容-05
文件003内容-01
文件003内容-02
文件003内容-03
文件003内容-04
文件003内容-05
- 统计每个兴趣的学生人数
like_count = {}
with open("./datas/student.like.txt", "r", encoding="utf-8") as fin:
for line in fin:
line = line[:-1]
sname, likes = line.split(" ")
like_list = likes.split(",") # 拆分爱好
for like in like_list:
if like not in like_count:
like_count[like] = 0
like_count[like] += 1
print(like_count)
student.like.txt
小张 篮球,羽毛球
小王 篮球,乒乓球,台球
小李 篮球,台球
小强 羽毛球
- 获取当前的日期和时间
import datetime
curr_datetime = datetime.datetime.now()
print(curr_datetime, type(curr_datetime))
str_time = curr_datetime.strftime("%Y-%m-%d %H:%M:%S")
print("str_time", str_time)
print("year", curr_datetime.year)
print("month", curr_datetime.month)
print("day", curr_datetime.day)
print("hour", curr_datetime.hour)
print("minute", curr_datetime.minute)
print("second", curr_datetime.second)
- 计算两个日期相隔的天数
import datetime
birthday = "1997-12-20"
birthday_date = datetime.datetime.strptime(birthday, "%Y-%m-%d") # 转换成时间对象
print(birthday_date, type(birthday_date))
curr_datetime = datetime.datetime.now()
print(curr_datetime, type(curr_datetime))
minus_datetime = curr_datetime - birthday_date
print(minus_datetime.days)
print(minus_datetime / 365)
- 计算任意日期7天前的日期
import datetime
def get_diff_days(pdate, days):
pdate_obj = datetime.datetime.strptime(pdate, "%Y-%m-%d")
time_gap = datetime.timedelta(days=days)
pdate_result = pdate_obj - time_gap
return pdate_result.strftime("%Y-%m-%d")
print(get_diff_days("2021-04-28", 1))
print(get_diff_days("2021-04-28", 3))
print(get_diff_days("2021-04-28", 7))
print(get_diff_days("2021-04-01", 3))
- 计算日期范围的所有日期
import datetime
def get_date_range(begin_date, end_date):
date_list = []
while begin_date <= end_date:
date_list.append(begin_date)
begin_date_object = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
days1_timedelta = datetime.timedelta(days=1)
begin_date = (begin_date_object + days1_timedelta).strftime("%Y-%m-%d")
return date_list
begin_date = "2021-04-28"
end_date = "2021-05-03"
date_list = get_date_range(begin_date, end_date)
print(date_list)
- 将unix时间戳转换成格式化日期
import datetime
unix_time = 1620747647
datetime_obj = datetime.datetime.fromtimestamp(unix_time)
datetime_str = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
print(datetime_str)
- 正则表达式判断字符串是否是日期
import re
def date_is_right(date):
return re.match("\d{4}-\d{2}-\d{2}", date) is not None
date1 = "2021-05-20"
date2 = "2021/05-20"
date3 = "202-05-20"
date4 = "20210520"
date5 = "202a05-20"
print(date1, date_is_right(date1))
print(date2, date_is_right(date2))
print(date3, date_is_right(date3))
print(date4, date_is_right(date4))
print(date5, date_is_right(date5))
31.自动提取电子邮箱地址
content = """
寻隐者1234@qq.com不予
作python666@163.cn者:贾岛
"""
import re
pattern = re.compile(r"""
[a-zA-Z0-9_-]+
@
[a-zA-Z0-9]+
.
[a-zA-Z]{2,4}
""", re.VERBOSE)
results = pattern.findall(content)
for result in results:
print(result)
- 验证用户密码是否规范
"""
写一个函数,验证密码是否满足条件
1.长度位于[6,20]之间
2.必须包含至少1个小写字母
3.必须包含至少1个大写字母
4.必须包含至少1个数字
5.必须包含至少1个特殊字符
返回
True,None
或者 False,原因
"""
import re
def check_password(password):
if not 6 <= len(password) <= 20:
return False, "密码必须在6~20之间"
if not re.findall(r"[a-z]", password):
return False, "必须包含至少一个小写字母"
if not re.findall(r"[A-Z]", password):
return False, "必须包含至少一个大写字母"
if not re.findall(r"[0-9]", password):
return False, "必须包含至少一个数字"
if not re.findall(r"[^0-9a-zA-Z]", password):
return False, "必须包含至少一个特殊字符"
return True, None
print("Helloworld#666", check_password("Helloworld#666"))
print("Helloworld#", check_password("Helloworld#"))
print("elloworld#666", check_password("elloworld#666"))
print("Helloworld666", check_password("Helloworld666"))
- 提取商品价格
content = """
小明上街买菜
买了1斤黄瓜花了8元;
买了2斤葡萄花了13.5元;
买了3斤白菜花了5.4元;
"""
# 要求提取(1、黄瓜、8)、(2、葡萄、13.5)、(3、白菜、5.4)
import re
for line in content.split("\n"):
pattern = r"(\d)斤(.*)花了(\d+(.\d+)?)元"
match = re.search(pattern, line)
if match:
print(f"{match.group(1)}\t{match.group(2)}\t{match.group(3)}")
# 正则表达式加上{} 是分组概念match.group()
- 给文章中的手机号打上马赛克效果
content = """
百日依山尽19989881888,黄河如8766897
欲穷12345千里目,更上15619291821一层楼
"""
import re
pattern = r"(1[3-9])\d{9}"
print(re.sub(pattern, r"\1####", content))
- 进行多种日期格式的标准化
# 目标 2021-05-28
content = """
白日依2021/05/26山尽,黄河入2021.05.27海流。
欲穷05-28-2020千里目,更上5/29/2020一层楼。
"""
import re
content = re.sub(r"(\d{4})/(\d{2})/(\d{2})", r"\1-\2-\3", content)
print(content)
content = re.sub(r"(\d{4}).(\d{2}).(\d{2})", r"\1-\2-\3", content)
print(content)
content = re.sub(r"(\d{2})-(\d{2})-(\d{4})", r"\3-\1-\2", content)
print(content)
content = re.sub(r"(\d{1})/(\d{2})/(\d{4})", r"\3-0\1-\2", content)
print(content)
- 实现英文分词计算词频
import re
with open("./datas/Beginner Guide to Python.txt", "r", encoding="utf-8") as fin:
content = fin.read()
# print(content)
words = re.split(r"[\s.()-?!]+", content)
# print(words)
import pandas as pd
print(pd.Series(words).value_counts()[:20])
Beginner Guide to Python.txt
Certainly! Here's a short English text of approximately 100 words:
37.实现中文文章分词
import re
content = """
在金色的秋季里,我独自漫步于枫叶铺就的小径上。
每一步都伴随着落叶的沙沙声,宛如自然界的低语。
微风拂过,带起一片片红黄相间的叶子,它们在空中轻盈地旋舞,
最终缓缓落回大地的怀抱。秋天的天空是那么高远,湛蓝而明净,
就像洗涤过的心灵。这一刻,我感受到了宁静与和谐,心中涌起一股深深的感激。
自然的美丽总是无言却能触动灵魂,让人忘却尘世的烦恼。
"""
import jieba
import re
content = re.sub(r"[\s,。、]", "", content)
word_list = jieba.cut(content)
print(list(word_list))
- 统计小说中的人名
content = "李明喜欢韩梅梅,他两早恋啦"
import jieba.posseg as posseg
for word, flag in posseg.cut(content):
if flag == "nr":
print(word, flag)
import pandas as pd
print(pd.Series(word).value_counts()[:10])
- 将数组逆序输出
a = [1, 2, 4, 5]
for i in range(0, (len(a) - 1) // 2):
temp = a[i]
a[i] = a[len(a) - i - 1]
a[len(a) - i - 1] = temp
print(a)
# 核心 确定中间值 (数组)-1/2
40.统计1-100的和
sum = 0
for i in range(0, 101):
sum += i
print(sum)
41.两个量值互换
a = 10
b = 20
# 第三方变量
# c = a
# a = b
# b = c
# print(a, b)
# 加减法
# a = a + b
# b = a - b
# a = a - b
# print(a, b)
# 语言特性 python
a, b = b, a
print(a, b)
# 核心原理
"""
a1=a0+b0
b1=a1-b0
a0+b0-b0=a0
a2=a1-b1
a0+b0-a0=b0
"""
42.数字比较
i = 10
j = 20
if i > j:
print(">")
elif i == j:
print("==")
elif i < j:
print("<")
else:
print("未知")
- 创建匿名函数
POWER = lambda x, y: x ** y
print(POWER(2, 4))
- 输出一个随机数
import random
print(random.randint(10, 20)) # 随机整数
print(random.random()) # 随机0-1
print(random.uniform(10, 20)) # 随机浮点数