Python 中 必须掌握的 20 个核心函数——input()函数
itomcoil 2025-10-02 20:41 11 浏览
input()是Python中用于从标准输入(通常是键盘)获取用户输入的内置函数,它是创建交互式程序的基础工具。
一、input()的基本用法
1.1 方法签名
input([prompt])
- prompt:可选参数,显示给用户的提示信息
- 返回:用户输入的字符串(总是返回字符串类型)
1.2 基础示例
# 基本输入
name = input("请输入您的姓名: ")
print(f"您好, {name}!")
# 无提示输入
data = input() # 等待用户输入,不显示提示
print(f"您输入了: {data}")
1.3 输入处理
# 输入总是返回字符串
age = input("请输入您的年龄: ")
print(type(age)) # <class 'str'>
# 需要类型转换
age_int = int(age)
print(type(age_int)) # <class 'int'>
二、input()的深入解析
2.1 输入验证和处理
def get_valid_input(prompt, input_type=str, validation_func=None):
"""获取经过验证的输入"""
while True:
try:
user_input = input(prompt)
# 类型转换
if input_type != str:
user_input = input_type(user_input)
# 自定义验证
if validation_func and not validation_func(user_input):
raise ValueError("输入验证失败")
return user_input
except ValueError as e:
print(f"输入无效: {e},请重新输入")
# 使用示例
age = get_valid_input("请输入年龄: ", int, lambda x: 0 <= x <= 120)
print(f"您的年龄是: {age}")
2.2 多行输入处理
def get_multiline_input(prompt, end_marker="END"):
"""获取多行输入"""
print(prompt)
print(f"输入 '{end_marker}' 结束输入:")
lines = []
while True:
line = input()
if line == end_marker:
break
lines.append(line)
return "\n".join(lines)
# 使用示例
text = get_multiline_input("请输入多行文本:")
print("您输入的内容:")
print(text)
三、实际应用场景
3.1 用户交互程序
def simple_calculator():
"""简单计算器"""
print("=== 简单计算器 ===")
# 获取数字输入
try:
num1 = float(input("请输入第一个数字: "))
num2 = float(input("请输入第二个数字: "))
except ValueError:
print("请输入有效的数字!")
return
# 获取操作符
operation = input("请选择操作 (+, -, *, /): ")
# 执行计算
if operation == '+':
result = num1 + num2
elif operation == '-':
result = num1 - num2
elif operation == '*':
result = num1 * num2
elif operation == '/':
if num2 == 0:
print("错误: 除数不能为零!")
return
result = num1 / num2
else:
print("无效的操作符!")
return
print(f"结果: {result}")
# 运行计算器
# simple_calculator()
3.2 数据收集表单
def user_registration():
"""用户注册表单"""
print("=== 用户注册 ===")
user_data = {}
# 收集用户信息
user_data['username'] = input("用户名: ").strip()
user_data['email'] = input("邮箱: ").strip()
user_data['age'] = get_valid_input("年龄: ", int, lambda x: x >= 13)
user_data['password'] = input("密码: ")
# 确认密码
while True:
confirm = input("确认密码: ")
if confirm == user_data['password']:
break
print("密码不匹配!")
print("注册成功!")
return user_data
# 使用示例
# user_info = user_registration()
# print(user_info)
3.3 命令行游戏
def number_guessing_game():
"""猜数字游戏"""
import random
print("=== 猜数字游戏 ===")
print("我想了一个1-100之间的数字,你来猜!")
secret_number = random.randint(1, 100)
attempts = 0
while True:
try:
guess = int(input("你的猜测: "))
attempts += 1
if guess < secret_number:
print("猜小了!")
elif guess > secret_number:
print("猜大了!")
else:
print(f"恭喜! 你在 {attempts} 次尝试后猜对了!")
break
except ValueError:
print("请输入有效的数字!")
# 开始游戏
# number_guessing_game()
四、高级用法与技巧
4.1 输入超时处理
import threading
import time
def input_with_timeout(prompt, timeout=10):
"""带超时的输入"""
print(prompt)
result = [None] # 使用列表来共享结果
def get_input():
try:
result[0] = input()
except:
pass
# 启动输入线程
input_thread = threading.Thread(target=get_input)
input_thread.daemon = True
input_thread.start()
input_thread.join(timeout)
if input_thread.is_alive():
print("\n时间到!")
return None
return result[0]
# 使用示例
# response = input_with_timeout("请在10秒内回答: ", 10)
# print(f"您的回答: {response}")
4.2 密码输入(隐藏输入)
def get_password(prompt="密码: "):
"""安全获取密码输入(不显示字符)"""
import getpass
try:
return getpass.getpass(prompt)
except Exception as e:
print(f"密码输入错误: {e}")
return input(prompt) # 回退到普通输入
# 使用示例
# password = get_password()
# print("密码已接收")
4.3 使用readline增强输入
def enhanced_input(prompt="", history_file=None):
"""增强的输入函数,支持历史记录"""
try:
import readline
if history_file:
try:
readline.read_history_file(history_file)
except FileNotFoundError:
pass
# 设置历史记录长度
readline.set_history_length(1000)
except ImportError:
pass # readline不可用
try:
user_input = input(prompt)
if history_file:
readline.write_history_file(history_file)
return user_input
except (EOFError, KeyboardInterrupt):
return None
# 使用示例
# name = enhanced_input("姓名: ", "input_history.txt")
五、常见问题解答
5.1 输入中文时出现编码问题
# 处理中文输入
def get_chinese_input(prompt):
"""处理中文输入"""
try:
# 在Python 3中,input()通常能正确处理中文
return input(prompt)
except UnicodeDecodeError:
print("编码错误,请重试")
return get_chinese_input(prompt)
# 使用示例
# text = get_chinese_input("请输入中文: ")
5.2 如何处理空输入
# 处理中文输入
def get_chinese_input(prompt):
"""处理中文输入"""
try:
# 在Python 3中,input()通常能正确处理中文
return input(prompt)
except UnicodeDecodeError:
print("编码错误,请重试")
return get_chinese_input(prompt)
# 使用示例
# text = get_chinese_input("请输入中文: ")
5.2 如何处理空输入
def safe_input(prompt):
"""安全的输入处理,处理中断信号"""
try:
return input(prompt)
except KeyboardInterrupt:
print("\n操作被用户取消")
return None
except EOFError:
print("\n输入结束")
return None
# 使用示例
# result = safe_input("请输入: ")
六、最佳实践和模式
6.1 创建输入验证框架
class InputValidator:
"""输入验证框架"""
@staticmethod
def validate_integer(value, min_val=None, max_val=None):
"""验证整数"""
try:
num = int(value)
if min_val is not None and num < min_val:
return False, f"不能小于 {min_val}"
if max_val is not None and num > max_val:
return False, f"不能大于 {max_val}"
return True, num
except ValueError:
return False, "请输入有效的整数"
@staticmethod
def validate_float(value, min_val=None, max_val=None):
"""验证浮点数"""
try:
num = float(value)
if min_val is not None and num < min_val:
return False, f"不能小于 {min_val}"
if max_val is not None and num > max_val:
return False, f"不能大于 {max_val}"
return True, num
except ValueError:
return False, "请输入有效的数字"
@staticmethod
def validate_string(value, min_len=None, max_len=None, allowed_chars=None):
"""验证字符串"""
if not isinstance(value, str):
return False, "必须是字符串"
if min_len is not None and len(value) < min_len:
return False, f"长度不能小于 {min_len}"
if max_len is not None and len(value) > max_len:
return False, f"长度不能大于 {max_len}"
if allowed_chars and any(char not in allowed_chars for char in value):
return False, f"包含无效字符"
return True, value
def get_validated_input(prompt, validator, **validator_args):
"""获取经过验证的输入"""
while True:
user_input = input(prompt)
is_valid, result = validator(user_input, **validator_args)
if is_valid:
return result
else:
print(f"输入无效: {result}")
# 使用示例
age = get_validated_input(
"年龄: ",
InputValidator.validate_integer,
min_val=0,
max_val=150
)
6.2 创建交互式菜单系统
class InteractiveMenu:
"""交互式菜单系统"""
def __init__(self):
self.menu_items = []
self.running = False
def add_item(self, key, description, handler):
"""添加菜单项"""
self.menu_items.append({
'key': key,
'description': description,
'handler': handler
})
def display_menu(self):
"""显示菜单"""
print("\n" + "="*40)
print("请选择操作:")
for item in self.menu_items:
print(f" {item['key']}. {item['description']}")
print(" q. 退出")
print("="*40)
def run(self):
"""运行菜单系统"""
self.running = True
while self.running:
self.display_menu()
choice = input("请输入选择: ").strip().lower()
if choice == 'q':
self.running = False
print("再见!")
continue
# 查找匹配的菜单项
matched_items = [item for item in self.menu_items if item['key'] == choice]
if matched_items:
matched_items[0]['handler']()
else:
print("无效的选择,请重试!")
def exit(self):
"""退出菜单"""
self.running = False
# 使用示例
def handle_option1():
print("执行选项1")
def handle_option2():
print("执行选项2")
menu = InteractiveMenu()
menu.add_item('1', '选项一', handle_option1)
menu.add_item('2', '选项二', handle_option2)
# 启动菜单
# menu.run()
6.3 输入历史记录系统
class InputHistory:
"""输入历史记录系统"""
def __init__(self, history_file="input_history.txt"):
self.history_file = history_file
self.history = []
self.load_history()
def load_history(self):
"""加载历史记录"""
try:
with open(self.history_file, 'r', encoding='utf-8') as f:
self.history = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
self.history = []
def save_history(self):
"""保存历史记录"""
with open(self.history_file, 'w', encoding='utf-8') as f:
for item in self.history[-1000:]: # 保存最近1000条
f.write(item + '\n')
def add_to_history(self, input_text):
"""添加到历史记录"""
if input_text and input_text not in self.history:
self.history.append(input_text)
self.save_history()
def get_input_with_history(self, prompt):
"""带历史记录的输入"""
try:
import readline
# 设置历史记录
readline.clear_history()
for item in self.history:
readline.add_history(item)
except ImportError:
pass # readline不可用
user_input = input(prompt)
self.add_to_history(user_input)
return user_input
# 使用示例
history_system = InputHistory()
# name = history_system.get_input_with_history("姓名: ")
七、总结最佳实践
- 总是验证输入:不要信任用户输入
- 提供清晰提示:让用户知道需要输入什么
- 处理异常情况:考虑所有可能的错误情况
- 使用类型转换:记得input()总是返回字符串
class InputHistory:
"""输入历史记录系统"""
def __init__(self, history_file="input_history.txt"):
self.history_file = history_file
self.history = []
self.load_history()
def load_history(self):
"""加载历史记录"""
try:
with open(self.history_file, 'r', encoding='utf-8') as f:
self.history = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
self.history = []
def save_history(self):
"""保存历史记录"""
with open(self.history_file, 'w', encoding='utf-8') as f:
for item in self.history[-1000:]: # 保存最近1000条
f.write(item + '\n')
def add_to_history(self, input_text):
"""添加到历史记录"""
if input_text and input_text not in self.history:
self.history.append(input_text)
self.save_history()
def get_input_with_history(self, prompt):
"""带历史记录的输入"""
try:
import readline
# 设置历史记录
readline.clear_history()
for item in self.history:
readline.add_history(item)
except ImportError:
pass # readline不可用
user_input = input(prompt)
self.add_to_history(user_input)
return user_input
# 使用示例
history_system = InputHistory()
# name = history_system.get_input_with_history("姓名: ")
七、总结最佳实践
- 总是验证输入:不要信任用户输入
- 提供清晰提示:让用户知道需要输入什么
- 处理异常情况:考虑所有可能的错误情况
- 使用类型转换:记得input()总是返回字符串
相关推荐
- python创建文件夹,轻松搞定,喝咖啡去了
-
最近经常在录视频课程,一个课程下面往往有许多小课,需要分多个文件夹来放视频、PPT和案例,这下可好了,一个一个手工创建,手酸了都做不完。别急,来段PYTHON代码,轻松搞定,喝咖啡去了!import...
- 如何编写第一个Python程序_pycharm写第一个python程序
-
一、第一个python程序[掌握]python:python解释器,将python代码解释成计算机认识的语言pycharm:IDE(集成开发环境),写代码的一个软件,集成了写代码,...
- Python文件怎么打包为exe程序?_python3.8打包成exe文件
-
PyInstaller是一个Python应用程序打包工具,它可以将Python程序打包为单个独立可执行文件。要使用PyInstaller打包Python程序,需要在命令行中使用py...
- 官方的Python环境_python环境版本
-
Python是一种解释型编程开发语言,根据Python语法编写出来的程序,需要经过Python解释器来进行执行。打开Python官网(https://www.python.org),找到下载页面,选择...
- [编程基础] Python配置文件读取库ConfigParser总结
-
PythonConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。文章目录1介绍1.1PythonConfigParser读取文件1.2Python...
- Python打包exe软件,用这个库真的很容易
-
初学Python的人会觉得开发一个exe软件非常复杂,其实不然,从.py到.exe文件的过程很简单。你甚至可以在一天之内用Python开发一个能正常运行的exe软件,因为Python有专门exe打包库...
- 2025 PyInstaller 打包说明(中文指南),python 打包成exe 都在这里
-
点赞标记,明天就能用上这几个技巧!linux运维、shell、python、网络爬虫、数据采集等定定做,请私信。。。PyInstaller打包说明(中文指南)下面按准备→基本使用→常用...
- Python自动化办公应用学习笔记40—文件路径2
-
4.特殊路径操作用户主目录·获取当前用户的主目录路径非常常用:frompathlibimportPathhome_dir=Path.home()#返回当前用户主目录的Path对象...
- Python内置tempfile模块: 生成临时文件和目录详解
-
1.引言在Python开发中,临时文件和目录的创建和管理是一个常见的需求。Python提供了内置模块tempfile,用于生成临时文件和目录。本文将详细介绍tempfile模块的使用方法、原理及相关...
- python代码实现读取文件并生成韦恩图
-
00、背景今天战略解码,有同学用韦恩图展示各个产品线的占比,效果不错。韦恩图(Venndiagram),是在集合论数学分支中,在不太严格的意义下用以表示集合的一种图解。它们用于展示在不同的事物群组之...
- Python技术解放双手,一键搞定海量文件重命名,一周工作量秒搞定
-
摘要:想象一下,周五傍晚,办公室的同事们纷纷准备享受周末,而你,面对着堆积如山的文件,需要将它们的文件名从美国日期格式改为欧洲日期格式,这似乎注定了你将与加班为伍。但别担心,Python自动化办公来...
- Python路径操作的一些基础方法_python路径文件
-
带你走进@机器人时代Discover点击上面蓝色文字,关注我们Python自动化操作文件避开不了路径操作方法,今天我们来学习一下路径操作的一些基础。Pathlib库模块提供的路径操作包括路径的...
- Python爬取下载m3u8加密视频,原来这么简单
-
1.前言爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。今天就教大家如果通过python爬取下载m3u8加密视频...
- 探秘 shutil:Python 高级文件操作的得力助手
-
在Python的标准库中,shutil模块犹如一位技艺精湛的工匠,为我们处理文件和目录提供了一系列高级操作功能。无论是文件的复制、移动、删除,还是归档与解压缩,shutil都能以简洁高效的方式完成...
- 怎么把 Python + Flet 开发的程序,打包为 exe ?这个方法很简单!
-
前面用Python+Flet开发的“我的计算器v3”,怎么打包为exe文件呢?这样才能分发给他人,直接“双击”运行使用啊!今天我给大家分享一个简单的、可用的,把Flet开发的程序打包为...
- 一周热门
- 最近发表
-
- python创建文件夹,轻松搞定,喝咖啡去了
- 如何编写第一个Python程序_pycharm写第一个python程序
- Python文件怎么打包为exe程序?_python3.8打包成exe文件
- 官方的Python环境_python环境版本
- [编程基础] Python配置文件读取库ConfigParser总结
- Python打包exe软件,用这个库真的很容易
- 2025 PyInstaller 打包说明(中文指南),python 打包成exe 都在这里
- Python自动化办公应用学习笔记40—文件路径2
- Python内置tempfile模块: 生成临时文件和目录详解
- python代码实现读取文件并生成韦恩图
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)