raw_input() 是 Python 2 中的一个内置函数,它的作用是从标准输入(通常是键盘)读取一行数据,并将其作为 字符串 返回。
基本语法
raw_input() 函数非常简单,可以不带任何参数,也可以带一个可选的字符串参数作为提示信息。
raw_input([prompt])
prompt(可选): 这是一个字符串,会在用户输入之前显示在屏幕上,通常用于提示用户应该输入什么,它本身不会被当作输入内容的一部分。
用法示例
示例 1:不带提示信息
最简单的用法,直接读取用户输入的一行。
# Python 2 代码 print "请输入你的名字:" name = raw_input() print "你好, %s!" % name
运行过程:
请输入你的名字:
Alice
你好, Alice!
示例 2:带提示信息
将提示信息作为参数直接传递给 raw_input(),代码更简洁。
# Python 2 代码
name = raw_input("请输入你的名字:")
print "你好, %s!" % name
运行过程:
请输入你的名字:
Bob
你好, Bob!
最关键的特点:总是返回字符串
这是 raw_input() 与 Python 2 中另一个函数 input() 最大的区别,也是新手最容易出错的地方。
raw_input() 永远将用户输入的所有内容都当作字符串来处理,无论用户输入的是数字、文字还是其他符号。
示例:
# Python 2 代码
age_str = raw_input("请输入你的年龄:")
print "你输入的年龄类型是:", type(age_str)
print "你输入的年龄是:", age_str
运行过程:
请输入你的年龄:
25
你输入的年龄类型是: <type 'str'>
你输入的年龄是: 25
注意看,即使我们输入了数字 25,raw_input() 返回的变量 age_str 的类型仍然是字符串 'str',而不是整数 'int'。
常见用法:类型转换
因为 raw_input() 总是返回字符串,所以当你需要获取数字(整数或浮点数)时,必须手动进行类型转换。
转换为整数
使用 int() 函数进行转换。
# Python 2 代码
age_str = raw_input("请输入你的年龄:")
age_int = int(age_str) # 将字符串转换为整数
print "十年后,你将是 %d 岁。" % (age_int + 10)
运行过程:
请输入你的年龄:
25
十年后,你将是 35 岁。
转换为浮点数
使用 float() 函数进行转换。
# Python 2 代码
price_str = raw_input("请输入商品价格:")
price_float = float(price_str) # 将字符串转换为浮点数
print "商品打八折后价格为:%.2f" % (price_float * 0.8)
运行过程:
请输入商品价格:
99.9
商品打八折后价格为:79.92
错误处理
如果用户输入的内容无法被转换成目标类型,程序会抛出 ValueError 异常,在实际应用中,最好使用 try-except 结构来处理这种错误。
# Python 2 代码
while True:
try:
age_str = raw_input("请输入你的年龄(必须是数字):")
age_int = int(age_str)
break # 如果转换成功,跳出循环
except ValueError:
print "输入无效,请重新输入一个数字!"
print "你的年龄是:", age_int
运行过程(示例1):
请输入你的年龄(必须是数字):
abc
输入无效,请重新输入一个数字!
请输入你的年龄(必须是数字):
25
你的年龄是: 25
raw_input() vs input() (Python 2)
在 Python 2 中,还有一个 input() 函数,它和 raw_input() 的行为完全不同,这常常让人困惑。
| 特性 | raw_input() |
input() (Python 2) |
|---|---|---|
| 返回类型 | 总是字符串 | 将输入作为 Python 表达式求值,返回其结果 |
| 安全性 | 安全 | 不安全,可以执行任意代码 |
| 示例 | raw_input("5") 返回字符串 '5' |
input("5") 返回整数 5 |
| 示例 | raw_input("hello") 返回字符串 'hello' |
input("hello") 会报错 NameError: name 'hello' is not defined |
| 示例 | raw_input("__import__('os').system('ls')") 返回该字符串 |
input("__import__('os').system('ls')") 会执行 ls 命令! |
在 Python 2 中,除非你明确知道自己需要 input() 的危险行为,否则请始终使用 raw_input()。raw_input() 是获取用户输入的推荐和安全的方式。
Python 3 中的变化
Python 3 对这个混乱的情况进行了简化:
- 移除了
raw_input()函数。 - 保留了
input()函数,但它的行为完全等同于 Python 2 中的raw_input(),也就是说,Python 3 的input()总是返回字符串。
如果你正在使用 Python 3,你只需要记住 input() 就可以了。
Python 3 代码示例:
# Python 3 代码
name = input("请输入你的名字:") # 注意:在 Python 3 中是 input()
print("你好, %s!" % name)
age_str = input("请输入你的年龄:")
print("你输入的年龄类型是:", type(age_str))
运行过程:
请输入你的名字:
Charlie
你好, Charlie!
请输入你的年龄:
30
你输入的年龄类型是: <class 'str'>
| 项目 | 描述 |
|---|---|
| 函数 | raw_input() |
| 版本 | 仅 Python 2 |
| 作用 | 从键盘读取一行输入。 |
| 返回值 | 字符串,这是最重要的特性。 |
| 用法 | variable = raw_input("提示信息:") |
| 类型转换 | 如果需要数字,必须手动使用 int() 或 float() 转换。 |
| 安全替代 | 在 Python 2 中,应始终优先使用 raw_input() 而非 input()。 |
| Python 3 | Python 3 中没有 raw_input(),其功能由 input() 实现。 |
希望这个详细的解释能帮助你完全理解 raw_input() 的用法!
