python 命令行界面的用户交互

背景

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

一个简单的demo

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

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

# -*- coding:UTF-8 -*-# region 引入必要依赖
from DebugInfo.DebugInfo import *# endregionif __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 *# endregionif __name__ == "__main__":画板: 打印模板 = 打印模板(False)画板.执行位置(__file__)交互端: 交互接口类 = 交互接口类()画板.消息('程序已经开始运行...')画板.消息('生成新的 id_rsa.pub 文档...')确认覆盖: bool = Falsewhile True:用户选择 = input('此操作将会删除原有文本,请问是否继续(y:继续; n:返回): ')if 用户选择:if 用户选择 in 'yY':画板.消息(绿字('您选择了继续,感谢信任...'))确认覆盖 = Truebreakelif 用户选择 in 'nN':画板.消息(红字('您选择了返回,您是一个谨慎的人'))确认覆盖 = Falsebreakelse:画板.提示错误('您输入了非期望的指示')else:画板.提示错误('您没有输入任何值')if 确认覆盖:passelse:pass

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

20231105201538

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

逻辑封装

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

# -*- coding:UTF-8 -*-# region 引入必要依赖
from DebugInfo.DebugInfo import *# endregionif __name__ == "__main__":画板: 打印模板 = 打印模板(False)画板.执行位置(__file__)交互端: 交互接口类 = 交互接口类()画板.消息('程序已经开始运行...')画板.消息('生成新的 id_rsa.pub 文档...')# 要求用户确认是否继续用户选择 = 交互端.发起文本交互(输入提示='此操作将会删除原有文本,请问是否继续(y:继续; n:返回)',限定范围='yYnN',画板=画板.副本)if 用户选择 in 'yY':画板.消息(绿字('您选择了继续,感谢信任...'))elif 用户选择 in 'nN':画板.消息(红字('您选择了返回,您是一个谨慎的人'))

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

20231105201936

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

小结

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

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

小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】Apache_HTTPD_多后缀解析漏洞

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞复现1、基础环境2、漏洞验证 1.3、深度利用GetShell 1.4、修复建议 1.1、漏洞描述 Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执…

Windows ObjectType Hook 之 OpenProcedure

1、背景 Object Type Hook 是基于 Object Type的一种深入的 Hook,比起常用的 SSDT Hook 更为深入。 有关 Object Type 的分析见文章 《Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析》。 这里进行的 Hook 为 其中之一的 OpenProcedure。文章分两…

LangChain+LLM实战---ChatGPT的即时插件套件制作

英文原文:Instant Plugins for ChatGPT: Introducing the Wolfram ChatGPT Plugin Kit 在一分钟内构建一个新插件 几周前,我们与OpenAI合作发布了Wolfram插件,使ChatGPT可以使用Wolfram语言和Wolfram|Alpha作为工具,在ChatGPT内部…

插值表达式 {{}}

前言 持续学习总结输出中,今天分享的是插值表达式 {{}} Vue插值表达式是一种Vue的模板语法,我们可以在模板中动态地用插值表达式渲染出Vue提供的数据绑定到视图中。插值表达式使用双大括号{{ }}将表达式包裹起来。 1.作用: 利用表达式进行…

Python基础入门例程43-NP43 判断布尔值(条件语句)

最近的博文: Python基础入门例程42-NP42 公式计算器(运算符)-CSDN博客 Python基础入门例程41-NP41 二进制位运算(运算符)-CSDN博客 Python基础入门例程40-NP40 俱乐部的成员(运算符)-CSDN博客…

SurfaceFlinger的硬件Vsync深入分析-千里马android framework车机手机系统开发

背景: 学过或者你看过surfaceflinger相关文章同学都知道,vsync其实都是由surfaceflinger软件层面进行模拟的,但是软件模拟有可能会有误差或偏差,这个时候就需要有个硬件vsync帮忙校准。 故才会在surfaceflinger的systrace出现如下…

python图像处理 ——几种图像增强技术

图像处理 ——几种图像增强技术 前言一、几种图像增强技术1.直方图均衡化2.直方图适应均衡化3.灰度变换4.同态滤波5.对比拉伸6.对数变换7.幂律变换(伽马变换) 前言 图像增强是指通过各种算法和技术,改善或提高数字图像的质量、清晰度、对比度…

UI自动化概念+Web自动化测试框架

1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …

【算法|二分查找No.4】leetcode 852. 山脉数组的峰顶索引

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

go-sync-mutex

Sync ​ Go 语言作为一个原生支持用户态进程(Goroutine)的语言,当提到并发编程、多线程编程时,往往都离不开锁这一概念。锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多…

python图像处理 ——图像分块

python图像处理 ——图像分块 前言一、分块与合并1.读取原始图像2.网格划分,将图像划分为m*n块3.网格合并 二、代码 前言 根据图像尺寸创建一个 ( m 1 ) ( n 1 ) 个均匀的网格顶点坐标,对于图像块来说每个图像块的左上角和右下角可以唯一确定一个图像…

0X02

web9 阐释一波密码&#xff0c;依然没有什么 发现&#xff0c;要不扫一下&#xff0c;或者看一看可不可以去爆破密码 就先扫了看看&#xff0c;发现robots.txt 访问看看,出现不允许被访问的目录 还是继续尝试访问看看 就可以下载源码&#xff0c;看看源码 <?php $fl…

【音视频 | Ogg】RFC3533 :Ogg封装格式版本 0(The Ogg Encapsulation Format Version 0)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

双目视觉检测 KX02-SY1000型测宽仪 有效修正和消除距离变化对测量的影响

双目视觉检测的基本原理 利用相机测量宽度时&#xff0c;由于单个相机在成像时存在“近大远小”的现象&#xff0c;并且单靠摄入的图像无法知道被测物的距离&#xff0c;所以由被测物的跳动导致的被测物到工业相机之间距离变化&#xff0c;使测量精度难以提高。 因此测宽仪需…

React基础知识02

一、通过属性来传值&#xff08;props&#xff09; react中可以使用属性&#xff08;props&#xff09;可以传递给子组件&#xff0c;子组件可以使用这些属性值来控制其行为和呈现输出。 例子&#xff1a; // 1.1 父组件 import React, { useState } from react // 1.2引入子…

Rust编程基础之6大数据类型

1.Rust数据类型 在 Rust 中, 每一个值都属于某一个 数据类型&#xff08;data type&#xff09;, 这告诉 Rust 它被指定为何种数据&#xff0c;以便明确数据处理方式。我们将看到两类数据类型子集&#xff1a;标量&#xff08;scalar&#xff09;和复合&#xff08;compound&a…

多态 多继承的虚表深度剖析 (3)

&#x1f4af; 博客内容&#xff1a;多态 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准C后端工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这里是CSD…

NLP之Bert多分类实现案例(数据获取与处理)

文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…

Open3D(C++) 最小二乘拟合平面(间接平差法)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z

Monarch Mixer:一种性能比Transformer更强的网络架构

六年前&#xff0c;谷歌团队在arXiv上发表了革命性的论文《Attention is all you need》。作为一种优势的机器学习网络架构&#xff0c;Transformer技术迅速席卷全球。Transformer一直是现代基础模型背后的主力架构&#xff0c;并且在不同的应用程序中取得了令人印象深刻的成功…