Giter Site home page Giter Site logo

crosswordpuzzle's Introduction

CrossWordPuzzle

一个简单的文章填词游戏,用Python编程实现。

目录

本游戏分基础版GUI版两个版本:

1. 基础版

1.1 项目环境

基础版使用命令行参数启动。此版本未使用任何第三方库,Python版本为3.8.17,可以使用如下命令创建相应的Python环境:

conda create -n <env_name> python=3.8

1.2 使用配置

在虚拟环境<env_name>中,可以使用如下的命令运行此程序:

python main_basic_version.py [-h] [--path PATH] [--article ARTICLE]

参数说明:

  -h, --help         #显示帮助信息
  --path PATH        #设定题库数据JSON文件的路径,默认为当前路径下的data.json文件
  --article ARTICLE  #设定选择的文章标题,默认为random,即从题库中任选一篇文章

1.3 游戏说明

程序基础版实现了基础功能,包括:

  • 根据命令行参数启动,命令行参数包括:指定题库数据文件路径、指定文章标题、显示帮助信息等;命令行参数的相关操作主要用到了argparse库;
  • 读取相应的题库并解析JSON文件;解析JSON文件主要用到json库;
  • 在命令行中接收用户输入并将其填写到文章中;文章填空处用特殊标志<\d>;使用re模块的sub函数进行替换;
  • 用户完成输入后,将替换后的文章打印到命令行;

程序基础版也实现了部分高级功能,包括:

  • 鲁棒性。使用try...except...进行错误检查,当出现如下错误时,程序给出相应的提示:
    • 题库JSON文件路径不正确;
    • JSON文件不能解析为字典列表;
    • JSON文件中的某个字典的某个key名称不正确;每个字典有且仅有3个key: title, article, hints
    • JSON文件中的某个字典的某个value的类型不正确;title, article, hints对应的值的类型须为str, str, list
    • 题库JSON文件中不存在给定的文章。

使用示例1

使用默认题库数据、随机选择一篇文章进行游戏:

python main_basic_version.py

使用示例2

使用自定义数据库path/to/file.json,选择文章sample1进行游戏:

python main_basic_version.py --path path/to/file.json --article sample1

2. GUI版

2.1 项目环境

GUI版使用streamlit库搭建GUI框架。streamlit版本为1.24.1。你可以使用如下命令安装:

pip install streamlit

为提高pip的安装速度,可参考tuna的pypi镜像站使用帮助进行配置。

TODO 在操作过程中遇到一个小问题:如果直接用conda安装,似乎在运行streamlit程序时,会抛出错误信息“streamlit.cli未找到”;但用pip安装则未出现此问题。有兴趣的读者可以探索。

streamlit库及其依赖,此程序未用到其他的第三方库。

2.2 使用配置

使用如下命令运行此程序:

streamlit run main_GUI_version.py

执行上述命令后,你会得到一个URL;在浏览器打开即可开始游戏!

2.3 游戏说明

程序GUI版实现了基础功能,包括:

  • 选择题库JSON文件与文章标题;用户可以选择使用默认的data/data.json文件,或者自行上传符合规范的utf-8编码的JSON文件。JSON文件的规范为:

    • 可解析为字典列表;
    • 每个字典有且仅有3个key: title, article, hints
    • title, article, hints对应的值的类型须为str, str, list

    通过checkbox选择使用默认题库还是自行上传题库,通过file_uploader上传JSON文件(用户只能上传JSON类型的文件),解析JSON文件后得到文章标题组成的列表,然后通过selectbox选择文章标题。

  • 根据读取的题库解析JSON文件;解析JSON文件主要用到json库;

  • 通过form(表单)配合一定数量的text_input(输入框)接收用户输入,并将其填写到文章中;文章填空处用特殊标志<\d>;使用re模块的sub函数进行替换;

  • 用户完成输入后,将替换后的文章显示到页面;

此版本也实现了如下拓展功能:

  • GUI界面。使用streamlit库完成了从命令行到GUI的转变。

    页面打开时,如下图所示:

根据提示,安装左侧边栏的步骤进行操作。如果自行上传文件,需上传符合规范的JSON文件,否则页面上会给出错误信息。例如,上传了非utf-8编码(你可以试试用Notepad++等工具将一个文件的编码改为ANSI)的JSON文件,会给出如下图所示的错误提示:

如果不勾选“自行上传”,则可以直接从第2步“选择Article”开始进行游戏,此时使用默认题库;若勾选“自行上传”,则上传JSON文件并解析无误后,系统根据解析得到的字典列表的title值组成文章列表,以供用户选择:

用户选择文章并根据提示完成输入后,点击左侧边栏的“查看”按钮,可以在页面上生成完成填空的文字,用户填空用红色标记,如下图所示:

  • 鲁棒性。除了基础版本的错误,还可以检测:
    • JSON文件非utf-8编码错误;通过UnicodeDecodeError
    • JSON文件格式不符合规范导致不能解析的错误;通过json.JSONDecodeError

3. JS版本

增加了Javascript版本,可以完成基本任务(用户需选择题库文件以及文章标题)。

此版本提供简朴而便捷的GUI界面。存在在线访问与离线访问两种方法:

  • 在线访问。访问此链接web-link-by-github-pages
  • 离线访问。下载目录CrosswordPuzzle_JavascriptVersion,双击其中index.html即可在本地浏览器体验~

NOTE

All the text files are encoded with utf-8, End-of-Line-Sequence is LF.
You can visit this link if you have access to scientific network.

Author: [email protected]
Date: 2023/7/20
Version: v1.0

crosswordpuzzle's People

Contributors

hayao-1111 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.