4

我试图使用 Python,我创建了一个简短的方法:

def mul(x,y):
    print(x*y)

通过运行mul(2,"23"),我得到了出色的输出:2323

有人可以解释一下吗?

4

6 回答 6

12

因为您将字符串和整数相乘:

>>> print '23' * 2
2323

这相当于'23' + '23'.

mul(2, int('23'))'23'成整数,或者只是去掉 . 周围的引号23

顺便说一句,operator模块中已经存在这样的功能:

operator.mul(2, 23)
于 2013-11-01T11:45:20.773 回答
5

在您的乘法函数中,首先根据您的要求将输入转换为 int 或 float。

def mul(x,y):
    print(int(x)*int(y))

乘法只不过是重复的加法。 在您的情况下,如果一个字符串被传递给您的函数,那么它会被“添加”很多次。

此外,如果两个输入都是字符串,那么它将引发错误。

TypeError: can't multiply sequence by non-int of type 'str'

因此,在相乘之前先转换它们是最安全的。

于 2013-11-01T11:48:14.337 回答
4

字符串的乘法与数字的乘法不同。

字符串乘法不会式转换为数字,即使字符串可以这样解释。相反,字符串被重复,由给定的整数:

>>> 'foo' * 3
'foofoofoo'

如果您的方法需要将数字相乘,请确保您只得到数字;使用int()orfloat()首先将字符串转换为数字。

于 2013-11-01T11:46:02.943 回答
1

这是因为字符串不会自动转换为整数。相反,与字符串相乘会返回一个包含多个原始字符串副本的字符串。

如果要将字符串转换为整数,则必须明确执行:

int("23")
于 2013-11-01T11:45:46.760 回答
1

在 Python 中,* 运算符可以对数字和序列进行操作,例如,可以将数字相乘:

2*3
6

重复序列

2*'3'       #string
'33'
[4,6]*2     #list
[4, 6, 4, 6]
(4,8)*2     #tuple
(4, 8, 4, 8)
#won't work with sets ([set type][2]) and dictionaries ([mapping type][3])

这是因为操作符执行的操作取决于操作数(对象),因为我们从未在 Python 中声明变量、参数或返回值的类型。

于 2013-11-01T12:55:49.880 回答
0

将条件、输入转换和数学放在一起

  • 更新 multiply() 函数以进行乘法或除法
  • 单个参数是带有 * 或 / 运算符参数的运算符
  • 默认运算符是“*”(乘)
  • 返回乘法或除法的结果
  • 如果运算符不是“*”或“/”,则返回“无效运算符”
于 2018-11-06T07:01:37.507 回答