8个硬核的python入门项目

发布时间:2024年01月22日

大家好,Python是一种通用编程语言,被广泛用于Web开发、数据分析、机器学习和自动化。提高Python技能的最佳方式之一是从事实际项目。本文将介绍8个带有代码的Python项目,这些项目将帮助大家增强编程能力。这些项目涵盖了各种主题和难度级别,助力大家成长为一个Python开发者。

1. URL缩短器

URL缩短器是将长网站链接缩短的方便工具。在这个项目中,将使用Python和Flask(一个流行的Web框架)来构建一个URL缩短器。通过利用Flask的强大功能,处理HTTP请求、生成唯一的短代码和重定向用户到原始URL。

from?flask?import?Flask,?redirect,?render_template,?request
import?string
import?random

app?=?Flask(__name__)

#?Dictionary?to?store?the?mappings?of?short?codes?to?original?URLs
url_mapping?=?{}


def?generate_short_code():
????"""Generate?a?random?short?code."""
????characters?=?string.ascii_letters?+?string.digits
????short_code?=?''.join(random.choice(characters)?for?_?in?range(6))
????return?short_code


@app.route('/',?methods=['GET',?'POST'])
def?home():
????if?request.method?==?'POST':
????????original_url?=?request.form['url']
????????short_code?=?generate_short_code()

????????url_mapping[short_code]?=?original_url

????????short_url?=?request.host_url?+?short_code
????????return?render_template('index.html',?short_url=short_url)

????return?render_template('index.html')


@app.route('/<short_code>')
def?redirect_to_original_url(short_code):
????if?short_code?in?url_mapping:
????????original_url?=?url_mapping[short_code]
????????return?redirect(original_url)
????else:
????????return?"Short?URL?not?found."


if?__name__?==?'__main__':
????app.run(debug=True)

2. 图像字幕生成器

图像字幕是深度学习的一个迷人应用,这个项目将使用Python和TensorFlow库来创建一个图像字幕生成器。通过组合计算机视觉和自然语言处理技术,程序能够自动为图像生成描述性的字幕。

import?tensorflow?as?tf
import?matplotlib.pyplot?as?plt
import?numpy?as?np
from?PIL?import?Image
import?os

#?Load?the?pre-trained?InceptionV3?model
inception_model?=?tf.keras.applications.InceptionV3(include_top=True,?weights='imagenet')

#?Load?the?tokenizer
tokenizer?=?tf.keras.preprocessing.text.Tokenizer()
tokenizer_path?=?'tokenizer.pkl'
tokenizer?=?tf.keras.preprocessing.text.tokenizer_from_json(tokenizer_path)

#?Define?the?maximum?sequence?length?(number?of?words)?for?captions
max_sequence_length?=?20

#?Load?the?pre-trained?caption?generation?model
model_path?=?'caption_generator_model.h5'
model?=?tf.keras.models.load_model(model_path)

#?Load?the?word-to-index?and?index-to-word?mappings
word_to_index?=?tokenizer.word_index
index_to_word?=?{index:?word?for?word,?index?in?word_to_index.items()}

#?Load?the?pre-trained?InceptionV3?model
inception_model?=?tf.keras.applications.InceptionV3(include_top=True,?weights='imagenet')

def?preprocess_image(image_path):
????"""Preprocess?the?image?for?input?to?the?InceptionV3?model."""
????img?=?Image.open(image_path)
????img?=?img.resize((299,?299))
????img?=?np.array(img)
????img?=?img?/?255.0
????img?=?img.reshape(1,?299,?299,?3)
????return?img

def?generate_caption(image_path):
????"""Generate?a?caption?for?the?given?image."""
????img?=?preprocess_image(image_path)
????features?=?inception_model.predict(img)
????features?=?features.reshape(1,?-1)
????
????start_token?=?tokenizer.word_index['<start>']
????end_token?=?tokenizer.word_index['<end>']
????
????caption?=?[]
????input_sequence?=?[start_token]
????for?_?in?range(max_sequence_length):
????????sequence?=?np.array(input_sequence)
????????y_pred?=?model.predict([features,?sequence])
????????y_pred?=?np.argmax(y_pred)
????????
????????if?index_to_word[y_pred]?==?'<end>':
????????????break
????????
????????caption.append(index_to_word[y_pred])
????????input_sequence.append(y_pred)
????
????generated_caption?=?'?'.join(caption)
????return?generated_caption

#?Path?to?the?image?for?caption?generation
image_path?=?'example_image.jpg'

#?Generate?caption?for?the?image
caption?=?generate_caption(image_path)
print('Generated?Caption:',?caption)

#?Display?the?image
img?=?Image.open(image_path)
plt.imshow(img)
plt.axis('off')
plt.show()

3. 天气预报App

构建一个天气预报App将为使用API提供宝贵经验,使用Python和OpenWeatherMap API来获取给定位置的天气数据并向用户显示。这个项目将涉及发出HTTP请求、解析JSON响应以及以用户友好的方式呈现数据。

import?requests
import?json

def?get_weather_data(api_key,?city):
????"""Get?weather?data?for?a?specific?city?using?the?OpenWeatherMap?API."""
????base_url?=?"http://api.openweathermap.org/data/2.5/weather"
????params?=?{
????????"q":?city,
????????"appid":?api_key,
????????"units":?"metric"
????}
????response?=?requests.get(base_url,?params=params)
????data?=?response.json()
????return?data

def?display_weather(data):
????"""Display?weather?information."""
????if?data["cod"]?!=?"404":
????????city?=?data["name"]
????????country?=?data["sys"]["country"]
????????temperature?=?data["main"]["temp"]
????????description?=?data["weather"][0]["description"]
????????humidity?=?data["main"]["humidity"]
????????wind_speed?=?data["wind"]["speed"]

????????print(f"Weather?in?{city},?{country}:")
????????print(f"Temperature:?{temperature}°C")
????????print(f"Description:?{description}")
????????print(f"Humidity:?{humidity}%")
????????print(f"Wind?Speed:?{wind_speed}?km/h")
????else:
????????print("City?not?found.?Please?try?again.")

def?main():
????#?API?key?from?OpenWeatherMap
????api_key?=?"YOUR_API_KEY"

????#?Get?the?city?name?from?the?user
????city?=?input("Enter?the?city?name:?")

????#?Get?weather?data?for?the?city
????weather_data?=?get_weather_data(api_key,?city)

????#?Display?weather?information
????display_weather(weather_data)

if?__name__?==?"__main__":
????main()

4. 音乐播放器

在Python中创建音乐播放器是探索图形用户界面(GUI)的绝佳方式,可以使用Tkinter库设计一个基本的音乐播放器,允许用户浏览音乐库、播放音乐、暂停、停止和调整音量。这个项目将帮助大家对面向事件编程和GUI开发有更深的理解。

import?tkinter?as?tk
import?os
from?pygame?import?mixer

class?MusicPlayer:
????def?__init__(self,?root):
????????self.root?=?root
????????self.root.title("Music?Player")
????????self.root.geometry("300x100")

????????#?Initialize?Pygame?mixer
????????mixer.init()

????????#?Create?a?variable?to?store?the?current?playing?status
????????self.playing?=?False

????????#?Create?a?variable?to?store?the?current?selected?song
????????self.current_song?=?None

????????#?Create?the?UI?elements
????????self.label?=?tk.Label(root,?text="Music?Player")
????????self.label.pack()

????????self.play_button?=?tk.Button(root,?text="Play",?command=self.play_music)
????????self.play_button.pack()

????????self.stop_button?=?tk.Button(root,?text="Stop",?command=self.stop_music)
????????self.stop_button.pack()

????????self.browse_button?=?tk.Button(root,?text="Browse",?command=self.browse_music)
????????self.browse_button.pack()

????def?play_music(self):
????????if?self.current_song:
????????????if?not?self.playing:
????????????????mixer.music.load(self.current_song)
????????????????mixer.music.play()
????????????????self.play_button.config(text="Pause")
????????????????self.playing?=?True
????????????else:
????????????????mixer.music.pause()
????????????????self.play_button.config(text="Play")
????????????????self.playing?=?False

????def?stop_music(self):
????????mixer.music.stop()
????????self.play_button.config(text="Play")
????????self.playing?=?False

????def?browse_music(self):
????????self.current_song?=?tk.filedialog.askopenfilename(initialdir=os.getcwd(),?title="Select?Song",
?????????????????????????????????????????????????????????filetypes=(("Audio?Files",?"*.mp3"),?("All?Files",?"*.*")))
????????self.label.config(text=os.path.basename(self.current_song))

if?__name__?==?'__main__':
????root?=?tk.Tk()
????music_player?=?MusicPlayer(root)
????root.mainloop()

5. 数独求解器

解决数独难题是测试问题解决能力的经典编程挑战,使用Python和回溯算法构建一个数独求解器,表示难题、实现求解器以及使用图形界面可视化解决方案。

def?is_valid(board,?row,?col,?num):
????#?Check?if?the?number?already?exists?in?the?row
????for?i?in?range(9):
????????if?board[row][i]?==?num:
????????????return?False

????#?Check?if?the?number?already?exists?in?the?column
????for?i?in?range(9):
????????if?board[i][col]?==?num:
????????????return?False

????#?Check?if?the?number?already?exists?in?the?3x3?grid
????start_row?=?(row?//?3)?*?3
????start_col?=?(col?//?3)?*?3
????for?i?in?range(3):
????????for?j?in?range(3):
????????????if?board[start_row?+?i][start_col?+?j]?==?num:
????????????????return?False

????return?True

def?solve_sudoku(board):
????for?row?in?range(9):
????????for?col?in?range(9):
????????????if?board[row][col]?==?0:
????????????????for?num?in?range(1,?10):
????????????????????if?is_valid(board,?row,?col,?num):
????????????????????????board[row][col]?=?num

????????????????????????if?solve_sudoku(board):
????????????????????????????return?True

????????????????????????board[row][col]?=?0

????????????????return?False

????return?True

def?print_board(board):
????for?row?in?range(9):
????????for?col?in?range(9):
????????????print(board[row][col],?end="?")
????????print()

#?Example?Sudoku?board?(0?represents?empty?cells)
board?=?[
????[5,?3,?0,?0,?7,?0,?0,?0,?0],
????[6,?0,?0,?1,?9,?5,?0,?0,?0],
????[0,?9,?8,?0,?0,?0,?0,?6,?0],
????[8,?0,?0,?0,?6,?0,?0,?0,?3],
????[4,?0,?0,?8,?0,?3,?0,?0,?1],
????[7,?0,?0,?0,?2,?0,?0,?0,?6],
????[0,?6,?0,?0,?0,?0,?2,?8,?0],
????[0,?0,?0,?4,?1,?9,?0,?0,?5],
????[0,?0,?0,?0,?8,?0,?0,?7,?9]
]

if?solve_sudoku(board):
????print("Sudoku?solved:")
????print_board(board)
else:
????print("No?solution?exists?for?the?given?Sudoku?board.")

6. 使用BeautifulSoup爬取网页

网页抓取涉及从网站中提取数据,这是各个领域有价值的技能,使用Python和BeautifulSoup库来爬取你选择的网站的数据,浏览HTML结构、提取特定信息并将其保存到文件或数据库。

import?requests
from?bs4?import?BeautifulSoup

#?Send?a?GET?request?to?the?website
url?=?'https://example.com'
response?=?requests.get(url)

#?Create?a?BeautifulSoup?object
soup?=?BeautifulSoup(response.text,?'html.parser')

#?Find?and?extract?specific?elements?from?the?webpage
title?=?soup.title.text
paragraphs?=?soup.find_all('p')

#?Print?the?extracted?data
print('Title:',?title)
print('Paragraphs:')
for?p?in?paragraphs:
????print(p.text)

7. 聊天机器人

构建聊天机器人是结合自然语言处理和机器学习的激动人心的项目。可以使用Python和NLTK或spaCy等库来创建一个可以理解用户查询并提供相关响应的聊天机器人,介绍文本预处理、意图识别和响应生成等技术。

import?random

#?List?of?sample?responses
responses?=?[
????"Hello!",
????"Hi?there!",
????"Greetings!",
????"Nice?to?meet?you!",
????"How?can?I?assist?you?",
????"I'm?here?to?help!",
????"How?are?you?today?",
]

def?get_random_response():
????"""Return?a?random?response?from?the?list?of?sample?responses."""
????return?random.choice(responses)

def?chat():
????"""Main?function?to?handle?the?chatbot?conversation."""
????print("Chatbot:?"?+?get_random_response())

????while?True:
????????user_input?=?input("User:?")
????????
????????#?Check?if?the?user?wants?to?end?the?conversation
????????if?user_input.lower()?==?"bye":
????????????print("Chatbot:?Goodbye!")
????????????break
????????
????????#?Generate?and?print?a?random?response
????????print("Chatbot:?"?+?get_random_response())

if?__name__?==?"__main__":
????print("Chatbot:?Hello!?How?can?I?assist?you?")
????chat()

8. 密码管理器:

密码管理器是一种用于安全存储和管理密码的有用工具,使用Python和密码学库开发一个密码管理器。程序将允许用户存储他们的密码,生成强密码,并对数据进行加密以确保安全性。

import?hashlib
import?getpass

passwords?=?{}

def?get_hashed_password(password):
????"""Generate?a?SHA-256?hashed?password."""
????sha256_hash?=?hashlib.sha256()
????sha256_hash.update(password.encode('utf-8'))
????return?sha256_hash.hexdigest()

def?create_password():
????"""Create?a?new?password?entry."""
????website?=?input("Enter?the?website:?")
????username?=?input("Enter?your?username:?")
????password?=?getpass.getpass("Enter?your?password:?")
????hashed_password?=?get_hashed_password(password)
????passwords[website]?=?(username,?hashed_password)
????print("Password?created?successfully.")

def?retrieve_password():
????"""Retrieve?a?password?from?the?password?manager."""
????website?=?input("Enter?the?website:?")
????if?website?in?passwords:
????????username,?hashed_password?=?passwords[website]
????????password?=?getpass.getpass("Enter?your?password:?")
????????if?hashed_password?==?get_hashed_password(password):
????????????print(f"Username:?{username}")
????????????print(f"Password:?{password}")
????????else:
????????????print("Incorrect?password.")
????else:
????????print("Website?not?found?in?the?password?manager.")

def?main():
????while?True:
????????print("1.?Create?a?new?password")
????????print("2.?Retrieve?a?password")
????????print("3.?Quit")
????????choice?=?input("Enter?your?choice?(1-3):?")

????????if?choice?==?"1":
????????????create_password()
????????elif?choice?==?"2":
????????????retrieve_password()
????????elif?choice?==?"3":
????????????break
????????else:
????????????print("Invalid?choice.?Please?try?again.")

if?__name__?==?"__main__":
????main()

通过使用Python进行项目开发是提升编程技能的有效方式,本文探索了8个不同领域的项目,涵盖了Web开发、数据分析、机器学习等方面。完成这些项目将获得实践经验,并对Python及其库有更深入的理解。?

文章来源:https://blog.csdn.net/csdn1561168266/article/details/135756539
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。