python的用户输入
PyInputPlus:Python输入验证的终极解决方案
为什么需要PyInputPlus?
想象一下这个场景:你写了一个程序让用户输入年龄:
age = input("请输入你的年龄:")
用户可能会输入:
- "25" ✅(正确)
- "二十五" ❌(中文数字)
- "abc" ❌(字母)
- "-5" ❌(负数)
- "200" ❌(不合理的年龄)
你需要写很多代码来验证:
while True:
age = input("请输入你的年龄:")
try:
age = int(age)
if 0 <= age <= 120:
break
else:
print("年龄必须在0-120之间")
except ValueError:
print("请输入数字!")
太麻烦了! PyInputPlus就是为了解决这个问题而生的!
什么是PyInputPlus?
PyInputPlus是一个第三方Python库,它让用户输入验证变得超级简单!就像给你的input()函数装上了"智能大脑"。
核心特点:
- 自动验证:自动检查输入是否正确
- 自动重试:输入错误时自动重新提示
- 类型转换:自动把输入转换成正确的类型
- 丰富的验证选项:数字范围、菜单选择、邮箱格式等
安装PyInputPlus
在命令行中运行
pip install pyinputplus
验证安装:
import pyinputplus as pyip # 导入并起个别名pyip
print("PyInputPlus安装成功!")
你的第一个PyInputPlus程序
import pyinputplus as pyip
# 最简单的数字输入
age = pyip.inputInt("请输入你的年龄:")
print(f"你的年龄是:{age}")
# 运行效果:
# 请输入你的年龄:abc
# 'abc' 不是整数。
# 请输入你的年龄:二百
# '二百' 不是整数。
# 请输入你的年龄:25
# 你的年龄是:25
看到了吗? 不需要写任何验证代码,PyInputPlus自动帮你处理错误输入!
PyInputPlus的核心函数
inputStr() - 增强版input()
import pyinputplus as pyip
# 基本用法
name = pyip.inputStr("请输入你的名字:")
print(f"你好,{name}!")
# 限制长度
username = pyip.inputStr("请输入用户名(3-10个字符):", min=3, max=10)
# 限制重试次数
password = pyip.inputStr("请输入密码:", limit=3) # 最多尝试3次
inputInt() - 只能输入整数
# 基本整数输入
number = pyip.inputInt("请输入一个整数:")
# 带范围的整数
age = pyip.inputInt("请输入年龄(0-120):", min=0, max=120)
# 大于/小于限制
score = pyip.inputInt("请输入分数(大于60):", greaterThan=60)
temperature = pyip.inputInt("请输入温度(小于40):", lessThan=40)
inputFloat() - 只能输入小数
# 浮点数输入
price = pyip.inputFloat("请输入价格:")
# 带精度的浮点数
pi = pyip.inputFloat("请输入π的值(保留2位小数):",
min=3.14, max=3.15)
inputNum() - 智能数字输入
# 自动判断整数还是小数
number = pyip.inputNum("请输入一个数字:")
print(f"你输入的是:{number},类型是:{type(number)}")
# 输入25 → 返回25(int类型)
# 输入25.5 → 返回25.5(float类型)
选择类函数
inputChoice() - 选择题
colors = ["红色", "绿色", "蓝色", "黄色"]
# 用户必须从列表中选择
color = pyip.inputChoice(colors, prompt="请选择颜色:")
print(f"你选择了:{color}")
# 运行效果:
# 请选择颜色:红色、绿色、蓝色、黄色
# 红色
# 你选择了:红色
inputMenu() - 带编号的菜单
fruits = ["苹果", "香蕉", "橙子", "西瓜"]
# 显示带编号的菜单
fruit = pyip.inputMenu(fruits,
prompt="请选择水果:\n",
numbered=True)
print(f"你选择了:{fruit}")
# 运行效果:
# 请选择水果:
# 1. 苹果
# 2. 香蕉
# 3. 橙子
# 4. 西瓜
# 2
# 你选择了:香蕉
inputYesNo() - 是/否选择
answer = pyip.inputYesNo("是否继续?(yes/no):")
if answer == "yes":
print("继续执行...")
else:
print("程序结束。")
格式验证函数
inputEmail() - 邮箱验证
email = pyip.inputEmail("请输入邮箱地址:")
print(f"你的邮箱是:{email}")
# 自动验证格式:必须有@和.
# 正确:zhangsan@qq.com
# 错误:zhangsanqq.com(缺少@)
inputURL() - 网址验证
url = pyip.inputURL("请输入网址:")
print(f"网址是:{url}")
# 自动验证:必须以http://或https://开头
inputDate() - 日期验证
from datetime import date
# 输入日期
birthday = pyip.inputDate("请输入生日(YYYY-MM-DD):")
print(f"你的生日是:{birthday}")
print(f"类型是:{type(birthday)}") # <class 'datetime.date'>
inputRegex() - 正则表达式验证
# 验证手机号(11位数字)
phone = pyip.inputRegex(r'^\d{11}$',
prompt="请输入手机号:",
message="手机号必须是11位数字!")
print(f"手机号:{phone}")
# 验证身份证号(18位,最后可能是X)
id_card = pyip.inputRegex(r'^\d{17}[\dX]$',
prompt="请输入身份证号:")
高级功能
inputPassword() - 密码输入
# 输入时显示*号,保护隐私
password = pyip.inputPassword("请输入密码:")
print(f"密码已设置(长度:{len(password)})")
# 确认密码
confirm = pyip.inputPassword("请确认密码:")
if password == confirm:
print("密码设置成功!")
else:
print("两次输入不一致!")
inputCustom() - 自定义验证
# 自定义验证函数
def validate_even(number):
"""验证是否为偶数"""
number = int(number)
if number % 2 != 0:
raise Exception('必须输入偶数!')
return number
# 使用自定义验证
even_number = pyip.inputCustom(validate_even,
prompt="请输入一个偶数:")
print(f"你输入的偶数是:{even_number}")
inputBool() - 布尔值输入
# 输入True/False
is_student = pyip.inputBool("你是学生吗?(True/False):")
if is_student: # 已经是bool类型
print("享受学生优惠!")
else:
print("正常价格。")
控制参数详解
limit - 限制尝试次数
try:
# 最多尝试3次
age = pyip.inputInt("请输入年龄:", limit=3)
except pyip.RetryLimitException:
print("尝试次数过多,程序退出。")
timeout - 超时设置
try:
# 10秒内必须输入
answer = pyip.inputStr("快速回答:", timeout=10)
except pyip.TimeoutException:
print("输入超时!")
default - 默认值
# 如果用户直接回车,使用默认值
name = pyip.inputStr("请输入名字(默认:张三):",
default="张三")
print(f"你好,{name}!")
strip - 去除空白
# 自动去除首尾空格
text = pyip.inputStr("输入文本:", strip=True)
# 输入" hello " → 得到"hello"
allowRegexes/blockRegexes - 允许/阻止特定模式
# 只允许输入"是"或"否"
answer = pyip.inputStr("是否同意?(是/否):",
allowRegexes=[r'^是$', r'^否$'])
# 阻止输入某些词
name = pyip.inputStr("请输入名字:",
blockRegexes=[r'.*脏话.*', r'.*骂人.*'])
错误处理
import pyinputplus as pyip
try:
# 尝试获取输入
age = pyip.inputInt("请输入年龄:",
min=0, max=120,
limit=3, # 最多3次
timeout=30) # 30秒超时
print(f"年龄:{age}")
except pyip.RetryLimitException:
print("错误:尝试次数过多!")
except pyip.TimeoutException:
print("错误:输入超时!")
except Exception as e:
print(f"发生错误:{e}")
实战项目:用户注册系统
import pyinputplus as pyip
def user_registration():
"""用户注册系统"""
print("=== 用户注册 ===")
print("=" * 30)
# 1. 用户名(3-20位字母数字)
username = pyip.inputStr("用户名(3-20位字母数字):",
min=3, max=20,
allowRegexes=[r'^[a-zA-Z0-9]+$'])
# 2. 密码(至少6位)
password = pyip.inputPassword("密码(至少6位):",
min=6)
# 3. 确认密码
confirm = pyip.inputPassword("确认密码:")
if password != confirm:
print("错误:两次密码不一致!")
return
# 4. 邮箱
email = pyip.inputEmail("邮箱地址:")
# 5. 年龄(18岁以上)
age = pyip.inputInt("年龄:", min=18, max=100)
# 6. 性别选择
gender = pyip.inputMenu(["男", "女", "其他"],
prompt="请选择性别:\n",
numbered=True)
# 7. 是否接收推广邮件
newsletter = pyip.inputYesNo("是否接收推广邮件?(yes/no):")
# 显示注册信息
print("\n" + "=" * 30)
print("注册成功!")
print("=" * 30)
print(f"用户名:{username}")
print(f"邮箱:{email}")
print(f"年龄:{age}")
print(f"性别:{gender}")
print(f"接收推广:{'是' if newsletter == 'yes' else '否'}")
print("=" * 30)
# 运行注册系统
user_registration()
更多实用示例
示例1:计算器程序
import pyinputplus as pyip
def calculator():
"""简单计算器"""
print("=== 简单计算器 ===")
# 选择操作
operation = pyip.inputMenu(["加法", "减法", "乘法", "除法"],
numbered=True,
prompt="请选择操作:\n")
# 输入数字
num1 = pyip.inputNum("请输入第一个数字:")
num2 = pyip.inputNum("请输入第二个数字:")
# 执行计算
if operation == "加法":
result = num1 + num2
symbol = "+"
elif operation == "减法":
result = num1 - num2
symbol = "-"
elif operation == "乘法":
result = num1 * num2
symbol = "×"
else: # 除法
if num2 == 0:
print("错误:除数不能为0!")
return
result = num1 / num2
symbol = "÷"
print(f"\n计算结果:{num1} {symbol} {num2} = {result}")
calculator()
示例2:问卷调查
def survey():
"""问卷调查"""
print("=== 用户满意度调查 ===")
responses = {}
# 1. 满意度评分(1-5分)
responses['满意度'] = pyip.inputInt("请给产品评分(1-5分):",
min=1, max=5)
# 2. 推荐意愿
responses['推荐意愿'] = pyip.inputMenu(["非常愿意", "愿意", "一般", "不愿意"],
prompt="您会推荐给朋友吗?\n",
numbered=True)
# 3. 改进建议
responses['建议'] = pyip.inputStr("您的改进建议:",
blank=True) # 允许空输入
# 4. 联系方式(可选)
contact = pyip.inputStr("联系方式(可选,直接回车跳过):",
blank=True)
if contact:
responses['联系方式'] = contact
# 显示结果
print("\n=== 调查结果 ===")
for key, value in responses.items():
print(f"{key}:{value}")
print("感谢您的参与!")
survey()

浙公网安备 33010602011771号