要学习的知识点
- 标识符与 Python 关键字
- int、float、str、bool
- 算术运算符
- 关系运算符
- 逻辑运算与除数检查
题目
补充练习:标识符、关键字、变量、基本类型、输入输出及常用运算。
输入:标识符候选字符串;一行两个整数 a、b;一行两个实数 x、y。
完整代码
以下内容与 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 的整除向负无穷取整特性。
代码如何运行
- 先按左侧题目给出的格式输入数据;程序通过 input() 读取,并在需要时转换数据类型。
- 程序自上而下执行语句;遇到条件、循环或函数调用时,按照右侧算法说明更新变量和处理数据。
- 最后由 print() 输出计算结果。可将左侧示例输入与输出逐项对照。
先自己跟踪一组小数据,记录循环前后变量的值;这比只看最终答案更容易理解程序。
自己动手试一试
输入关键字 for、含空格名字和以下划线开头的名字;再让整数除数或实数除数为 0。
先在 lx20.py 中独立完成,再运行参考程序比较结果。修改程序时一次只改一个条件或步骤。