当前位置: 首页 > news >正文

Python打字练习

代码解析

导入模块和定义单词列表

import tkinter as tk
import randomsample_words = ["apple", "banana", "cherry", "date", "fig", "grape", "kiwi", "lemon", "mango", "orange", "papaya", "quince", "ugli", "vanilla", "yam"
]
  • 导入'tkinter'库用于创建 GUI
  • 导入'random'库用于随机选择单词 
  • 定义'sample_words'列表包含游戏中可能出现的单词

TypingGame 类的初始化

class TypingGame:def __init__(self, root):self.root = rootself.root.title("打字练习")  # 修改窗口标题self.canvas = tk.Canvas(self.root, width=800, height=600, bg="white")self.canvas.pack()self.user_input = tk.StringVar()self.words = []self.labels = []self.word_y_positions = []self.speed = 2  # 掉落速度self.game_over = False  # 游戏状态self.create_widgets()self.new_round()
  • 初始化游戏类,设置窗口标题和画布 
  • 创建'user_input'变量用于存储用户输入
  • 初始化'words'、'labels'和'word_y_positions'列表
  • 设置'speed'变量控制单词下落速度
  • 初始化'game_over'状态
  • 调用'create_widgets'方法创建控件,并开始新一轮游戏

创建控件

    def create_widgets(self):self.entry = tk.Entry(self.root, textvariable=self.user_input, width=50)self.entry.pack(pady=10)self.entry.bind("<KeyRelease>", self.check_input)self.result_label = tk.Label(self.root, text="", wraplength=400)self.result_label.pack(pady=10)self.new_round_button = tk.Button(self.root, text="New Round", command=self.new_round)self.new_round_button.pack(pady=10)# 将输入法锁定为英语self.root.bind('<FocusIn>', self.set_english_input)
  • 创建输入框、结果标签和新一轮按钮,并将它们放置在窗口中
  • 绑定'KeyRelease'事件到'check_input'方法,监听用户输入
  • 绑定'FocusIn'事件到'set_english_input'方法,以确保输入法锁定为英语

设置输入法为英语

    def set_english_input(self, event):self.root.tk.call('tk', 'scaling', 1.0)  # 假定的命令以确保输入法锁定为英语
  • 绑定窗口获取焦点时设置输入法为英语

新一轮游戏

    def new_round(self):num_words = random.randint(1, 5)  # 随机选择1到5个单词self.words = random.sample(sample_words, num_words)  # 选择不重复的单词self.user_input.set("")self.result_label.config(text="")self.word_y_positions = [0 for _ in self.words]self.game_over = Falsefor label in self.labels:self.canvas.delete(label)self.labels = []used_positions = []for word in self.words:while True:x_position = random.randint(50, 750 - len(word) * 15)  # 确保单词不会超出边界y_position = 0if not any(abs(x_position - pos[0]) < len(word) * 15 and abs(y_position - pos[1]) < 30 for pos in used_positions):used_positions.append((x_position, y_position))breaklabel = self.canvas.create_text(x_position, y_position, text=word, font=("Helvetica", 24), fill="black")self.labels.append(label)self.entry.config(state='normal')self.entry.focus()self.drop_words()
  • 随机选择1到5个不重复的单词
  • 清空输入框和结果标签,重置单词位置和游戏状态
  • 删除旧的标签并创建新的标签,确保单词不会重叠
  • 调用'drop_words'方法开始单词下落

单词下落

    def drop_words(self):if not self.game_over:for i, label in enumerate(self.labels):self.word_y_positions[i] += self.speedself.canvas.coords(label, self.canvas.coords(label)[0], self.word_y_positions[i])if self.word_y_positions[i] >= 600:self.result_label.config(text=f"Game Over! The word was: {self.words[i]}")self.game_over = Trueself.entry.config(state='disabled')returnself.root.after(50, self.drop_words)
  • 如果游戏未结束,所有单词按速度下落
  • 如果单词下落超过画布高度,显示游戏结束信息并禁用输入框
  • 使用'root.after'方法定时调用'drop_words'方法实现动画效果

检查用户输入

    def check_input(self, event):if self.game_over:returninput_text = self.user_input.get()for index, word in enumerate(self.words):if word.startswith(input_text):correct_text = ""for i, char in enumerate(input_text):if i < len(word) and char == word[i]:correct_text += charelse:breakremaining_text = word[len(correct_text):]self.canvas.itemconfig(self.labels[index], text=f"{correct_text}{remaining_text}")self.canvas.itemconfig(self.labels[index], fill="green" if correct_text else "black")else:self.canvas.itemconfig(self.labels[index], fill="black")if input_text == word:self.canvas.delete(self.labels[index])self.words.pop(index)self.labels.pop(index)self.word_y_positions.pop(index)self.user_input.set("")  # 清空输入框if not self.words:self.result_label.config(text="Correct! Starting new round...")self.new_round()return
  • 如果游戏结束,直接返回
  • 获取用户输入并遍历所有单词,检查输入是否与单词开头匹配
  • 将匹配部分的单词变为绿色
  • 如果用户输入完整单词,删除该单词并清空输入框
  • 如果所有单词都被正确输入,开始新一轮游戏

主程序

if __name__ == "__main__":root = tk.Tk()game = TypingGame(root)root.mainloop()
  • 创建主窗口并实例化'TypingGame'
  • 进入'tkinter'主循环,开始游戏

全部代码

import tkinter as tk
import random# 一些示例单词供用户练习
sample_words = ["apple", "banana", "cherry", "date", "fig", "grape", "kiwi", "lemon", "mango", "orange", "papaya", "quince", "ugli", "vanilla", "yam"
]class TypingGame:def __init__(self, root):self.root = rootself.root.title("打字练习")  # 修改窗口标题self.canvas = tk.Canvas(self.root, width=800, height=600, bg="white")self.canvas.pack()self.user_input = tk.StringVar()self.words = []self.labels = []self.word_y_positions = []self.speed = 2  # 掉落速度self.game_over = False  # 游戏状态self.create_widgets()self.new_round()def create_widgets(self):self.entry = tk.Entry(self.root, textvariable=self.user_input, width=50)self.entry.pack(pady=10)self.entry.bind("<KeyRelease>", self.check_input)self.result_label = tk.Label(self.root, text="", wraplength=400)self.result_label.pack(pady=10)self.new_round_button = tk.Button(self.root, text="New Round", command=self.new_round)self.new_round_button.pack(pady=10)# 将输入法锁定为英语self.root.bind('<FocusIn>', self.set_english_input)def set_english_input(self, event):self.root.tk.call('tk', 'scaling', 1.0)  # 假定的命令以确保输入法锁定为英语,如果需要可以进一步研究具体命令def new_round(self):num_words = random.randint(1, 5)  # 随机选择1到5个单词self.words = random.sample(sample_words, num_words)  # 选择不重复的单词self.user_input.set("")self.result_label.config(text="")self.word_y_positions = [0 for _ in self.words]self.game_over = Falsefor label in self.labels:self.canvas.delete(label)self.labels = []used_positions = []for word in self.words:while True:x_position = random.randint(50, 750 - len(word) * 15)  # 确保单词不会超出边界y_position = 0if not any(abs(x_position - pos[0]) < len(word) * 15 and abs(y_position - pos[1]) < 30 for pos in used_positions):used_positions.append((x_position, y_position))breaklabel = self.canvas.create_text(x_position, y_position, text=word, font=("Helvetica", 24), fill="black")self.labels.append(label)self.entry.config(state='normal')self.entry.focus()self.drop_words()def drop_words(self):if not self.game_over:for i, label in enumerate(self.labels):self.word_y_positions[i] += self.speedself.canvas.coords(label, self.canvas.coords(label)[0], self.word_y_positions[i])if self.word_y_positions[i] >= 600:self.result_label.config(text=f"Game Over! The word was: {self.words[i]}")self.game_over = Trueself.entry.config(state='disabled')returnself.root.after(50, self.drop_words)def check_input(self, event):if self.game_over:returninput_text = self.user_input.get()for index, word in enumerate(self.words):if word.startswith(input_text):correct_text = ""for i, char in enumerate(input_text):if i < len(word) and char == word[i]:correct_text += charelse:breakremaining_text = word[len(correct_text):]self.canvas.itemconfig(self.labels[index], text=f"{correct_text}{remaining_text}")self.canvas.itemconfig(self.labels[index], fill="green" if correct_text else "black")else:self.canvas.itemconfig(self.labels[index], fill="black")if input_text == word:self.canvas.delete(self.labels[index])self.words.pop(index)self.labels.pop(index)self.word_y_positions.pop(index)self.user_input.set("")  # 清空输入框if not self.words:self.result_label.config(text="Correct! Starting new round...")self.new_round()returnif __name__ == "__main__":root = tk.Tk()game = TypingGame(root)root.mainloop()

相关文章:

Python打字练习

代码解析 导入模块和定义单词列表 import tkinter as tk import randomsample_words ["apple", "banana", "cherry", "date", "fig", "grape", "kiwi", "lemon", "mango", &quo…...

Pytorch添加自定义算子之(10)-mmdeploy编译流程

整体参考 一、mmcv的编译安装 见上一篇 opencv的安装 $env:OpenCV_DIR = "D:\git_clone\opencv\build" # 我这里下载解压之后的地址 $env:path = "$env:OpenCV_DIR\x64\vc15\bin;" + $env:path $env:path = "D:\git_clone\opencv\build\OpenCVConf…...

大数据面试题之Flink(4)

Flink广播流 Flink实时topN 在实习中一般都怎么用Flink Savepoint知道是什么吗 为什么用Flink不用别的微批考虑过吗 解释一下啥叫背压 Flink分布式快照 Flink SQL解析过程 Flink on YARN模式 Flink如何保证数据不丢失 Flink广播流 Apache Flink 中的广播流&…...

C#实战|账号管理系统:通用登录窗体的实现。

哈喽,你好啊,我是雷工! 本节记录登录窗体的实现方法,比较有通用性,所有的项目登录窗体实现基本都是这个实现思路。 一通百通,以下为学习笔记。 01 登录窗体的逻辑 用户在登录窗输入账号和密码,如果输入账号和密码信息正确,点击【登录】按钮,则跳转显示主窗体,同时在固…...

php简单商城小程序系统源码

&#x1f6cd;️【简单商城小程序】&#x1f6cd;️ &#x1f680;一键开启&#xff0c;商城搭建新体验&#x1f680; 你还在为繁琐的商城搭建流程头疼吗&#xff1f;现在&#xff0c;有了简单商城系统小程序&#xff0c;一切变得轻松又快捷&#xff01;无需复杂的编程知识&a…...

NativeMemoryTracking查看java内存信息

默认该功能是禁用的&#xff0c;因为会损失5-10%的性能 开启命令 -XX:NativeMemoryTrackingdetail 打印命令 jcmd 45064 VM.native_memory summary scaleMB > NativeMemoryTracking.log 具体的日志信息 ➜ ~ ➜ ~ jcmd 45064 VM.native_memory summary scaleMB 45064…...

建智慧医院核心:智能导航系统的功能全析与实现效益

在数字化转型的浪潮中&#xff0c;智慧医院的建设是医疗行业数字化转型的关键步骤。随着医院规模的不断扩大和医疗设施的日益复杂&#xff0c;传统的静态不连续的导航方式已无法满足患者的需求。院内智能导航系统&#xff0c;作为医疗数字化转型的关键组成部分&#xff0c;正逐…...

数据库基础之:函数依赖

函数依赖在数据库设计中是非常关键的概念&#xff0c;用于描述关系数据库中数据项之间的相关性。下面我将通过几个例子来说明函数依赖的几种类型&#xff1a;完全函数依赖、部分函数依赖和传递函数依赖。 完全函数依赖 考虑一个关系模式 Student&#xff0c;包含属性 Student…...

Newport太阳光模拟器MSOL-UV-X使用说明手侧

Newport太阳光模拟器MSOL-UV-X使用说明手侧...

pandas读取CSV格式文件生成数据发生器iteration

背景 数据集标签为csv文件格式&#xff0c;有三个字段column_hander [‘id’, ‘boneage’, ‘male’]&#xff0c;需要自己定义数据集。文件较大&#xff0c;做一个数据发生器迭代更新数据集。 实现模板 在Pandas中&#xff0c;可以使用pandas.read_csv函数读取CSV文件&…...

SpringBoot 启动流程四

SpringBoot启动流程四 前面这个创建对象是初始化SpringApplication对象 是加载了SpringBoot程序的所有相关配置 我们接下来要将这个run方法 run过程是一个运行 初始化容器 我们看我们的运行结果是得到一个ConfigurableApplicationContext对象 package com.bigdata1421.star…...

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二&#xff1a;子类化并自绘窗口背景 四、初步分析桌面管理层…...

JavaEE——计算机工作原理

冯诺依曼体系&#xff08;VonNeumannArchitecture&#xff09; 现代计算机&#xff0c;大多遵守冯诺依曼体系结构 CPU中央处理器&#xff1a;进行算术运算与逻辑判断 存储器&#xff1a;分为外存和内存&#xff0c;用于存储数据&#xff08;使用二进制存储&#xff09; 输入…...

并发、多线程和HTTP连接之间有什么关系?

一、并发的概念 并发是系统同时处理多个任务或事件的能力。在计算中&#xff0c;这意味着系统能够在同一时间段内处理多个任务&#xff0c;而不是严格按照顺序一个接一个地执行它们。并发提高了系统的效率和资源利用率&#xff0c;从而更好地满足用户的需求。在现代应用程序中&…...

展开说说:Android服务之startService源码解析

通过上一篇文章我们掌握了Android四种的基本使用&#xff0c;本篇从源码层面总结一下startService的执行过程。 本文依然按着是什么&#xff1f;有什么&#xff1f;怎么用&#xff1f;啥原理&#xff1f;的步骤来分析。 1、是什么 上一篇总结了“Service是Android系统中的四…...

Java + MySQL 实现存储完整 Json

Java MySQL 实现存储完整 Json 一、应用场景二、数据库配置三、后端代码配置1、maven 依赖2、实体类3、Service 实现类4、xml 文件 四、测试1、新增接口2、查询接口3、数据表内容 一、应用场景 将前端传过来的 Json 完整存储到 MySQL 中&#xff0c;涉及技术栈为 Java、MyBat…...

解决刚申请下来的AWS EC2,无法用finalshell连接的问题

在AWS的命令页面创建一个root用户 切换到root 模式,输入密码 su root 不知道密码的可以使用一下命令来设置root用户的密码&#xff1a; su passwd root 再切换到root用户 su 修改配置文件 输入 vim /etc/ssh/sshd_config进入文件&#xff0c;键入’i’ &#xff0c;进行…...

如何在PD虚拟机中开启系统的嵌套虚拟化功能?pd虚拟机怎么用 Parallels Desktop 19 for Mac

PD虚拟机是一款可以在Mac电脑中运行Windows系统的应用软件。使用 Parallels Desktop for Mac 体验 macOS 和 Windows 的最优性能&#xff0c;解锁强大性能和无缝交互。 在ParallelsDesktop&#xff08;PD虚拟机&#xff09;中如何开启系统的嵌套虚拟化功能&#xff1f;下面我们…...

vue中实现button按钮的重复点击指令

// 注册一个全局自定义指令 v-debounce Vue.directive(debounce, {// 当被绑定的元素插入到 DOM 中时...inserted: function (el, binding) {let timer;el.addEventListener(click, () > {clearTimeout(timer);timer setTimeout(() > {binding.value(); // 调用传给指令…...

智能与伦理:Kimi与学术道德的和谐共舞

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 Kimi&#xff0c;由月之暗面科技有限公司开发的智能助手&#xff0c;擅长中英文对话&#xff0c;能处理多种文档和网页内容。在论文写作中&#xff0c;Kimi可提供资料查询、信息整理、语…...

SmolVLA部署案例:树莓派5+USB GPU加速器运行SmolVLA轻量版可行性探索

SmolVLA部署案例&#xff1a;树莓派5USB GPU加速器运行SmolVLA轻量版可行性探索 1. 引言 你有没有想过&#xff0c;让一个巴掌大的树莓派也能跑起来一个能“看懂”世界、听懂指令、并控制机器人动作的AI模型&#xff1f;这听起来像是科幻电影里的场景&#xff0c;但今天我们要…...

CVAT:让计算机视觉标注效率提升80%的开源数据引擎

CVAT&#xff1a;让计算机视觉标注效率提升80%的开源数据引擎 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/…...

Qwen3字幕生成工具实战:快速处理会议录音,输出带时间戳字幕

Qwen3字幕生成工具实战&#xff1a;快速处理会议录音&#xff0c;输出带时间戳字幕 1. 会议录音转字幕的痛点与解决方案 处理会议录音是许多职场人士的日常任务。传统方法需要先听录音&#xff0c;再手动记录内容&#xff0c;最后还要逐句对齐时间轴&#xff0c;整个过程耗时…...

无线音频桥接实战指南:让传统音响实现跨设备兼容的完整方案

无线音频桥接实战指南&#xff1a;让传统音响实现跨设备兼容的完整方案 【免费下载链接】AirConnect Use AirPlay to stream to UPnP/Sonos & Chromecast devices 项目地址: https://gitcode.com/gh_mirrors/ai/AirConnect &#x1f3b6; 从"音响孤岛"到&…...

Anything to RealCharacters 2.5D转真人引擎效果可视化:预处理前后对比与输出质量评估

Anything to RealCharacters 2.5D转真人引擎效果可视化&#xff1a;预处理前后对比与输出质量评估 你是否曾想过&#xff0c;将心爱的动漫角色、游戏立绘或者卡通头像&#xff0c;一键变成一张以假乱真的真人照片&#xff1f;这听起来像是魔法&#xff0c;但现在&#xff0c;借…...

5分钟上手:在浏览器中创造惊艳的流体艺术特效

5分钟上手&#xff1a;在浏览器中创造惊艳的流体艺术特效 【免费下载链接】WebGL-Fluid-Simulation Play with fluids in your browser (works even on mobile) 项目地址: https://gitcode.com/gh_mirrors/web/WebGL-Fluid-Simulation 想要在浏览器中体验令人惊叹的流体…...

你还在用StreamingResponse硬扛LLM流式?FastAPI 2.0全新AsyncIteratorResponse实践已落地金融级AI客服(限前500名获取迁移checklist)

第一章&#xff1a;FastAPI 2.0异步流式响应的核心演进与金融级落地价值FastAPI 2.0 将 StreamingResponse 的底层调度机制从 ASGI 的同步迭代器封装&#xff0c;全面升级为原生协程驱动的异步生成器&#xff08;async def ... yield&#xff09;&#xff0c;彻底消除事件循环阻…...

TranslucentTB终极指南:如何彻底改造Windows任务栏的视觉体验

TranslucentTB终极指南&#xff1a;如何彻底改造Windows任务栏的视觉体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Wi…...

EcomGPT-7B系统部署排坑指南:常见错误403 Forbidden等分析与解决

EcomGPT-7B系统部署排坑指南&#xff1a;常见错误403 Forbidden等分析与解决 1. 引言 最近在折腾EcomGPT-7B这个模型&#xff0c;发现不少朋友在部署和调用的时候会遇到各种“坑”。我自己也踩过不少&#xff0c;特别是那个让人头疼的“403 Forbidden”错误&#xff0c;有时候…...

PasteMD场景应用:微信聊天记录自动整理为会议纪要

PasteMD场景应用&#xff1a;微信聊天记录自动整理为会议纪要 1. 为什么你的会议纪要总是一团糟&#xff1f; 想象一下这个场景&#xff1a; 下午两点&#xff0c;项目组紧急拉了个微信群聊&#xff0c;大家七嘴八舌讨论了半小时&#xff0c;敲定了五个关键事项和三个责任人。…...