百度搜索引擎優(yōu)化方案關(guān)鍵詞優(yōu)化排名公司
今天給大家介紹20個非常實(shí)用的Python項(xiàng)目,幫助大家更好的學(xué)習(xí)Python。
完整版Python項(xiàng)目源碼,【點(diǎn)擊這里】領(lǐng)取!
① 猜字游戲
import random
def guess_word_game():
words = ["apple", "banana", "cherry", "grape", "orange"]
target_word = random.choice(words)
guessed_letters = []
attempts = 6print("歡迎來到猜字游戲!") print("提示:這個單詞是一種水果。") print("_ " * len(target_word))while attempts > 0: guess = input("請輸入一個字母:").lower()if len(guess)!= 1 or not guess.isalpha(): print("請輸入一個有效的字母。") continueif guess in guessed_letters: print("你已經(jīng)猜過這個字母了。") continueguessed_letters.append(guess)if guess in target_word: print("正確!") display_word = "" for letter in target_word: if letter in guessed_letters: display_word += letter + " " else: display_word += "_ " print(display_word)if "_" not in display_word: print(f"恭喜你猜對了!答案是{target_word}。") break else: attempts -= 1 print(f"錯誤!你還有{attempts}次機(jī)會。")if attempts == 0: print(f"游戲結(jié)束。答案是{target_word}。")
你可以這樣調(diào)用這個游戲:
if __name__ == "__main__":` `guess_word_game()
這個猜字游戲從給定的水果單詞列表中隨機(jī)選擇一個單詞,讓玩家通過猜測單個字母來猜出這個單詞。玩家有 6 次錯誤猜測的機(jī)會。每次猜測后,游戲會顯示已猜對的字母在單詞中的位置,以及還剩下多少次機(jī)會。如果玩家猜對了所有字母,游戲會顯示祝賀消息并結(jié)束;如果玩家用完了所有機(jī)會,游戲會顯示答案并結(jié)束。
② 鬧鐘
import tkinter as tk
from datetime import datetime
from playsound import playsound
class AlarmClock:
def __init__(self):
self.root = tk.Tk()
self.root.title("鬧鐘")
self.hour_var = tk.StringVar()
self.minute_var = tk.StringVar()
self.second_var = tk.StringVar()
tk.Label(self.root, text="小時:").grid(row=0, column=0)
tk.Entry(self.root, textvariable=self.hour_var).grid(row=0, column=1)
tk.Label(self.root, text="分鐘:").grid(row=1, column=0)
tk.Entry(self.root, textvariable=self.minute_var).grid(row=1, column=1)
tk.Label(self.root, text="秒:").grid(row=2, column=0)
tk.Entry(self.root, textvariable=self.second_var).grid(row=2, column=1)
tk.Button(self.root, text="設(shè)置鬧鐘", command=self.set_alarm).grid(row=3, column=0, columnspan=2)
def set_alarm(self):
hour = int(self.hour_var.get())
minute = int(self.minute_var.get())
second = int(self.second_var.get())
while True:
now = datetime.now()
current_hour = now.hour
current_minute = now.minute
current_second = now.second
if current_hour == hour and current_minute == minute and current_second == second:
playsound('alarm_sound.wav')
break
def run(self):
self.root.mainloop()
if __name__ == "__main__":
alarm_clock = AlarmClock()
alarm_clock.run()
在運(yùn)行這個程序之前,請確保安裝了playsound
庫。同時,準(zhǔn)備一個名為alarm_sound.wav
的音頻文件作為鬧鐘聲音。這個程序允許用戶輸入小時、分鐘和秒來設(shè)置鬧鐘,當(dāng)?shù)竭_(dá)設(shè)定時間時,會播放指定的音頻文件。
③ 骰子模擬器
可以通過選擇1到6之間的隨機(jī)整數(shù),來完成骰子模擬。

④ 二維碼
⑤ 語言檢測
示例。
⑥ 加密和解密
def encrypt(text, shift):
encrypted_text = ""
for char in text:
if char.isalpha():
if char.islower():
encrypted_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
else:
encrypted_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
encrypted_text += encrypted_char
else:
encrypted_text += char
return encrypted_text
def decrypt(text, shift):
return encrypt(text, 26 - shift)
# 示例用法
original_text = "Hello, World!"
shift_value = 3
encrypted = encrypt(original_text, shift_value)
print(f"加密后的文本:{encrypted}")
decrypted = decrypt(encrypted, shift_value)
print(f"解密后的文本:{decrypted}")
在這個例子中,encrypt
函數(shù)接受一個文本和一個偏移量作為參數(shù),對文本中的字母進(jìn)行加密。如果字符是小寫字母,將其轉(zhuǎn)換為對應(yīng)的加密后的小寫字母;如果是大寫字母,進(jìn)行類似的處理。非字母字符保持不變。decrypt
函數(shù)通過反向偏移量來解密文本,實(shí)際上就是再次調(diào)用加密函數(shù),但使用反向的偏移量。
示例。
⑦ URL縮短
from flask import Flask, render_template, request
import pyshorteners
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
short_url = None
if request.method == 'POST':
long_url = request.form['long_url']
s = pyshorteners.Shortener()
short_url = s.tinyurl.short(long_url)
return render_template('index.html', short_url=short_url)
if __name__ == '__main__':
app.run(debug=True)
同時,你需要一個名為index.html
的模板文件,內(nèi)容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>URL Shortener</title>
</head>
<body>
<h1>URL Shortener</h1>
<form method="post">
<label for="long_url">輸入長 URL:</label>
<input type="text" id="long_url" name="long_url">
<input type="submit" value="縮短">
</form>
{% if short_url %}
<p>縮短后的 URL:{{ short_url }}</p>
{% endif %}
</body>
</html>
這個程序創(chuàng)建了一個簡單的 Web 應(yīng)用,用戶在表單中輸入一個長 URL,點(diǎn)擊 “縮短” 按鈕后,程序使用pyshorteners
庫將長 URL 縮短,并在頁面上顯示縮短后的 URL。
⑧ 音樂播放器
import tkinter as tk
import pygame
class MusicPlayer:
def __init__(self):
self.root = tk.Tk()
self.root.title("音樂播放器")
self.song_list = []
self.current_song_index = 0
self.load_button = tk.Button(self.root, text="加載音樂", command=self.load_songs)
self.load_button.pack()
self.play_button = tk.Button(self.root, text="播放", command=self.play_song)
self.play_button.pack()
self.pause_button = tk.Button(self.root, text="暫停", command=self.pause_song)
self.pause_button.pack()
self.next_button = tk.Button(self.root, text="下一首", command=self.next_song)
self.next_button.pack()
self.prev_button = tk.Button(self.root, text="上一首", command=self.prev_song)
self.prev_button.pack()
pygame.mixer.init()
def load_songs(self):
file_paths = tk.filedialog.askopenfilenames(filetypes=[("音頻文件", "*.mp3;*.wav")])
self.song_list = list(file_paths)
def play_song(self):
if self.song_list:
pygame.mixer.music.load(self.song_list[self.current_song_index])
pygame.mixer.music.play()
def pause_song(self):
pygame.mixer.music.pause()
def next_song(self):
if self.song_list:
self.current_song_index = (self.current_song_index + 1) % len(self.song_list)
self.play_song()
def prev_song(self):
if self.song_list:
self.current_song_index = (self.current_song_index - 1) % len(self.song_list)
self.play_song()
def run(self):
self.root.mainloop()
if __name__ == "__main__":player = MusicPlayer()
player.run()
這個音樂播放器可以加載多個音頻文件,并提供播放、暫停、上一首和下一首的功能。它使用tkinter
創(chuàng)建了用戶界面,使用pygame
庫來播放音樂。
請注意,在運(yùn)行代碼之前,請確保已經(jīng)安裝了pygame
庫??梢允褂?code>pip install pygame來安裝。
選擇音樂文件所在的文件夾,點(diǎn)擊播放,即可聽見音樂。
⑨ 生命游戲
生命游戲由英國數(shù)學(xué)家約翰·H·康威設(shè)計(jì)的,是一種類似于生物社會的興衰和交替的游戲。
board = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]# 鄰居數(shù)組為給定的單元格找到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])# 創(chuàng)建一個原始板的副本
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):# 對于每個單元計(jì)算鄰居的數(shù)量live_neighbors = 0for neighbor in neighbors:r = (row + neighbor[0])c = (col + neighbor[1])# 檢查相鄰細(xì)胞的有效性,以及它是否原來是一個活細(xì)胞# 評估是針對副本進(jìn)行的,因?yàn)樗肋h(yuǎn)不會更新。if (r < rows and r >= 0) and (c < cols and c >= 0) and (copy_board[r][c] == 1):live_neighbors += 1# 規(guī)則1或規(guī)則3if copy_board[row][col] == 1 and (live_neighbors < 2 or live_neighbors > 3):board[row][col] = 0# 規(guī)則4if copy_board[row][col] == 0 and live_neighbors == 3:board[row][col] = 1print(board)
Turtle模塊提供了在二維平面上移動的環(huán)境。
Turtle可以實(shí)現(xiàn)位置、航向和各種可能的狀態(tài)和動作。
roo = tu.Turtle() # 創(chuàng)建對象
wn = tu.Screen() # 屏幕對象
wn.bgcolor("black") # 屏幕背景
wn.title("分形樹")
roo.left(90) # 移動
roo.speed(20) # 速度def draw(l): # 以長度'l'作為參數(shù)的遞歸函數(shù)if l < 10:returnelse:roo.pensize(2) # 設(shè)置畫筆大小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):returnelse:roo.pensize(2)roo.pencolor("magenta") # magentaroo.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):returnelse:roo.pensize(2)roo.pencolor("red") # redroo.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):returnelse:roo.pensize(2)roo.pencolor('#FFF8DC') # whiteroo.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):returnelse:roo.pensize(3)roo.pencolor("lightgreen") # lightgreenroo.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):returnelse:roo.pensize(3)roo.pencolor("red") # redroo.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):returnelse:roo.pensize(3)roo.pencolor("yellow") # yellowroo.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):returnelse:roo.pensize(3)roo.pencolor('#FFF8DC') # whiteroo.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):returnelse:roo.pensize(2)roo.pencolor("cyan") # cyanroo.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)draw(60)roo.right(90)
roo.speed(2000)# recursion
def draw(l):if (l < 10):returnelse:roo.pensize(2)roo.pencolor("yellow") # yellowroo.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)draw(60)roo.left(270)
roo.speed(2000)# recursion
def draw(l):if (l < 10):returnelse:roo.pensize(2)roo.pencolor("magenta") # magentaroo.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)draw(60)roo.right(90)
roo.speed(2000)# recursion
def draw(l):if (l < 10):returnelse:roo.pensize(2)roo.pencolor('#FFF8DC') # whiteroo.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)draw(60)
wn.exitonclick()
繪制時間較長,結(jié)果如下,挺好看的。
? 計(jì)算器
import tkinter as tk
class Calculator:
def __init__(self):
self.root = tk.Tk()
self.root.title("簡單計(jì)算器")
self.expression = ""
self.display_var = tk.StringVar()
self.display = tk.Entry(self.root, textvariable=self.display_var, font=('Helvetica', 20))
self.display.grid(row=0, column=0, columnspan=4)
buttons = [
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', '.', '=', '+',
'C'
]
row_val = 1
col_val = 0
for button in buttons:
tk.Button(self.root, text=button, padx=20, pady=20, command=lambda b=button: self.button_click(b)).grid(row=row_val, column=col_val)
col_val += 1
if col_val > 3:
col_val = 0
row_val += 1
def button_click(self, button):
if button == '=':
try:
result = str(eval(self.expression))
self.display_var.set(result)
self.expression = result
except:
self.display_var.set("錯誤")
self.expression = ""
elif button == 'C':
self.display_var.set("")
self.expression = ""
else:
self.expression += button
self.display_var.set(self.expression)
def run(self):
self.root.mainloop()
if __name__ == "__main__":
calculator = Calculator()
calculator.run()
這個計(jì)算器可以進(jìn)行基本的加、減、乘、除運(yùn)算,并且有清除(C)和等于(=)按鈕。它使用 Tkinter 創(chuàng)建了一個簡單的圖形用戶界面,包含一個顯示區(qū)域和多個按鈕。當(dāng)用戶點(diǎn)擊按鈕時,相應(yīng)的操作會被執(zhí)行,結(jié)果會顯示在顯示區(qū)域中。
運(yùn)行代碼,出現(xiàn)一個計(jì)算器,非常好用!
? 猜數(shù)游戲
運(yùn)行代碼,結(jié)果展示
? 圖像轉(zhuǎn)換器
from PIL import Image
import os
def convert_image(input_path, output_path, output_format):
try:
img = Image.open(input_path)
img.save(output_path, format=output_format)
print(f"成功將 {input_path} 轉(zhuǎn)換為 {output_path}")
except Exception as e:
print(f"轉(zhuǎn)換失敗:{e}")
# 示例用法
input_image_path = "input.jpg"
output_image_path = "output.png"
output_format = "PNG"
convert_image(input_image_path, output_image_path, output_format)
在這個示例中,convert_image
函數(shù)接受輸入圖像路徑、輸出圖像路徑和目標(biāo)格式作為參數(shù)。它使用Pillow
庫打開輸入圖像,然后將其保存為指定的格式。你可以根據(jù)實(shí)際情況修改輸入和輸出路徑以及目標(biāo)格式。
請注意,確保已經(jīng)安裝了Pillow
庫,可以使用pip install Pillow
進(jìn)行安裝。
運(yùn)行代碼,選擇圖片,點(diǎn)擊轉(zhuǎn)換按鈕,即可完成圖像格式變換。
? 重量轉(zhuǎn)換器
def convert_weight(value, from_unit, to_unit):
units = {
"gram": 1,
"kilogram": 1000,
"pound": 453.592,
"ounce": 28.3495
}
if from_unit not in units or to_unit not in units:
return "Invalid units"
return value * units[from_unit] / units[to_unit]
# 示例用法
weight = 100
print(f"{weight} grams is {convert_weight(weight, 'gram', 'kilogram')} kilograms.")
print(f"{weight} grams is {convert_weight(weight, 'gram', 'pound')} pounds.")
print(f"{weight} grams is {convert_weight(weight, 'gram', 'ounce')} ounces.")
這個重量轉(zhuǎn)換器函數(shù)接受三個參數(shù):要轉(zhuǎn)換的數(shù)值、原始單位和目標(biāo)單位。它使用一個字典來存儲不同單位之間的換算比例,然后根據(jù)給定的數(shù)值和單位進(jìn)行換算。你可以根據(jù)實(shí)際需求進(jìn)行擴(kuò)展和改進(jìn),比如添加用戶輸入功能,以便在運(yùn)行時獲取數(shù)值和單位。
運(yùn)行代碼,出現(xiàn)界面,輸入數(shù)值,點(diǎn)擊轉(zhuǎn)換。
? 年齡和性別檢測
以下是一個使用 Python 進(jìn)行年齡和性別檢測的示例代碼,這里使用了第三方庫face_recognition
和opencv-python
,請確保在運(yùn)行代碼前安裝好這些庫。
import face_recognition
import cv2
import numpy as np
import datetime
def detect_age_gender(frame):
face_locations = face_recognition.face_locations(frame)
for top, right, bottom, left in face_locations:
face_image = frame[top:bottom, left:right]
# 使用深度學(xué)習(xí)模型進(jìn)行性別和年齡預(yù)測
# 這里使用示例值,實(shí)際應(yīng)用中需使用專業(yè)模型進(jìn)行預(yù)測
gender = np.random.choice(['Male', 'Female'])
age = np.random.randint(18, 60)
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.putText(frame, f'{gender}, {age} years old', (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
return frame
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if ret:
result_frame = detect_age_gender(frame)
cv2.imshow('Age and Gender Detection', result_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
? 人臉檢測
原圖如下。
? 鉛筆素描
結(jié)果如下。
? 文本編輯器
import tkinter as tk
from tkinter import filedialog
class TextEditor:
def __init__(self, root):
self.root = root
self.root.title("簡單文本編輯器")
self.text_area = tk.Text(root)
self.text_area.pack(fill=tk.BOTH, expand=True)
self.menu_bar = tk.Menu(root)
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="打開", command=self.open_file)
self.file_menu.add_command(label="保存", command=self.save_file)
self.menu_bar.add_cascade(label="文件", menu=self.file_menu)
root.config(menu=self.menu_bar)
def open_file(self):
file_path = filedialog.askopenfilename()
if file_path:
with open(file_path, 'r') as file:
content = file.read()
self.text_area.delete(1.0, tk.END)
self.text_area.insert(tk.END, content)
def save_file(self):
file_path = filedialog.asksaveasfilename(defaultextension=".txt")
if file_path:
content = self.text_area.get(1.0, tk.END)
with open(file_path, 'w') as file:
file.write(content)
if __name__ == "__main__":
root = tk.Tk()
editor = TextEditor(root)
root.mainloop()
這個文本編輯器具有打開和保存文件的功能。它使用 Tkinter 的菜單和文本區(qū)域來實(shí)現(xiàn)基本的文本編輯操作。
結(jié)果如下:
? 圖像分割
如果具有視覺的機(jī)器人是按顏色來計(jì)算糖果的數(shù)量,那么了解糖果之間的界限對它來說就很重要。
from skimage.io import imread
from skimage import color
import numpy as np
import matplotlib.pyplot as plt# 讀取圖片
cimage = imread('photo.jpg')
fig, ax = plt.subplots(figsize=(20, 20))
ax.imshow(cimage)
ax.axis('off')# RGB轉(zhuǎn)為LAB
lab_img = color.rgb2lab(cimage)
x, y, z = lab_img.shape# 顯示顏色
to_plot = cimage.reshape(x * y, 3)
colors_map = to_plot.astype(np.float) / 256# 創(chuàng)建數(shù)據(jù)
scatter_x = []
scatter_y = []
for xi in range(x):for yi in range(y):L_val = lab_img[xi, yi][0]A_val = lab_img[xi, yi][1]B_val = lab_img[xi, yi][2]scatter_x.append(A_val)scatter_y.append(B_val)plt.figure(figsize=(20, 20))
plt.xlabel("a* from green to red")
plt.ylabel("b* from blue to yellow")
plt.scatter(scatter_x, scatter_y, c=colors_map)
# 顯示
plt.show()
我們可以使用散點(diǎn)圖,根據(jù)糖果的顏色對圖像進(jìn)行分割。
最后我們可以根據(jù)顏色,正確地分割圖像中的糖果。
def filter_color(L_val_min, A_val_min, A_val_max, B_val_min, B_val_max):filtered_image = np.copy(cimage)for xi in range(x):for yi in range(y):L_val = lab_img[xi, yi][0]A_val = lab_img[xi, yi][1]B_val = lab_img[xi, yi][2]if L_val > L_val_min and A_val > A_val_min and A_val < A_val_max and B_val > B_val_min and B_val < B_val_max:passelse:filtered_image[xi, yi] = [255,255,255]return filtered_imagelab_img = color.rgb2lab(cimage)
yellow = filter_color(70, -50, 0, 30, 100)
red = filter_color(30, 25, 100, 0, 100)
green = filter_color(50, -128, -20, 0, 50)
blue = filter_color(50, -40, 30, -128, -20)
white = filter_color(93, -25, 25, -25, 25)
pink = filter_color(50, 20, 128, -50, 0)fig, ax = plt.subplots(nrows=3, ncols=2, figsize=(20,20))
ax[0][0].imshow(pink)
ax[0][0].set_title("pink Candies")
? 模擬時鐘
使用Tkinter制作一個簡單的模擬時鐘GUI應(yīng)用程序。
import tkinter as tk
import time
def update_clock():
current_time = time.strftime('%H:%M:%S')
label.config(text=current_time)
root.after(1000, update_clock)
root = tk.Tk()
root.title("模擬時鐘")
label = tk.Label(root, font=('Helvetica', 48))
label.pack(pady=20)
update_clock()
root.mainloop()
這段代碼首先導(dǎo)入了必要的庫,然后定義了一個函數(shù)來更新時鐘顯示。在主程序中,創(chuàng)建了一個 Tkinter 窗口,設(shè)置了標(biāo)題,創(chuàng)建了一個用于顯示時間的標(biāo)簽,并通過調(diào)用update_clock
函數(shù)啟動時鐘的更新循環(huán)。每隔 1000 毫秒(1 秒),時鐘會更新一次顯示。
結(jié)果如下:
如果你是準(zhǔn)備學(xué)習(xí)Python或者正在學(xué)習(xí)(想通過Python兼職),下面這些你應(yīng)該能用得上:
包括:Python安裝包、Python web開發(fā),Python爬蟲,Python數(shù)據(jù)分析,人工智能、自動化辦公等學(xué)習(xí)教程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好Python!