python 命令行界面的用户交互

背景

说一千,道一万,程序是为用户服务的,所以在程序运行过程,与用户交互以获取用户的信息输入和决策确认,是无法避免的编程需要考虑和解决的需求。

一个简单的demo

如下的程序中,程序需要生成一个新的 id_rsa.pub 文件,但是不巧,程序的工作目录下已经存在了一个 id_rsa.pub 文件。我们需要告知用户并获得用户的决策指示,以便可以做出用户希望的行为。

下面的代码使用 input 向用户发起交互:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion


if __name__ == "__main__":
    画板: 打印模板 = 打印模板(False)
    画板.执行位置(__file__)

    交互端: 交互接口类 = 交互接口类()

    画板.消息('程序已经开始运行...')
    画板.消息('生成新的 id_rsa.pub 文档...')

    用户选择 = input('此操作将会删除原有文本,请问是否继续(y:继续; n:返回): ')

    if 用户选择:
        if 用户选择 in 'yY':
            画板.消息(绿字('您选择了继续,感谢信任...'))
        elif 用户选择 in 'nN':
            画板.消息(红字('您选择了返回,您是一个谨慎的人'))
        else:
            画板.提示错误('您输入了非期望的指示')
    else:
        画板.提示错误('您没有输入任何值')

👆上面的代码中,我们提示用户输入决策,并对用户输入的决策进行判断和反馈:

  • 当用户输入 y or Y 时,程序反馈用户,感谢信息
  • 当用户输入 n or N 时,程序反馈用户,并中断覆盖文档的损伤
  • 当用户没有输入时,程序反馈用户没有输入任何信息
  • 当用户输入的值不在 y Y n N 范围内时,提醒用户输入了非预期的值

20231105200611

优化交互

命令行是一个主要以文本方程呈现信息的界面,这种界面下信息密度高,用户操作的误操作率也比较高,也就是说,我们需要容许用户错误和非法的输入,并提供补救的机会。

以下代码进行了优化,为用户提供了补救的机会:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion


if __name__ == "__main__":
    画板: 打印模板 = 打印模板(False)
    画板.执行位置(__file__)

    交互端: 交互接口类 = 交互接口类()

    画板.消息('程序已经开始运行...')
    画板.消息('生成新的 id_rsa.pub 文档...')

    确认覆盖: bool = False
    while True:
        用户选择 = input('此操作将会删除原有文本,请问是否继续(y:继续; n:返回): ')
        if 用户选择:
            if 用户选择 in 'yY':
                画板.消息(绿字('您选择了继续,感谢信任...'))
                确认覆盖 = True
                break
            elif 用户选择 in 'nN':
                画板.消息(红字('您选择了返回,您是一个谨慎的人'))
                确认覆盖 = False
                break
            else:
                画板.提示错误('您输入了非期望的指示')
        else:
            画板.提示错误('您没有输入任何值')

    if 确认覆盖:
        pass
    else:
        pass

👆以上代码中,我们将用户输入的input逻辑和判断逻辑放入一个 while 循环中,并在用户输入非法时,循环提示用户输入,直到用户输入了预期的信息。效果如下:

20231105201538

通过使用 while True 循环,我们为用户提供了补救的机会,提高了交互的使用体验和健壮性。

逻辑封装

以上所设计的用户交互逻辑,在 DebugInfo 模块中已经进行了封装,可以通过 交互接口类 使用封装好的功能。如下是使用 DebugInfo.交互接口类 实现的用户交互逻辑的代码:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion


if __name__ == "__main__":
    画板: 打印模板 = 打印模板(False)
    画板.执行位置(__file__)

    交互端: 交互接口类 = 交互接口类()

    画板.消息('程序已经开始运行...')
    画板.消息('生成新的 id_rsa.pub 文档...')

    # 要求用户确认是否继续
    用户选择 = 交互端.发起文本交互(输入提示='此操作将会删除原有文本,请问是否继续(y:继续; n:返回)',限定范围='yYnN',画板=画板.副本)

    if 用户选择 in 'yY':
        画板.消息(绿字('您选择了继续,感谢信任...'))
    elif 用户选择 in 'nN':
        画板.消息(红字('您选择了返回,您是一个谨慎的人'))

👆以上代码中,我们通过使用 用户选择 = 交互端.发起文本交互(输入提示=‘此操作将会删除原有文本,请问是否继续(y:继续; n:返回)’,限定范围=‘yYnN’,画板=画板.副本) 发起与用户的交互,并指定了用户输入反馈的范围是 ‘yYnN’,然后我们只需要等待用户交互完成后确认用户的决策就好了,下面是运行的效果:

20231105201936

👆上面的运行效果中,我们发现当用户输入非预期的值时,程序还善意的提醒了用户需要输入的字符范围,避免了用户手足无措的尴尬。

小结

以上就是今天分享的 DebugInfo 模块提供的 交互接口类 的用户交互功能了。欢迎大家体验并提出建议。
288)]

👆上面的运行效果中,我们发现当用户输入非预期的值时,程序还善意的提醒了用户需要输入的字符范围,避免了用户手足无措的尴尬。

小结

以上就是今天分享的 DebugInfo 模块提供的 交互接口类 的用户交互功能了。欢迎大家体验并提出建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/116985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习第32天:Linux INPUT 子系统实验(一):接纳

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 题目中用了“接纳”俩字。其实学习就是一个接纳的过程。接纳新的知识,从而转化为自己知识宝库的一部分。那今天学习的input子系统和今天的主题接纳有…

基于单片机设计的自动门控制系统

一、项目介绍 随着科技的不断发展,自动门成为公共场所、商业建筑和住宅社区等地的常见设施。自动门的出现使得进出门的操作更加便捷,提高了人们的生活质量和工作效率。为了实现自动门的开关控制,本项目基于单片机设计了一套自动门控制系统。…

分布式服务框架设计

目录 服务框架的设计 服务框架的功能 服务框架的性能指标 服务治理需要哪些功能 服务框架的设计 尽管不同的分布式服务框架实现细节存在差异,但是核心功能差异不大,下面的架构图描绘了一个分布式服务框架的整体逻辑架构 总共分为 3 层:1…

GNU ld链接器 lang_process()(二)

一、ldemul_create_output_section_statements() 位于lang_process()中11行 。 该函数用于创建与目标有关的输出段的语句。这些语句将用于描述输出段的属性和分配。 void ldemul_create_output_section_statements (void) {if (ld_emulation->create_output_section_sta…

MySQL数据库之表的增删查改

目录 表的操作1.创建表创建表案例 2.查看表结构3.修改表4.删除表 表的操作 1.创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明: field 表示列…

C# 基类中的虚函数调用基类的虚函数执行的是派生类实现的对应函数吗

答案 : 是的。 比如基类Base中有两个virtual 函数A和B,然后派生类为Derive,override了函数A记为A,override了函数B记为B,且B之中会执行base.B的逻辑; 在Base中,B调用了A的逻辑,那么外…

C++ 实现红黑树

红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因…

通过环境变量实现多个JDK切换

前文: 由于jdk版本需要升级为jdk17,因为jdk8比较常用且稳定,本人又不想卸载掉安装的jdk8,在经过查找资料后找到了可以通过修改环境变量在本地任意切换jdk版本 环境变量配置 网上教程一堆,直接跳过了,这里主要说明怎么通过配置环境变量切换 电脑->属性->高级系统设置-&g…

centos7中多版本go安装

安装go的方式 官网下载tar.gz包安装 # 1.下载tar包 wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz # 2.解压tar包到指定路径 tar -xvf go1.18.1.linux-amd64.tar.gz -C /usr/local/go1.18 # 3.配置环境变量,打开 /etc/profile 文件添加以下文件每次开机时…

【MATLAB源码-第65期】基于matlab的OFDM/OTFS通信系统性能对比,输处误码率曲线;对比是否采用LDPC编码。

操作环境: MATLAB 2022a 1、算法描述 OTFS(Orthogonal Time Frequency Space)是一种无线通信调制技术,它利用时间、频率和空间的正交性来传输数据,目的是提高无线通信系统的性能,尤其是在多径和高移动性环…

selenium自动化测试入门 —— 定位frame和iframe中的元素对象

< frame> <iframe> 标签&#xff0c;浏览器会在标签中打开一个特定的页面窗口&#xff08;框架&#xff09;&#xff0c;它在本窗口中嵌套进入一个网页&#xff0c;当用selenium定位页面元素的时候会遇到定位不到frame框架内的元素的问题。 定位frame中的元素前我…

node插件express(路由)的插件使用(二)——body-parser和ejs插件的基本使用

文章目录 前言一、express使用中间件body-parser获取请全体的数据1. 代码2. 效果 二、express使用ejs&#xff08;了解即可&#xff09;1.安装2.作用3.基本使用&#xff08;1&#xff09;代码&#xff08;2&#xff09;代码分析和效果 4.列表渲染&#xff08;1&#xff09;代码…

同步网盘与云盘:哪个更好用?

同步网盘、同步云盘现在是热门的文件管理工具&#xff0c;在回答“同步网盘云盘哪个好用”这个问题之前&#xff0c;我们需要知道什么样的同步网盘、同步云盘算好用&#xff1f; 什么样的同步网盘云盘好用&#xff1f; 1、存储空间大 对于文件管理工具而言&#xff0c;存储空…

从零开始学习PX4源码0(固件下载及编译)

目录 文章目录 目录摘要1.重点学习网址2.固件下载1.下载最新版本固件2.下载之前版本固件 摘要 本节主要记录从零开始学习PX4源码1(固件下载)的过程&#xff0c;欢迎批评指正&#xff01;&#xff01;&#xff01; 下载固件主要分为两个版本&#xff0c;之前稳定版本和最新官网…

3、Sentinel 动态限流规则

Sentinel 的理念是开发者只需要关注资源的定义&#xff0c;当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则&#xff1a; • 通过 API 直接修改 (loadRules) • 通过 DataSource 适配不同数据源修改 通过 API 修改比较直观&#xff0c;可以通…

C#中LINQtoSQL只能在.NetFramework下使用,不能在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点&#xff0c;因为我百般努力在.net7.0下无法实现LINQtoSQL的…

如何将 XxlJob 集成达梦数据库

1. 前言 在某些情况下&#xff0c;你的项目可能会面临数据库选择的特殊要求&#xff0c;随着国产化的不断推进&#xff0c;达梦数据库是一个常见的选择。本篇博客将教你如何解决 XxlJob 与达梦数据库之间的 SQL 兼容性问题&#xff0c;以便你的任务调度系统能够在这个数据库中…

Idea去掉显示的测试覆盖率

一.启东时 误点击了 快捷键调出 【Ctrl 】【Alt】【F6】

npm ERR! code ELIFECYCLE

问题&#xff1a; 一个老项目&#xff0c;现在想运行下&#xff0c;打不开了 npm install 也出错 尝试1 、使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install 还是不行 尝试2、 package.json 文件&#xff0c;去掉 那个插件 chorm…

Unity中Shader的GI的直接光实现

文章目录 前言一、在上一篇文章中&#xff0c;得到GI相关数据后&#xff0c;需要对其进行Lambert光照模型计算二、在准备好上面步骤后&#xff0c;我们需要准备缺少的数据1、准备上图中的 s.Normal2、准备上图中的 s.Albedo 前言 Unity中Shader的GI的直接光实现&#xff0c;基…