在 Python 中从键盘读取用户输入

在这里插入图片描述

文章目录

  • 如何在 Python 中从键盘读取用户输入
  • input 函数
    • 使用input读取键盘输入
    • 使用input读取特定类型的数据
    • 处理错误
    • 从用户输入中读取多个值
  • getpass 模块
  • 使用 PyInputPlus 自动执行用户输入评估
  • 总结

如何在 Python 中从键盘读取用户输入

原文《How to Read User Input From the Keyboard in Python》

input 函数

使用input读取键盘输入

input是一个内置函数,将从输入中读取一行,并返回一个字符串(除了末尾的换行符)。

例1: 使用Input读取用户姓名

name = input("你的名字:")
print(f"你好,{name}")

使用input读取特定类型的数据

input默认返回字符串,如果需要读取其他类型的数据,需要使用类型转换。

例2:读取用户年龄

age = input("你的年龄:")
print(type(age)) # <class 'str'>

age = int(input("你的年龄:"))
print(type(age)) # <class 'int'>

处理错误

如果用户输入的不是数字,int()将会抛出ValueError异常。

>>> age = int(input("你的年龄:"))
你的年龄:三十
Traceback (most recent call last):
  ...
ValueError: invalid literal for int() with base 10: '三十'

使用try-except处理错误可以使程序更健壮。

例3:用try-except处理用户输入错误

while True:
    try:
        age = int(input("你的年龄:"))
    except ValueError:
        print("请使用数字输入你的年龄,例如24")
    else:
        break

print(f"明年, 你将 {age + 1} 岁。")

从用户输入中读取多个值

有时用户需要输入多个值,可以使用split()方法将输入分割成多个值。
例4:从用户输入中读取多个值

user_colors = input("输入三种颜色,用,隔开: ")
# orange, purple, green
colors = [s.strip() for s in user_colors.split(",")]

print(f"颜色的列表为: {colors}")

getpass 模块

有时,程序需要隐藏用户的输入。例如,密码、API 密钥甚至电子邮件地址等输入。可用标准库模块getpass实现。

下面是一个验证用户邮箱的例子。
例5:使用getpass隐藏用户输入

import os
import getpass

def verify_email(email):
    allowed_emails = [
        email.strip() for email in os.getenv("ALLOWED_EMAILS").split(",")
    ]
    return email in allowed_emails

def main():
    email = getpass.getpass("输入邮箱地址:")
    if verify_email(email):
        print("有效的邮箱,通过。")
    else:
        print("无效的邮箱,拒绝。")

if __name__ == "__main__":
    main()

我们使用os.getenv获取环境变量ALLOWED_EMAILS,并使用getpass.getpass隐藏用户输入。

为了设置环境变量,Windows用户可以在命令行或powershell中使用$env:命令。powershell设置环境变量-知乎
设置当前会话的环境变量:

$env:ALLOWED_EMAILS = 'info@example.com'

linux用户可以使用export命令。

export ALLOWED_EMAILS=info@example.com

然后执行程序,输入邮箱地址,如果邮箱地址在环境变量中,程序将返回Email is valid. You can proceed.否则返回Incorrect email. Access denied.

使用 PyInputPlus 自动执行用户输入评估

PyInputPlus包基于验证和重新提示用户输入而构建并增强 input() 。
这是一个第三方包,可用pip安装。
python -m pip install pyinputplus

例6:使用PyInputPlus读取用户输入

import pyinputplus as pyip

age = pyip.inputInt(prompt="你的年龄:", min=0, max=120)
print(f"你的年龄是 {age}")

注:这个包最后更新时间是2020年10月11日。

例7:一个简单的交易程序

import pyinputplus as pyip

account_balance = 1000

print("欢迎来到 REALBank")
while True:
    print(f"\n你的余额为: ¥{account_balance}")
    transaction_type = pyip.inputChoice(["存钱", "取钱", "退出"])

    if transaction_type == "退出":
        break
    elif transaction_type == "存钱":
        deposit_amount = pyip.inputInt(
            prompt="输入金额 (最大 ¥10,000): ¥", min=0, max=10000
        )
        account_balance += deposit_amount
        print(f"存入 ¥{deposit_amount}.")
    elif transaction_type == "取钱":
        withdrawal_amount = pyip.inputInt(
            prompt="输入金额: ¥", min=0, max=account_balance
        )
        account_balance -= withdrawal_amount
        print(f"取出 ¥{withdrawal_amount}.")

print("\n感谢选择 REALBank。再见!")

总结

  • 使用input函数读取用户输入
  • 使用getpass模块隐藏用户输入
  • 使用PyInputPlus包增强用户输入

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

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

相关文章

Elixir and Pylons 中多态继承和自关联关系的创建

我们知道&#xff0c;在Elixir和Pylons中&#xff0c;多态继承和自关联关系是两个独立的概念&#xff0c;分别用于处理不同的情况。而在Pylons中&#xff0c;多态继承通常由SQLAlchemy提供的 polymorphic 关系来实现。下面分别介绍在Elixir和Pylons中如何创建多态继承和自关联关…

vue之性能优化

1.路由懒加载 所谓路由懒加载&#xff0c;其实就是路由通过import动态引入&#xff0c;而不是在文件最上面一个个全部引入&#xff0c;因为JS执行的时候会优先执行引入的文件&#xff0c;如果一次性引入过多&#xff0c;则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

从零搭建React18.2+ReactRoute6.22+TS5+RTK2.2搭配antd5+antd-style书写All in Js完整体验项目规范

1. 使用CRA创建项目 全局设置npm淘宝镜像源 npm config set registry https://registry.npmmirror.com -g使用最新版create-react-app初始化项目结构 npx create-react-app custom-template --template typescript初始化项目之后在package.json文件中配置使用node>18.0.0…

路径总和00

题目链接 路径总和 题目描述 注意点 树中节点的数目在范围 [0, 5000] 内-1000 < Node.val < 1000 解答思路 要判断是否有一条从根节点开始到叶子节点节点总和为targetSum的路径&#xff0c;首先想到使用深度优先遍历&#xff0c;不断递归找到叶子节点且保存该路径的…

Aigtek电压放大器设计流程是什么样的

电压放大器是电子电路中常见的一种模块&#xff0c;用于放大输入信号的电压幅值。在实际设计过程中&#xff0c;需要考虑多个因素&#xff0c;包括放大器的增益、带宽、稳定性和功耗等。下面将介绍电压放大器设计的一般流程。 确定需求&#xff1a;首先需要明确设计的目标和需求…

CrossOver2024实现Mac/Linux上快速运行Win软件和游戏

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍CrossOver2024这款软件的功能特点。 CrossOver2024是一款功能强大的类虚拟机软件&#xff0c;它的设计目标是在Mac和Linux系统上实现Windows软件和游戏的快速运行。这款软件不仅具有出色的兼容…

Spark Core

Spark Core 一、Spark RDD RDD概述 1.RDD基础 2.RDD源代码描述 3.RDD特性 4.Spark宽窄依赖 RDD创建 在驱动器中创建RDD 1.parallelize 读取外部数据集创建RDD 2.textFile RDD操作 缓存rdd到内存 1.RDD转化操作 2.常见的转化操作 3.RDD行动操作 4.常见的行动操作 Spark…

面试官:MySQL的七种日志

哪七种日志日志&#xff1f; 错误日志&#xff08;error log&#xff09; error log主要记录MySQL在启动、关闭或者运行过程中的错误信息&#xff0c;在MySQL的配置文件my.cnf中&#xff0c; 可以通过log-error/var/log/mysqld.log 执行mysql错误日志的位置。 慢查询日志&a…

kpm算法

这里写自定义目录标题 介绍KMP算法的核心思想KMP算法的步骤例题问题分析图解代码输出结果 介绍 KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种用于在一个文本串&#xff08;text&#xff09;中查找一个模式串&#xff08;pattern&#xff09;的高效字符串匹配算法…

基于java的足球联赛管理系统(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

大数据与云计算

目录 一、大数据时代二、云计算——大数据的计算三、云计算发展现状四、云计算实现机制五、云计算压倒性的成本优势 一、大数据时代 我们先来看看百度关于 “大数据”&#xff08;Big Data&#xff09;的搜索指数。 可以看出&#xff0c;“大数据” 这个词是从2012年才引起关注…

趣学前端 | Taro迁移完成之后,总结了一些踩坑经验

背景 四月份的时候&#xff0c;尝试将老的移动端项目改造成多端。因为老项目使用的React框架&#xff0c;综合考量&#xff0c;保障当前业务开发的进度同时&#xff0c;进行项目迁移&#xff0c;所以最后选择了Taro框架。迁移成本会低一些&#xff0c;上手快一些。 上个月&am…

docker部署在线聊天室平台Fiora

Fiora 是一款开源免费的在线聊天系统 https://github.com/yinxin630/fiora 部署 创建docker网络 docker network create fiora-networkdocker-compose部署 vim docker-compose.yml version: 3 services:fiora_redis:image: rediscontainer_name: fiora_redisrestart: alway…

Linux 地址空间

目录 一、程序地址空间 1、虚拟地址 Makefile新写法 2、进程地址空间分布 3、栈&堆 4、static修饰局部变量 5、字符串常量不可修改 6、虚拟地址与物理地址的联系 二、CPU读取程序全过程 1、形成可执行程序 2、生成虚拟地址 3、程序的启动 4、创建进程 5、地…

11---数字温度 OR 湿度传感器电路设计

视频链接 数字温度or湿度传感器电路设计02_哔哩哔哩_bilibili 数字温度 OR 湿度传感器电路设计 1、温湿度传感器 DHT11 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度-5%RH&#xff0c; 温度-2℃&#xff0c;量程湿度20-90%RH&#xff0c; 温度0~50℃。 D…

maven运行spring boot项目

我用idea想跑一个整合flowable的spring boot项目&#xff0c;但是跑不起来&#xff0c;原因是jdk版本不够高。但是我的idea是2018版本&#xff0c;最高只能支持到jdk11。就想办法不用idea编译、打包、运行项目。因为spring boot是maven项目&#xff0c;所以可以用maven进行打包…

纵行科技邀您相聚“2024全球物流技术大会”

3月27-29日&#xff0c;中国物流与采购联合将在海口召开“2024全球物流技术大会”&#xff0c;大会将全方位、多层次、立体化展现前沿物流技术的发展&#xff0c;加速前沿技术装备在物流行业的应用。作为供应链物流物联网技术及产品厂商的代表&#xff0c;纵行科技将携“ZETag云…

vite vue3 路由配置@找不到文件问题描述

问题描述 在vite.config.js文件中配置路由的时候&#xff0c;添加路由界面&#xff0c;找不到指定的文件&#xff0c;提示错误&#xff0c;如图所示&#xff1a; 但是换成 ./ 或者 ../ 就正常了&#xff0c;也没有报错问题 解决办法 1.安装一个path的插件 npm install --sav…

什么是Git引用和分支?

一. 引言 什么是Git引用和分支&#xff1f;比如我在 Github 上一个项目的 .git/refs目录下&#xff1a; ├─heads │ dev │ master │ ├─remotes │ └─origin │ master │ └─tags refs 目录下包含了 heads、remote、tags 三个子目录&#xff0…

300分钟吃透分布式缓存-22讲:怎么认识和应用Redis内部数据结构?

Redis 内部数据结构 RdeisDb Redis 中所有数据都保存在 DB 中&#xff0c;一个 Redis 默认最多支持 16 个 DB。Redis 中的每个 DB 都对应一个 redisDb 结构&#xff0c;即每个 Redis 实例&#xff0c;默认有 16 个 redisDb。用户访问时&#xff0c;默认使用的是 0 号 DB&…