首页 > 编程语言 >精选了10个Python实战项目(附源码),拿走即用!

精选了10个Python实战项目(附源码),拿走即用!

时间:2024-06-17 14:30:06浏览次数:16  
标签:10 draw roo Python 30 源码 message def left

 猜字游戏

在这个游戏中,你必须一个字母一个字母的猜出秘密单词。

如果你猜错了一个字母,你将丢掉一条命。

正如游戏名那样,你需要仔细选择字母,因为你的生命数量非常有限。

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)


draw(60)

roo.right(90)
roo.speed(2000)


# recursion
def draw(l):
    if (l < 10):
        return
    else:
        roo.pensize(2)
        roo.pencolor("yellow")  # yellow
        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)


draw(60)

roo.left(270)
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(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):
        return
    else:
        roo.pensize(2)
        roo.pencolor('#FFF8DC')  # white
        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)


draw(60)
wn.exitonclick()

绘制时间较长,结果如下,挺好看的。

最后,如果你对Python感兴趣,想要学习python,希望可以帮到你,一起加油!以上是给大家分享的Python全套学习资料,都是我自己学习时整理的:

全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

**学习资源已打包,需要的小伙伴可以戳这里:【学习资料!】 

标签:10,draw,roo,Python,30,源码,message,def,left
From: https://blog.csdn.net/Python_trys/article/details/139742429

相关文章

  • 小白的Python+Anaconda+vscode安装教程(win11系统手把手教学)
    python下载安装python下载安装过程下载地址:https://www.python.org/![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/33bd022a0d104a22b9e8caf7abb4e294.png我这里选择了3.7.9版本选中刚才下载的.exe文件,右键-打卡上一个页面点击customizinstallation后......
  • P10602 [CEOI 2009] Harbingers 题解
    小清新数据结构优化dp。思路考虑基本的dp式。\[\begin{aligned}f_{x}&=w_{x}+\max_{i是x的祖先}v_{x}\times(dep_{x}-dep_{i})+f_i\\&=w_{x}+v_{x}\timesdep_{x}+\max_{i是x的祖先}-dep_{i}\timesv_{x}+f_i\end{aligned}\]发现\(-dep_{i}\timesv_{x}+f_i\)是......
  • Python遥感影像叠加分析:基于一景数据提取另一数据
      本文介绍基于Python中GDAL模块,实现基于一景栅格影像,对另一景栅格影像的像元数值加以叠加提取的方法。  本文期望实现的需求为:现有一景表示6种不同植被类型的.tif格式栅格数据,以及另一景与前述栅格数据同区域的、表示植被参数的.tif格式栅格数据;我们希望基于前者中的植被类......
  • MySQL 5.7 安装教程(Win 10)
    转自:https://www.cnblogs.com/swjian/p/11907600.htmlMySQL5.7下载官网下载(不推荐使用):https://dev.mysql.com/downloads/mysql/清华镜像站下载(推荐):https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.27-winx64.zipMySQL5.7解压将下载完的zi......
  • 基于Java+Vue的采购管理系统:实现采购业务数字化(全套源码)
    前言:采购管理系统是一个综合性的管理平台,旨在提高采购过程的效率、透明度,并优化供应商管理。以下是对各个模块的详细解释:一、供应商准入供应商注册:供应商通过在线平台进行注册,填写基本信息和资质文件。资质审核:系统对供应商提交的资质文件进行自动或人工审核,确保供应商符......
  • SpringBoot开发Activiti工作流实现审批流程(全套源码)
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工......
  • 盘点一个Python自动化办公的问题
    大家好,我是Python进阶者。一、前言前几天在Python铂金交流群【逆光】问了一个Python自动化办公的问题,问题如下:问题我现在有两个表a、b,for循环a、b,如果a的条件满足b,则把b的值赋给a,目前a有7万条数据,b有300条。我写的代码20分钟都没跑完。这是代码,请问改怎么解决?二、实现过......
  • python3.10.10安装
    链接:https://www.python.org/选择一个盘建个python文件夹(任意盘,以E盘 python310为例,文件名任意字母数字下划线);安装包可分享路径不要太深E:\python310卸载uninstall 卸载之后可以把之前存储位置的文件夹(E:\python310)删除......
  • Python项目实战:制作一个翻译软件
    大家好,我是你们的老朋友南枫,今天咱们来学一个好玩、有趣、又实用的项目——制作一个翻译软件。我们参考的是有道翻译,首先还是老规矩,咱们先导入所需要使用到的模块:导入进来之后,我们需要把该要的参数,全都给copy下来(有请求头、cookie、防盗链等):既然我们是要做一个翻译的软......
  • [YOLOv10涨点改进:注意力魔改 | 轻量级的 Mixed Local Channel Attention (MLCA),加强通
    本文属于原创独家改进:一种轻量级的MixedLocalChannelAttention(MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果1.YOLOv10介绍论文:[https://arxiv.org/pdf/2405.14458]代码:https://gitcode.com/THU-MIG/yolov10?utm_source=c......