精选了20个Python实战项目!
Python是目前最好的编程语言之一。由于其可读性和对初学者的友好性,已被广泛使用。
那么要想学会并掌握Python,可以实战的练习项目是必不可少的。
接下来,我将给大家介绍20个非常实用的Python项目,帮助大家更好的学习Python。
大家也可根据项目的需求,自己构建解决方法,提高编程水平。
*①* 猜字游戏
在这个游戏中,你必须一个字母一个字母的猜出秘密单词。
如果你猜错了一个字母,你将丢掉一条命。
正如游戏名那样,你需要仔细选择字母,因为你的生命数量非常有限。
import random
# 生命次数
lives = 3
# 神秘单词, 随机选择
words = ['pizza', 'fairy', 'teeth', 'shirt', 'otter', 'plane']
secret_word = random.choice(words)
# print(secret_word)
clue = list('?????')
heart_symbol = u'\u2764'
guessed_word_correctly = False
def update_clue(guessed_letter, secret_word, clue):
index = 0
while index < len(secret_word):
if guessed_letter == secret_word[index]:
clue[index] = guessed_letter
index = index + 1
while lives > 0:
print(clue)
print('剩余生命次数: ' + heart_symbol * lives)
guess = input('猜测字母或者是整个单词: ')
if guess == secret_word:
guessed_word_correctly = True
break
if guess in secret_word:
update_clue(guess, secret_word, clue)
else:
print('错误。你丢了一条命\n')
lives = lives - 1
if guessed_word_correctly:
print('你赢了! 秘密单词是 ' + secret_word)
else:
print('你输了! 秘密单词是 ' + secret_word)
下面就让小F,来玩一下。
**** ******
**** ******
****②****** ***闹钟***
闹钟是一种具有可以在预先设定的时间被激活以响铃的功能的时钟,用于唤醒打工人们。
使用Python中的DateTime模块来创建闹钟,并用Python中的playsound库来播放闹钟声音。
from datetime import datetime
from playsound import playsound
# 输入
alarm_time = input("请输入闹钟时间, 示例: 09:50:00 am\n")
# 时
alarm_hour = alarm_time[0:2]
# 分
alarm_minute = alarm_time[3:5]
# 秒
alarm_seconds = alarm_time[6:8]
# 上午或下午
alarm_period = alarm_time[9:11].upper()
print("完成闹钟设置..")
while True:
now = datetime.now()
current_hour = now.strftime("%I")
current_minute = now.strftime("%M")
current_seconds = now.strftime("%S")
current_period = now.strftime("%p")
# 时间判断
if alarm_period == current_period:
if alarm_hour == current_hour:
if alarm_minute == current_minute:
if alarm_seconds == current_seconds:
print("起来啦!")
# 闹钟铃声
playsound('audio.mp3')
break
来测试一下,设置一个闹钟,到指定时间就会有音乐响起。
************ **************
************③************** 骰子模拟器
可以通过选择1到6之间的随机整数,来完成骰子模拟。
import random
# 设置最大值和最小值
min_val = 1
max_val = 6
# 是否继续
roll_again = "yes"
# 循环
while roll_again == "yes" or roll_again == "y":
print("开始掷骰子")
print("骰子数值是 :")
# 第一轮
print(random.randint(min_val, max_val))
# 第二轮
print(random.randint(min_val, max_val))
# 是否继续
roll_again = input("是否继续掷骰子?(是的话, 输入yes或者y)")
使用random.randint()函数。函数根据我们指定的开始和结束范围返回一个随机整数。
****************** ********************
****************** ********************
******************④******************** 二维码
二维码是用于将数据编码和解码为机器可读的方法。
包含一个白色背景上的黑色方块网格,可以被任何成像设备(如手机)读取,并进行处理以从图案中提取所需的数据。
import pyqrcode
# 设置二维码信息
s = "https://www.baidu.com"
# 生成二维码
url = pyqrcode.create(s)
# 保存二维码
url.svg("baidu.svg", scale=8)
结果如下。
************************ **************************
************************⑤************************** 语言检测
当你需要处理包含不同语言数据,且数据非常大的时候,语言检测就派上用场了。
使用Python中的langdetect包,可以在几行代码内检测超过55种不同的语言。
from langdetect import detect
text = input("输入信息: ")
print(detect(text))
示例。
******** **********
********⑥******** **加密和解密****
密码术意味着更改消息的文本,以便不知道你秘密的人永远不会理解你的消息。
下面就来创建一个GUI应用程序,使用Python进行加密和解密。
在这里,我们需要编写使用无限循环的代码,代码将不断询问用户是否要加密或解密消息。
from tkinter import messagebox, simpledialog, Tk
def is_even(number):
return number % 2 == 0
def get_even_letters(message):
even_letters = []
for counter in range(0, len(message)):
if is_even(counter):
even_letters.append(message[counter])
return even_letters
def get_odd_letters(message):
odd_letters = []
for counter in range(0, len(message)):
if not is_even(counter):
odd_letters.append(message[counter])
return odd_letters
def swap_letters(message):
letter_list = []
if not is_even(len(message)):
message = message + 'x'
even_letters = get_even_letters(message)
odd_letters = get_odd_letters(message)
for counter in range(0, int(len(message) / 2)):
letter_list.append(odd_letters[counter])
letter_list.append(even_letters[counter])
new_message = ''.join(letter_list)
return new_message
def get_task():
task = simpledialog.askstring('任务', '你是否想要加密或解密信息?')
return task
def get_message():
message = simpledialog.askstring('信息', '输入相关信息: ')
return message
root = Tk()
while True:
task = get_task()
if task == '加密':
message = get_message()
encrypted = swap_letters(message)
messagebox.showinfo('密电的密文为:', encrypted)
elif task == '解密':
message = get_message()
decrypted = swap_letters(message)
messagebox.showinfo('密电的明文为:', decrypted)
else:
break
root.mainloop()
示例。
******** **********
********⑦******** URL缩短**
短网址由于易于记忆和输入,因此在数字营销领域非常受欢迎。
这里给大家介绍一下,如何使用Python创建URL缩短器。
from __future__ import with_statement
import contextlib
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
import sys
def make_tiny(url):
request_url = ('http://tinyurl.com/api-create.php?' + urlencode({'url': url}))
# print(request_url)
with contextlib.closing(urlopen(request_url)) as response:
return response.read().decode('utf-8')
def main():
for tinyurl in map(make_tiny, ['https://baijiahao.baidu.com/s?id=1719379508156841662']):
print(tinyurl)
if __name__ == '__main__':
main()
运行代码,输出如下。
# 输出
https://tinyurl.com/y4z6z2gq
******************** **********************
******************** **********************
********************⑧********************** 音乐播放器
音乐播放器,可让你快速轻松地管理和收听所有音乐文件。
应该不少小伙伴都使用过,网易云音乐、QQ音乐、酷狗音乐等。
这里小F将使用Pygame和Tkinter,来创建一个音乐播放器。
import pygame
import tkinter as tkr
from tkinter.filedialog import askdirectory
import os
music_player = tkr.Tk()
music_player.title("我的音乐播放器")
music_player.geometry("450x350")
directory = askdirectory()
os.chdir(directory)
song_list = os.listdir()
play_list = tkr.Listbox(music_player, font="Helvetica 12 bold", bg='yellow', selectmode=tkr.SINGLE)
for item in song_list:
pos = 0
play_list.insert(pos, item)
pos += 1
pygame.init()
pygame.mixer.init()
def play():
"""播放"""
pygame.mixer.music.load(play_list.get(tkr.ACTIVE))
var.set(play_list.get(tkr.ACTIVE))
pygame.mixer.music.play()
def stop():
"""停止"""
pygame.mixer.music.stop()
def pause():
"""暂停"""
pygame.mixer.music.pause()
def unpause():
"""取消暂停"""
pygame.mixer.music.unpause()
Button1 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="播放", command=play, bg="blue", fg="white")
Button2 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="停止", command=stop, bg="red", fg="white")
Button3 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="暂停", command=pause, bg="purple", fg="white")
Button4 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="取消暂停", command=unpause, bg="orange", fg="white")
var = tkr.StringVar()
song_title = tkr.Label(music_player, font="Helvetica 12 bold", textvariable=var)
song_title.pack()
Button1.pack(fill="x")
Button2.pack(fill="x")
Button3.pack(fill="x")
Button4.pack(fill="x")
play_list.pack(fill="both", expand="yes")
music_player.mainloop()
选择音乐文件所在的文件夹,点击播放,即可听见音乐。
******** **********
******** **********
********⑨******** **生命游戏****
生命游戏由英国数学家约翰·H·康威设计的,是一种类似于生物社会的兴衰和交替的游戏。
游戏使用无限大小的矩形网格,其中每个网格都是空的或被有机体占据。被占用的细胞是活的,而空的细胞是死的。
游戏在特定时期内进行,每一轮都会根据当前配置中生物体的排列创建一个新的世代。
下一代网格的状态,是通过将以下四个基本规则应用于当前配置的每个网格来确定的:
-
如果一个细胞还活着并且有两个或三个活着的邻居,那么该细胞在下一代中仍然活着;
-
一个没有活邻居或只有一个活邻居的活细胞会在下一代死于孤立;
-
有四个或更多活邻居的活细胞会因下一代人口过剩而死亡;
-
一个只有三个活着的邻居的死细胞会导致出生并在下一代中存活;
board = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
# 邻居数组为给定的单元格找到8个相邻的单元格
neighbors = [(1, 0), (1, -1), (0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1)]
rows = len(board)
cols = len(board[0])
# 创建一个原始板的副本
copy_board = [[board[row][col] for col in range(cols)] for row in range(rows)]
# 逐个单元地迭代
for row in range(rows):
for col in range(cols):
# 对于每个单元计算邻居的数量
live_neighbors = 0
for neighbor in neighbors:
r = (row + neighbor[0])
c = (col + neighbor[1])
# 检查相邻细胞的有效性,以及它是否原来是一个活细胞
# 评估是针对副本进行的,因为它永远不会更新。
if (r < rows and r >= 0) and (c < cols and c >= 0) and (copy_board[r][c] == 1):
live_neighbors += 1
# 规则1或规则3
if copy_board[row][col] == 1 and (live_neighbors < 2 or live_neighbors > 3):
board[row][col] = 0
# 规则4
if copy_board[row][col] == 0 and live_neighbors == 3:
board[row][col] = 1
print(board)
结果如下。
# 输入
board = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
# 输出
board = [[0, 0, 0], [1, 1, 0], [0, 0, 0]]
******** **********
******** **********
********⑩******** **Turtle绘图****
Turtle模块提供了在二维平面上移动的环境。
Turtle可以实现位置、航向和各种可能的状态和动作。
import turtle as tu
roo = tu.Turtle() # 创建对象
wn = tu.Screen() # 屏幕对象
wn.bgcolor("black") # 屏幕背景
wn.title("分形树")
roo.left(90) # 移动
roo.speed(20) # 速度
def draw(l): # 以长度'l'作为参数的递归函数
if l < 10:
return
else:
roo.pensize(2) # 设置画笔大小
roo.pencolor("yellow") # 画笔颜色
roo.forward(l) # 朝向
roo.left(30) # 移动
draw(3 * l / 4) # 绘制
roo.right(60) # 移动
draw(3 * l / 4) # 绘制
roo.left(30) # 移动
roo.pensize(2)
roo.backward(l) # 返回初始位置
draw(20) # 绘制20次
roo.right(90)
roo.speed(2000)
# recursion
def draw(l):
if (l < 10):
return
else:
roo.pensize(2)
roo.pencolor("magenta") # magenta
roo.forward(l)
roo.left(30)
draw(3 * l / 4)
roo.right(60)
draw(3 * l / 4)
roo.left(30)
roo.pensize(2)
roo.backward(l)
draw(20)
roo.left(270)
roo.speed(2000)
# recursion
def draw(l):
if (l < 10):
return
else:
roo.pensize(2)
roo.pencolor("red") # red
roo.forward(l)
roo.left(30)
draw(3 * l / 4)
roo.right(60)
draw(3 * l / 4)
roo.left(30)
roo.pensize(2)
roo.backward(l)
draw(20)
roo.right(90)
roo.speed(2000)
# recursion
def draw(l):
if (l < 10):
return
else:
roo.pensize(2)
roo.pencolor('#FFF8DC') # white
roo.forward(l)
roo.left(30)
draw(3 * l / 4)
roo.right(60)
draw(3 * l / 4)
roo.left(30)
roo.pensize(2)
roo.backward(l)
draw(20)
########################################################
def draw(l):
if (l < 10):
return
else:
roo.pensize(3)
roo.pencolor("lightgreen") # lightgreen
roo.forward(l)
roo.left(30)
draw(4 * l / 5)
roo.right(60)
draw(4 * l / 5)
roo.left(30)
roo.pensize(3)
roo.backward(l)
draw(40)
roo.right(90)
roo.speed(2000)
# recursion
def draw(l):
if (l < 10):
return
else:
roo.pensize(3)
roo.pencolor("red") # red
roo.forward(l)
roo.left(30)
draw(4 * l / 5)
roo.right(60)
draw(4 * l / 5)
roo.left(30)
roo.pensize(3)
roo.backward(l)
draw(40)
roo.left(270)
roo.speed(2000)
# recursion
def draw(l):
if (l < 10):
return
else:
roo.pensize(3)
roo.pencolor("yellow") # yellow
roo.forward(l)
roo.left(30)
draw(4 * l / 5)
roo.right(60)
draw(4 * l / 5)
roo.left(30)
roo.pensize(3)
roo.backward(l)
draw(40)
roo.right(90)
roo.speed(2000)
# recursion
def draw(l):
if (l < 10):
return
else:
roo.pensize(3)
roo.pencolor('#FFF8DC') # white
roo.forward(l)
roo.left(30)
draw(4 * l / 5)
roo.right(60)
draw(4 * l / 5)
roo.left(30)
roo.pensize(3)
roo.backward(l)
draw(40)
########################################################
def draw(l):
if (l < 10):
return
else:
roo.pensize(2)
roo.pencolor("cyan") # cyan
roo.forward(l)
roo.left(30)
draw(6 * l / 7)
roo.right(60)
draw(6 * l / 7)
roo.left(30)
roo.pensize(2)
roo.backward(l)