Python 练习讲解 · 20 / 25

Python 基础:标识符、类型与运算

复习变量命名、基本数据类型、输入转换和三类常见运算。

要学习的知识点

题目

补充练习:标识符、关键字、变量、基本类型、输入输出及常用运算。

输入:标识符候选字符串;一行两个整数 a、b;一行两个实数 x、y。

参考程序:ex20.py;空白练习:lx20.py。

完整代码

以下内容与 ex20.py 一致,可对照右侧讲解阅读。

"""补充练习:标识符、关键字、变量、基本类型、输入输出及常用运算。
输入:标识符候选字符串;一行两个整数 a、b;一行两个实数 x、y。

学习说明:
- keyword 模块可以识别 Python 保留关键字,例如 if、for;关键字不能作为变量名。
- isidentifier() 检查字符串是否符合标识符书写规则。
- input() 读到字符串;int()、float() 将输入转换成相应数值类型。
- +、-、*、** 是算术运算;/、//、% 分别表示除法、整除、取余。
- ==、!=、<、<=、>、>= 是关系运算;and、or、not 是逻辑运算,结果为布尔值。
- 除法和取余前必须确认除数不为 0。
"""
import keyword

candidate = input().strip()
# 一行两个整数、再一行两个实数;拆分后分别转换数据类型。
a, b = map(int, input().split())
x, y = map(float, input().split())

is_valid_identifier = candidate.isidentifier() and not keyword.iskeyword(candidate)
# type(x).__name__ 只用于把变量的类型名称显示出来。
print("identifier valid:", is_valid_identifier)
print("is keyword:", keyword.iskeyword(candidate))
print("types:", type(candidate).__name__, type(a).__name__, type(x).__name__)
print("boolean type:", type(is_valid_identifier).__name__)

print("integer arithmetic:", a + b, a - b, a * b, a ** 2)
if b != 0:
    print("integer division:", a / b, a // b, a % b)
else:
    print("integer division: undefined when b is 0")
print("real arithmetic:", x + y, x - y, x * y)
if y != 0:
    print("real division:", x / y)
else:
    print("real division: undefined when y is 0")

print("relations:", a == b, a != b, a < b, a <= b, a > b, a >= b)
print("logical:", a > 0 and b > 0, a > 0 or b > 0, not (a == b))

进阶写法

这版与初学版解决同一道题,使用更精炼的语法或标准库工具。

进阶源码:ex20_adv.py

"""练习 20 进阶版:用 map 转换输入,并将关系与逻辑表达式作为值输出。"""
import keyword

candidate = input().strip()
a, b = map(int, input().split())
x, y = map(float, input().split())

valid_identifier = candidate.isidentifier() and not keyword.iskeyword(candidate)
print("identifier valid:", valid_identifier)
print("is keyword:", keyword.iskeyword(candidate))
print("types:", type(candidate).__name__, type(a).__name__, type(x).__name__)
print("boolean type:", type(valid_identifier).__name__)
print("integer arithmetic:", a + b, a - b, a * b, a ** 2)
if b:
	print("integer division:", a / b, a // b, a % b)
else:
	print("integer division: undefined when b is 0")
print("real arithmetic:", x + y, x - y, x * y)
print("real division:", x / y if y else "undefined when y is 0")
print("relations:", a == b, a != b, a < b, a <= b, a > b, a >= b)
print("logical:", a > 0 and b > 0, a > 0 or b > 0, not (a == b))

map() 将输入文本逐项转换;条件表达式把简短的 if/else 结果直接放进 print。除数检查仍显式保留,防止除零。

运行结果

示例输入:

score
7 3
1.5 2.0

程序输出:

identifier valid: True
is keyword: False
types: str int float
boolean type: bool
integer arithmetic: 10 4 21 49
integer division: 2.3333333333333335 2 1
real arithmetic: 3.5 -0.5 3.0
real division: 0.75
relations: False True False False True True
logical: True True True

逐个认识函数

下表根据程序中实际调用的函数和方法整理;自定义函数的实现与算法细节见后续说明。

函数形式功能与返回值注意事项
str.isidentifier()判断字符串是否符合 Python 标识符语法,返回 bool。关键字的拼写形式合法,但仍不能作普通变量名。
input(prompt='')读取一行文本,返回 str;若提供 prompt 会先显示提示。返回值默认是字符串,计算前通常要做类型转换。
str.split(sep=None)按分隔符拆分字符串,返回字符串列表。默认按连续空白拆分并忽略首尾空白。
str.strip(chars=None)返回去掉首尾空白或指定字符的新字符串。不会删除字符串中间的字符。
keyword.iskeyword(word)判断字符串是否为 Python 关键字,返回 bool。需先 import keyword。
map(function, iterable)逐个应用函数,返回惰性迭代器。常与 list() 一起使用以立即取得结果。
print(*objects, sep=' ', end='\n')把对象转换为文本显示;返回 None。默认空格分隔并在末尾换行。
type(obj)返回对象的类型对象。可用 type(obj).__name__ 取得易读的类型名称。

标识符、关键字与变量

标识符是给变量、函数等起的名字。通常可含字母、数字、下划线,不能以数字开头;大小写不同视为不同名字。Python 关键字(例如 if、for、class)有固定语法含义,不能用作变量名。

函数/方法参数与返回值本题用途
candidate.isidentifier()字符串方法,无参数;返回是否符合标识符规则的 bool。检查拼写形式,但关键字如 for 虽然形状合法,仍不能当普通变量名。
keyword.iskeyword(word)keyword 模块函数;参数是字符串,返回该字符串是否为 Python 关键字。和 isidentifier() 同时成立才可用作普通名字。
str.strip()无参数时返回去掉首尾空白的新字符串。避免用户输入前后空格影响检查;不删中间空格。
type(obj)返回对象的类型对象。例如 type(3) 是 int 类型。
type(obj).__name__取类型对象的名称字符串。便于输出 int、float、str、bool 等类型名称。

四种基本数据类型

类型例子含义
int 整数7、-3没有小数部分的整数。
float 浮点数1.5用于表示带小数的数,可能存在二进制近似误差。
str 字符串"score"文本;input() 默认返回 str。
bool 布尔值True、False逻辑判断结果。Python 中 True/False 首字母大写。

int(text)、float(text) 将输入文本转换为相应数字类型;如果文本格式不对,会得到 ValueError。

运算符的功能和注意事项

种类运算符说明
算术+ - * / // % **加减乘、真除、整除、取余、乘方。7/3 得浮点数;7//3 得 2;7%3 得 1。
关系== != < <= > >=比较两个数,结果是 bool。注意相等比较是两个等号,单等号用于赋值。
逻辑and or not组合或反转布尔条件;and 两侧都真才真,or 至少一侧真即真。

除法、整除、取余都不能以 0 为除数。程序分别检查 b 和 y,避免 ZeroDivisionError。

用 7 和 3 分别手算 /、//、%。再试负数,观察 Python 的整除向负无穷取整特性。

代码如何运行

  1. 先按左侧题目给出的格式输入数据;程序通过 input() 读取,并在需要时转换数据类型。
  2. 程序自上而下执行语句;遇到条件、循环或函数调用时,按照右侧算法说明更新变量和处理数据。
  3. 最后由 print() 输出计算结果。可将左侧示例输入与输出逐项对照。

先自己跟踪一组小数据,记录循环前后变量的值;这比只看最终答案更容易理解程序。

自己动手试一试

输入关键字 for、含空格名字和以下划线开头的名字;再让整数除数或实数除数为 0。

先在 lx20.py 中独立完成,再运行参考程序比较结果。修改程序时一次只改一个条件或步骤。