06.整数与浮点数、decimal、Fraction 练习题

整数与浮点数、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 整除与取余的应用

  1. 写出判断奇数/偶数的表达式:给定变量 n,若为偶数则某表达式为 True,否则为 False
  2. 变量 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 类型转换

  1. int(3.9)int(-3.9) 分别等于多少?为什么不是四舍五入?
  2. int() 把字符串 "100" 转成整数,再和 50 相加,写出完整一行代码并写出结果。

参考:

print(int(3.9))    # 3,截断小数
print(int(-3.9))   # -3
print(int("100") + 50)   # 150

二、浮点数(float)

练习 2.1 写法和运算

  1. 用科学计数法表示:1500.0 和 0.002,分别写成 XeY 的形式并打印验证。
  2. 计算 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 基本使用

  1. Decimal("0.1")Decimal("0.2") 做加法,打印结果,并判断是否等于 Decimal("0.3")
  2. 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 创建与属性

  1. Fraction(3, 6) 创建一个分数,打印它;再打印其 .numerator.denominator,观察是否已约分。
  2. 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

  1. Fraction.from_float(0.1) 得到分数,打印该分数(会看到分子分母很大)。
  2. 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. 记录年龄
  2. 商品单价与总价(要精确到分)
  3. 计算 1/3 + 1/6(要精确结果)
  4. 科学计算中的近似值

参考答案:

  1. 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

发表评论