整数与浮点数、decimal、Fraction 练习题
一、整数(int)
练习 1.1 基本运算
在 Python 里计算并写出结果(可先心算,再写代码验证):
17 // 5= ?17 % 5= ?2 ** 10= ?-9 // 4= ?(注意:整除向负无穷取整)-9 % 4= ?
验证示例:
print(17 // 5) # 3
print(17 % 5) # 2
print(2 ** 10) # 1024
print(-9 // 4) # -3
print(-9 % 4) # 3
练习 1.2 整除与取余的应用
- 写出判断奇数/偶数的表达式:给定变量
n,若为偶数则某表达式为True,否则为False。 - 变量
num = 12345,用整除和取余分别得到个位、十位、百位的数字,并打印。
参考写法:
n = 8
print(n % 2 == 0) # True 表示偶数
num = 12345
ge = num % 10
shi = num // 10 % 10
bai = num // 100 % 10
print("个位:", ge, "十位:", shi, "百位:", bai)
练习 1.3 类型转换
int(3.9)和int(-3.9)分别等于多少?为什么不是四舍五入?- 用
int()把字符串"100"转成整数,再和50相加,写出完整一行代码并写出结果。
参考:
print(int(3.9)) # 3,截断小数
print(int(-3.9)) # -3
print(int("100") + 50) # 150
二、浮点数(float)
练习 2.1 写法和运算
- 用科学计数法表示:1500.0 和 0.002,分别写成
XeY的形式并打印验证。 - 计算
10 / 3,观察结果是整数还是浮点数;再计算10 // 3,对比两者。
参考:
print(1.5e3) # 1500.0
print(2e-3) # 0.002
print(10 / 3) # 3.333...
print(10 // 3) # 3
练习 2.2 浮点“误差”现象
在 Python 里运行并观察输出:
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
- 问:
0.1 + 0.2显示的值是什么?为什么和 0.3 不完全相等?(用一句话说明:和二进制存储有关即可。)
三、decimal 模块
练习 3.1 基本使用
- 用
Decimal("0.1")和Decimal("0.2")做加法,打印结果,并判断是否等于Decimal("0.3")。 - 用
Decimal(0.1)构造 0.1,再打印,观察和用字符串"0.1"构造有什么不同。
参考:
from decimal import Decimal
a = Decimal("0.1")
b = Decimal("0.2")
print(a + b)
print(a + b == Decimal("0.3")) # True
c = Decimal(0.1)
print(c) # 一长串小数,说明用 float 构造会带误差 0.1000000000000000055511151231257827021181583404541015625
练习 3.2 金额计算
- 单价
19.99元,数量3,用 Decimal 计算总价,并保留两位小数(四舍五入)。写出完整代码并打印总价。
参考:
from decimal import Decimal, ROUND_HALF_UP
单价 = Decimal("19.99")
数量 = 3
总价 = (单价 * 数量).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print("总价:", 总价) # 59.97
四、fractions 模块与 Fraction
练习 4.1 创建与属性
- 用
Fraction(3, 6)创建一个分数,打印它;再打印其.numerator和.denominator,观察是否已约分。 - 用
Fraction("1/3")和Fraction("1/6")做加法,打印结果(应为 1/2)。
参考:
from fractions import Fraction
f = Fraction(3, 6)
print(f) # 1/2
print(f.numerator) # 1
print(f.denominator) # 2
a = Fraction("1/3")
b = Fraction("1/6")
print(a + b) # 1/2
练习 4.2 避免 0.1 + 0.2 的误差
用 Fraction 表示 0.1 和 0.2(建议用字符串 "0.1"、"0.2"),相加后打印分数形式,再转成 float 打印,确认得到 0.3。
参考:
from fractions import Fraction
a = Fraction("0.1")
b = Fraction("0.2")
c = a + b
print(c) # 3/10
print(float(c)) # 0.3
练习 4.3 from_float 与 from_decimal
- 用
Fraction.from_float(0.1)得到分数,打印该分数(会看到分子分母很大)。 - 用
Decimal("0.1")再Fraction.from_decimal(...)得到分数,打印,应得到 1/10。
参考:
from fractions import Fraction
from decimal import Decimal
print(Fraction.from_float(0.1)) # 一长串分数 3602879701896397/36028797018963968
d = Decimal("0.1")
print(Fraction.from_decimal(d)) # 1/10
五、综合练习
练习 5.1 选择类型
下面场景分别适合用 int / float / Decimal / Fraction 中的哪一种?简要说明理由。
- 记录年龄
- 商品单价与总价(要精确到分)
- 计算 1/3 + 1/6(要精确结果)
- 科学计算中的近似值
参考答案:
- int;2. Decimal;3. Fraction;4. float。
练习 5.2 一段完整代码
要求:
- 用 整数 读入两个数(或直接赋值),计算并打印整除商和余数。
- 用 Decimal 读入两个小数(字符串形式),计算和并打印(保证 0.1+0.2=0.3)。
- 用 Fraction 计算 1/4 + 1/4,打印分数结果和浮点结果。
写在一份代码里,并运行通过。
参考:
# 整数
a, b = 17, 5
print("整除:", a // b, "余数:", a % b) # 整除: 3 余数: 2
# Decimal
from decimal import Decimal
x = Decimal("0.1")
y = Decimal("0.2")
print("Decimal 和:", x + y) # Decimal 和: 0.3
# Fraction
from fractions import Fraction
f = Fraction(1, 4) + Fraction(1, 4)
print("Fraction:", f, "float:", float(f)) # Fraction: 1/2 float: 0.5