文章目录

  • 参考
  • 描述
  • 字符串的乘法
  • 除法运算符
  • 结果值
  • /
  • //
  • 夺取控制权
  • 向上圆整
  • 向下圆整
  • 四舍五入
  • 取模运算符
  • 数据类型
  • 正负


参考

项目

描述

搜索引擎

BIng

描述

项目

描述

Python

Python 3.10.6

字符串的乘法

在 Python 中,我们可以通过对字符串进行乘法运算来获得包含多段重复子字符串的字符串。对此,请参考如下示例:

print('RedHEart ' * 3)

执行结果

RedHEart RedHEart RedHEart

那么问题来了,进行乘法运算符的子字符串完全由数字组成,那么会发生隐式类型转换(在某些编程语言中,解释器或编译器会对不合理的表达式中的操作数进行转换,以使得该表达式可被正常执行,如 ‘26’ / ‘2’ 将被解释为 26 / 2 )吗?

拭目以待

print('1' * 1)

执行结果

1

字母串类型的 1 似乎被转换为了数值型的 1,但我们还应该多尝试几次。记住,不要被事物的表面现象所迷惑,让我们换个角度再试一次。

print('2' * 3)

执行结果

222

执行结果是 222 而不是 6 。看来 Python 在处理这类表达式时并不会过多的干涉操作数的数据类型。

除法运算符

结果值

/

Python 中,除法运算符无论遇到的操作数中是否包含浮点数,得到的结果都将为浮点数(除数不可为零,Python 将为此抛出错误)。对此,请参考如下示例:

print(36 / 6)
print(36.0 / 6.0)
print(36.0 / 6)
print(4 / 3)

执行结果

6.0
6.0
6.0
1.3333333333333333

C++ 中,若除法运算符中的操作数中存在浮点数,则结果值的数据类型为浮点型。若除法中仅存在整数类型,则结果值的数据类型为整型。

//

使用 // 时,无论原结果值有多大都将被转换为整数。对此,请参考如下示例:

print(6 // 4)
print(9 // 2)
print(1 // 2)

执行结果

1
4
0

看到结果后,你可能会认为原结果值转换为整数的转换规则是将原结果值中的小数部分直接去除,但这仅在结果值为非负整数的情况下成立的。💫要知道,任何真理都是有适用范围的💫。

举个栗子

print(-3 // 2)
print(-1 // 2)

执行结果

-2
-1

所以,正确的转换规则应为:

取与原结果值相邻的整数中较小的整数作为除法运算的实际结果值,这中取整方式通常被成为 向下圆整

夺取控制权

在某些时候,我们可能希望使用除法运算符后,得到的结果为整数。并且该整数是通过我们指定的规则来将原结果值进行转换的(由浮点型数值转换为整数类数值)。

向上圆整

使用 Python 提供的标准库 Math ,我们可以实现将浮点数向上圆整的效果。对此,请参考如下示例:

# 导入 Math 模块
import math

# 实现浮点数的向上圆整
print(math.ceil(9.6))
print(math.ceil(4.3))
print(math.ceil(0.16))
print(math.ceil(4 / 3))

执行结果

10
5
1
2
向下圆整

向下圆整除了使用 Python 提供的除法运算符 // 实现,还可以通过标准库 math 提供的 floor() 函数实现。对此,请参考如下示例:

import math

print(math.floor(9.6))
print(math.floor(4.3))
print(math.floor(0.16))
print(math.floor(4 / 3))

执行结果

9
4
0
1
四舍五入

实现浮点数的四舍五入,我们可以通过 Python 提供的内置函数 round() 来实现。

举个栗子

import math

print(round(9.6))
print(round(4.3))
print(round(0.16))
print(round(4 / 3))

`执行效果

10
4
0
1

注:

需要注意的是,对于浮点数的四舍五入,Python 的标准库 Math 并没有提供具体的实现,这意味着使用 math.round() ,Python 将抛出错误(该函数并不存在)。

取模运算符

数据类型

取模运算符较为特殊,结果值的数据类型不一定为浮点型,这取决于取模运算符的操作数的数据类型。若操作数中含有浮点型,则结果值的数据类型为浮点型。若操作数均为整型,则结果值的数据类型为整型。对此,请参考如下示例:

print(3 % 2)
print(3.0 % 2.0)
print(3.0 % 2)

执行结果

1
1.0
1.0

注:

  1. 与 C++ 不同的是,在 Python 中,取模运算符的操作数允许为浮点数。在 C++ 中,若取模运算符中存在数据类型为浮点数的操作数,C++ 将抛出错误。
  2. 在取模运算符,位于取模运算符右侧的操作数不可为零。

正负

取模运算符可以允许出现负数,但结果值的正负则由操作数为负数的数值所处的位置所决定。若存在负数操作数位于取模运算符的右侧,则结果值为负。对此,请参考如下示例:

print(-3 % 2)
print(-3 % -2)
print(3 % -2)

执行结果

1
-1
-1

注:

  1. 与 Python 不同的是,C++ 中取模表达式的结果值由位于左侧的操作数所决定,若左侧存在负数操作数(零除外。在 C++ 中,+0 被认为与 -0 等价),则结果值的将为负数。
  2. 取模运算符与除法运算符的优先级是相同的。