30个py实例
基础入门(1-5)
打印信息
# 打印文本和变量
name = "Python"
print(f"欢迎学习{name}编程!")
print("这是数字:", 123)
- print 括号内的 f 是 f-string(格式化字符串字面量) 的标记,用于快速格式化字符串,是 Python 3.6 及以上版本引入的便捷语法。传统的字符串拼接(如 print("欢迎学习" + name + "编程!")),f-string 更简洁、直观,是 Python 中推荐使用的字符串格式化方式。
变量与数据类型
# 不同数据类型的变量
age = 25 # 整数
height = 1.75 # 浮点数
is_student = True # 布尔值
name = "小明" # 字符串
# 查看变量类型
print(type(age))
print(type(name))
- Python 是一种 “动态类型语言”,变量的类型不需要手动声明(比如不需要写 int age = 25),而是根据赋值自动确定;
- type() type() 是一个内置函数,用于查看一个变量、值或对象的数据类型。可以帮你快速确认变量的类型
简单数学运算
a = 10
b = 3
print(f"{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} × {b} = {a * b}")
print(f"{a} ÷ {b} = {a / b}")
print(f"{a} ÷ {b} 的余数 = {a % b}")
print(f"{a} 的 {b} 次方 = {a ** b}")
- {a} 会被变量 a 的值(10)替换
- {b} 会被变量 b 的值(3)替换
- {a + b} 会被表达式 a + b 的结果替换
- {} 就像一个 “空盒子”,会被具体的变量、表达式或参数值 “填充”,让字符串可以动态包含不同内容,避免了繁琐的字符串拼接
字符串操作
message = "Hello Python"
# 字符串长度
print(len(message))
# 大小写转换
print(message.lower())
print(message.upper())
# 字符串拼接
greeting = "Hello"
name = "Alice"
print(greeting + ", " + name + "!")
# 字符串格式化
print(f"{greeting}, {name}!")
代码执行结果如下:
- len() 是一个内置函数,用于返回对象的 “长度” 或 “元素个数”。它可以作用于字符串、列表、元组、字典等多种数据类型;
- 在 Python 中,lower() 和 upper() 是字符串(str 类型)的内置方法,用于转换字符串中字母的大小写:
- lower():将字符串中所有大写字母转换为小写字母,非字母字符不变;
- upper():将字符串中所有小写字母转换为大写字母,非字母字符不变;
- print括号内的“ ”包裹起来部分表示是字符串;
- print括号内的+表示拼接两个字符串,但不打印输出;
输入与输出
# 获取用户输入
name = input("请输入你的名字: ")
age = int(input("请输入你的年龄: "))
# 输出信息
print(f"你好,{name}!你明年将会是{age + 1}岁。")
代码执行效果为:
- input() 是一个内置函数,用于从用户那里(比如键盘输入)获取数据。它会暂停程序运行,等待用户输入内容,直到用户按下回车键后,将输入的内容作为字符串形式返回并返回;
- input() 无论用户输入什么内容,默认返回的都是字符串类型。如果需要数字(比如年龄、分数),必须用 int()(转整数)或 float()(转浮点数)转换;
条件与循环(6-10)
简单条件判断
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
猜数字(限定次数)
import random
secret = random.randint(1, 20)
max_attempts = 5
for attempt in range(max_attempts):
guess = int(input(f"请猜一个1-20之间的数字(第{attempt + 1}次): "))
if guess == secret:
print("恭喜你,猜对了!")
break
elif guess < secret:
print("太小了!")
else:
print("太大了!")
else:
print(f"很遗憾,你没猜对。正确答案是{secret}")
代码执行结果:
- random.randint(1, 20) 就是 random 模块提供的函数,作用是生成一个指定范围内(1 到 20 之间,包括 1 和 20)的随机整数。
- random 是 Python 自带的 “标准库” 模块,不需要额外安装,直接导入就能用。
- 除了 randint(),random 模块还有很多实用功能,比如:
- random.random():生成 0 到 1 之间的随机小数
- random.choice([1,2,3]):从列表中随机选择一个元素
- random.shuffle([1,2,3]):随机打乱列表顺序
- range() 是 Python 的一个内置函数,用于生成一个整数序列,通常配合 for 循环使用,用来控制循环的次数:
- range(n):生成从 0 到 n-1 的整数序列(包含 0,不包含 n)。例如:range(5) 会生成 0, 1, 2, 3, 4(共 5 个数字)。
- range(start, end):生成从 start 到 end-1 的整数序列。例如:range(2, 7) 会生成 2, 3, 4, 5, 6。
- range(start, end, step):生成从 start 到 end-1 的整数序列,步长为 step(每次增加 step)。
计算 1 到 100 的和
total = 0
for i in range(1, 101):
total += i
print(f"1到100的和是: {total}")
打印乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
代码运行结果:
- 在 Python 的 print() 函数中,end 是一个可选参数,用于指定打印内容结束时添加的字符,默认值是换行符 \n(即打印后自动换行)。在上面实例中,end="\t" 的作用是让每次打印的内容后添加一个制表符(Tab 键的效果),而不是默认的换行,这样可以让乘法表的内容对齐成整齐的列。
- py的其他转义字符:
计算阶乘
n = int(input("请输入一个正整数: "))
result = 1
for i in range(1, n + 1):
result *= i
print(f"{n}的阶乘是: {result}")
列表与字典(11-15)
列表基本操作
# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
# 访问元素
print(fruits[0]) # 第一个元素
print(fruits[-1]) # 最后一个元素
# 添加元素
fruits.append("草莓")
print(fruits)
# 列表切片
print(fruits[1:3]) # 第二个到第三个元素
- 在 Python 列表操作中,append() 是列表的一个内置方法,用于向列表的末尾添加一个新元素:
- 添加位置:始终在列表的最后添加元素,不会影响原有元素的顺序;
- 参数要求:append() 只能接收一个参数(即要添加的元素),可以是任意数据类型(字符串、数字、甚至另一个列表);
- 无返回值:append() 直接修改原列表,不会返回新列表(所以不需要用变量接收结果);
列表排序与筛选
numbers = [34, 12, 45, 17, 23, 56]
# 排序
numbers.sort()
print("排序后:", numbers)
# 筛选偶数
evens = [num for num in numbers if num % 2 == 0]
print("偶数:", evens)
# 列表推导式
squares = [num **2 for num in numbers]
print("平方数:", squares)
- 在 Python 列表操作中,sort() 是列表的内置方法,用于对列表中的元素进行原地排序(直接修改原列表,不创建新列表);
- 降序排序:通过参数 reverse=True 实现从大到小排列:
numbers = [34, 12, 45, 17, 23, 56]
numbers.sort(reverse=True) # 降序排序
print(numbers) # 输出:[56, 45, 34, 23, 17, 12]
- [num for num in numbers if num % 2 == 0] 称为列表推导式,意思是:“遍历 numbers 中的每个元素 num,只保留那些是偶数(num % 2 == 0)的 num,最后组成一个新列表”。这种语法在处理列表时非常常用,可以快速实现筛选、转换等操作,让代码更简洁高效。
简单通讯录(字典)
contacts = {
"张三": "13800138000",
"李四": "13900139000",
"王五": "13700137000"
}
# 显示所有联系人
print("通讯录:")
for name, phone in contacts.items():
print(f"{name}: {phone}")
# 添加新联系人
contacts["赵六"] = "13600136000"
# 查找联系人
search_name = "李四"
if search_name in contacts:
print(f"{search_name}的电话是: {contacts[search_name]}")
代码执行结果:
- 在 Python 字典操作中,contacts.items() 是字典的一个内置方法,用于返回字典中所有键值对(key-value pairs)的视图对象。这个视图对象包含了字典中所有的键和对应的值,可以通过循环遍历获取每一组键值对;
- 字典存储的是 “键 - 值” 对应关系,items() 方法让我们可以同时获取键和对应的值。如果只需要键,可以用 keys() 方法;如果只需要值,可以用 values() 方法:
# 只获取所有键(姓名)
for name in contacts.keys():
print(name) # 输出:张三、李四、王五
# 只获取所有值(电话号码)
for phone in contacts.values():
print(phone) # 输出:13800138000、13900139000、13700137000
统计列表元素出现次数
words = ["apple", "banana", "apple", "orange", "banana", "apple"]
counts = {}
for word in words:
if word in counts:
counts[word] += 1
else:
counts[word] = 1
print("单词出现次数:")
for word, count in counts.items():
print(f"{word}: {count}次")
代码执行结果:
学生成绩排序
students = [
{"name": "张三", "score": 85},
{"name": "李四", "score": 92},
{"name": "王五", "score": 78}
]
# 按成绩从高到低排序
students.sort(key=lambda x: x["score"], reverse=True)
print("成绩排名:")
for i, student in enumerate(students, 1):
print(f"第{i}名: {student['name']}, 分数: {student['score']}")
代码执行结果:
- students.sort(...):
sort() 是列表的排序方法,会直接修改原列表(原地排序)。 - key=lambda x: x["score"]:
- key 参数用于指定 “排序依据”,即按照什么规则排序。
- lambda x: x["score"] 是一个匿名函数(临时函数),表示:对于列表中的每个元素 x(这里的 x 是每个学生的字典,如 {"name": "张三", "score": 85}),取它的 "score" 键对应的值(即成绩)作为排序依据。
- reverse=True:
- reverse 是 “反转” 的意思,默认值为 False(升序,从小到大)。
- 这里设为 True,表示按成绩从高到低排序(降序)。
函数与模块(16-20)
简单函数定义
def greet(name):
"""向指定的人打招呼"""
return f"你好,{name}!"
def add(a, b):
"""计算两个数的和"""
return a + b
# 使用函数
print(greet("小明"))
print(add(3, 5))
代码运行结果为:
- py函数定义规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号();
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数;
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明;
- 函数内容以冒号起始,并且缩进;
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None;
计算斐波那契数列
def fibonacci(n):
"""生成前n个斐波那契数"""
fib = [0, 1]
if n <= 2:
return fib[:n]
for i in range(2, n):
next_num = fib[i-1] + fib[i-2]
fib.append(next_num)
return fib
# 生成前10个斐波那契数
print(fibonacci(10))
使用默认参数
def calculate_area(length, width=None):
"""计算面积,默认计算正方形面积"""
if width is None:
# 如果只提供一个参数,计算正方形面积
return length * length
else:
# 计算长方形面积
return length * width
print("正方形面积:", calculate_area(5))
print("长方形面积:", calculate_area(5, 8))
使用标准库:时间模块
import time
import datetime
# 获取当前时间戳
print("当前时间戳:", time.time())
# 获取当前时间
current_time = time.localtime()
print("当前时间:", time.strftime("%Y-%m-%d %H:%M:%S", current_time))
# 使用datetime模块
today = datetime.date.today()
print("今天日期:", today)
tomorrow = today + datetime.timedelta(days=1)
print("明天日期:", tomorrow)
- 在 Python 的 time 标准库中,localtime() 是一个用于获取本地时间的函数,它会返回一个包含当前本地日期和时间信息的结构体(struct_time 对象);
简单模块示例
# 假设这是一个名为mymath.py的文件
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
return "除数不能为0"
return a / b
# 使用方法(在另一个文件中)
# import mymath
# print(mymath.add(2, 3))
文件操作与类(21-25)
读写文本文件
# 写入文件
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("这是我的第一行笔记\n")
f.write("这是我的第二行笔记\n")
# 读取文件
with open("notes.txt", "r", encoding="utf-8") as f:
content = f.read()
print("文件内容:")
print(content)
统计文件单词数
def count_words(filename):
"""统计文件中的单词数量"""
try:
with open(filename, "r", encoding="utf-8") as f:
content = f.read()
# 简单分割单词(按空格和标点)
words = content.split()
return len(words)
except FileNotFoundError:
return f"错误:文件 '{filename}' 不存在"
word_count = count_words("notes.txt")
print(f"单词数量: {word_count}")
简单的类示例
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"你好,我叫{self.name},今年{self.age}岁。"
def birthday(self):
self.age += 1
return f"生日快乐!我现在{self.age}岁了。"
# 创建对象
person1 = Person("张三", 25)
print(person1.greet())
print(person1.birthday())
类的继承
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "动物发出声音"
class Dog(Animal):
def speak(self):
return f"{self.name}汪汪叫"
class Cat(Animal):
def speak(self):
return f"{self.name}喵喵叫"
dog = Dog("小黑")
cat = Cat("小白")
print(dog.speak())
print(cat.speak())
图书管理系统(简单版)
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
self.borrowed = False
def __str__(self):
status = "已借出" if self.borrowed else "可借阅"
return f"{self.title} (作者: {self.author}) - {status}"
class Library:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
print(f"已添加图书: {book.title}")
def list_books(self):
print("\n图书馆藏书:")
for i, book in enumerate(self.books, 1):
print(f"{i}. {book}")
# 使用图书管理系统
lib = Library()
lib.add_book(Book("Python编程", "张三"))
lib.add_book(Book("数据结构", "李四"))
lib.list_books()
进阶应用(26-30)
简单密码生成器
import random
import string
def generate_password(length=8):
"""生成指定长度的随机密码"""
# 包含大小写字母、数字和特殊字符
characters = string.ascii_letters + string.digits + "!@#$%^&*()"
# 随机选择字符
password = ''.join(random.choice(characters) for _ in range(length))
return password
# 生成10位密码
print("生成的密码:", generate_password(10))
数据可视化(简单图表)
import matplotlib.pyplot as plt
# 确保中文显示正常
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
# 数据
subjects = ["数学", "语文", "英语", "物理", "化学"]
scores = [85, 92, 78, 88, 90]
# 创建柱状图
plt.figure(figsize=(10, 6))
plt.bar(subjects, scores, color='skyblue')
plt.title('学生成绩分布图')
plt.xlabel('科目')
plt.ylabel('分数')
plt.ylim(0, 100) # 设置y轴范围
# 显示图表
plt.show()
文本分析工具
def analyze_text(text):
"""分析文本,返回单词频率统计"""
# 预处理文本:转为小写,去除标点
text = text.lower()
for punctuation in '.,!?;:"\'()[]{}':
text = text.replace(punctuation, ' ')
# 分割单词
words = text.split()
# 统计频率
frequency = {}
for word in words:
if word in frequency:
frequency[word] += 1
else:
frequency[word] = 1
# 按频率排序
sorted_frequency = sorted(frequency.items(), key=lambda x: x[1], reverse=True)
return sorted_frequency
# 分析示例文本
sample_text = """Python is a powerful programming language.
It is easy to learn and fun to use. Python is widely used in many fields."""
word_counts = analyze_text(sample_text)
print("单词频率统计(前5名):")
for word, count in word_counts[:5]:
print(f"{word}: {count}次")
简单的待办事项管理器
class TodoList:
def __init__(self):
self.tasks = []
def add_task(self, task):
self.tasks.append({"task": task, "completed": False})
print(f"已添加任务: {task}")
def list_tasks(self):
print("\n待办事项:")
for i, task in enumerate(self.tasks, 1):
status = "✓" if task["completed"] else " "
print(f"{i}. [{status}] {task['task']}")
def complete_task(self, index):
if 1 <= index <= len(self.tasks):
self.tasks[index-1]["completed"] = True
print(f"已完成任务: {self.tasks[index-1]['task']}")
else:
print("无效的任务编号")
# 使用待办事项管理器
todo = TodoList()
todo.add_task("学习Python")
todo.add_task("阅读书籍")
todo.list_tasks()
todo.complete_task(1)
todo.list_tasks()
温度转换器(带用户界面)
import tkinter as tk
from tkinter import ttk, messagebox
class TemperatureConverter:
def __init__(self, root):
self.root = root
self.root.title("温度转换器")
self.root.geometry("300x200")
# 创建输入框
self.temp_input = ttk.Entry(root, width=10, font=("Arial", 14))
self.temp_input.grid(row=0, column=1, padx=10, pady=20)
# 创建下拉菜单选择单位
self.unit_var = tk.StringVar(value="摄氏度")
self.unit_combobox = ttk.Combobox(root, textvariable=self.unit_var,
values=["摄氏度", "华氏度"], width=8, font=("Arial", 14))
self.unit_combobox.grid(row=0, column=2, padx=10)
# 创建转换按钮
self.convert_btn = ttk.Button(root, text="转换", command=self.convert)
self.convert_btn.grid(row=1, column=1, columnspan=2, pady=10)
# 创建结果标签
self.result_label = ttk.Label(root, text="结果将显示在这里", font=("Arial", 14))
self.result_label.grid(row=2, column=1, columnspan=2, pady=10)
def convert(self):
try:
temp = float(self.temp_input.get())
unit = self.unit_var.get()
if unit == "摄氏度":
# 摄氏度转华氏度
result = temp * 9/5 + 32
self.result_label.config(text=f"{result:.2f} 华氏度")
else:
# 华氏度转摄氏度
result = (temp - 32) * 5/9
self.result_label.config(text=f"{result:.2f} 摄氏度")
except ValueError:
messagebox.showerror("输入错误", "请输入有效的数字")
if __name__ == "__main__":
root = tk.Tk()
app = TemperatureConverter(root)
root.mainloop()