输出与输入
从你写下第一行代码开始,就会用到这两个工具:print() 在终端里显示值,input() 从用户那里获取文本。它们用起来很简单,但了解它们的行为习惯,能帮你少踩一些一开始就容易碰到的坑。
Python 如何执行你的代码
Python 会按照你写代码的顺序,从上到下、一行一行地执行,完全按你写的顺序来,不会跳来跳去。你写的顺序就是执行的顺序,永远如此。
city = "北京"
print(city)
print("Population: 14 million")city 先被赋值。然后第一个 print 执行。接着第二个 print 执行。每次都是这个顺序。
这一点很重要,因为你不能在给变量赋值之前就使用它。Python 还没见过这个变量,会报错:
print(country) # NameError: country 还没有被定义
country = "日本"随着你的程序越写越复杂,要记住:任何你要用的东西,必须先定义好再使用。
NameError。不会提前跳过去看,也不会先把整个文件读一遍。 打印输出
print() 是 Python 向你反馈信息的方式。给它传入任意值,它就会把这个值显示出来,并自动把你给的内容转换成文本。
print("Hello") # Hello
print(42) # 42
print(3.14) # 3.14
print(True) # True一次打印多个值
你可以用逗号分隔多个值,一次性打印出来。Python 默认会在它们之间加一个空格。用 sep 可以改变这个分隔符:
name = "小明"
age = 28
print(name, age) # 小明 28
print("Name:", name) # Name: 小明
print("2024", "01", "15", sep="-") # 2024-01-15
print("a", "b", "c", sep=", ") # a, b, c控制行末字符
每次调用 print(),默认都会以换行符结尾,所以下一次输出会另起一行。用 end 可以改变这一点。把 end="" 设置为空字符串,可以让下一次打印接着写在同一行:
print("Loading", end="")
print("...")
# Loading...
print("one", end=" | ")
print("two", end=" | ")
print("three")
# one | two | threeprint() 会把你给的任何东西转换成文本并显示出来。用逗号分隔多个内容,它们之间会有一个空格,用 sep 可以改变这一点。每次打印结尾都会换行;end="" 能让下一次打印接着写在同一行。 用 f-string 格式化输出
构建消息最简洁的方式是 f-string。在起始引号前加上 f,然后把任意变量或表达式包在花括号里,Python 会在运行时把它填进去。{} 里可以放任意值、计算式,甚至方法调用。
name = "小明"
score = 980
# 字符串拼接:写起来笨拙,数字还要手动 str() 转换
print("Player: " + name + ", Score: " + str(score))
# f-string:可读性好,不需要手动转换
print(f"Player: {name}, Score: {score}"){} 里可以放任意表达式:算术运算、方法调用(比如 .upper(),会在 字符串 一章完整讲到)、格式说明符:
price = 49.99
tax = 0.2
total = price * (1 + tax)
print(f"Total: {total:.2f}") # Total: 59.99
print(f"Name: {name.upper()}") # Name: 小明(大写形式无变化)
print(f"2 + 2 = {2 + 2}") # 2 + 2 = 4: 后面的格式说明符控制值的显示方式:
ratio = 0.8765
count = 1234567
label = "revenue"
print(f"{ratio:.1%}") # 87.6%
print(f"{count:,}") # 1,234,567
print(f"{label:>12}") # " revenue":.2f 表示"保留两位小数"。处理价格和度量值时你会经常用到它。其他的格式说明符则是在你需要的时候用。最重要的一点是:{} 里可以放任何东西,不只是变量名。
f,然后把任何东西包进 {} 里:变量、算式,甚至方法调用都行。加个冒号可以加格式设置,比如 :.2f 表示保留两位小数。比用 + 拼字符串清爽多了。 获取用户输入
input() 会暂停你的程序,等待用户输入内容。用户输入的内容(并按下回车后)会作为返回值传回来。括号里的字符串是显示给用户看的提示信息。
name = input("What's your name? ")
print(f"Hello, {name}!")无论用户输入什么,input() 永远返回一个字符串。输入 42,你得到的是 "42",而不是数字 42。要对它做算术运算,需要显式转换:
age = int(input("How old are you? "))
print(f"In ten years you'll be {age + 10}.")如果用户输入了无法转换的内容会怎样?Python 会抛出 ValueError。妥善处理这种情况的方法,会在 文件与异常 一章讲到。
input() 会显示你的提示信息,等待一行输入,然后永远把它作为 string 返回,即使用户输入的是数字。需要数字?在拿到输入的时候,自己用 int() 或 float() 转换一下,然后就能用正确的类型继续往下写了。 实践一下
一个能根据用户输入个性化内容的小测验:
name = input("What's your name? ")
subject = input("Which subject? ")
print(f"Okay, {name}. Starting your {subject} quiz.")
print("Good luck!")两个输入都以字符串形式返回,直接放进 f-string 里使用。因为这里是把它们当作文本使用,而不是数字,所以不需要做任何转换。

