2013-11-01 2 views
3

Я пытался использовать Python, и я создал короткий метод:умножение двух аргументов в питоне

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

, запустив mul(2,"23"), я получаю этот выдающийся результат: 2323

Может кто-то объяснить, это?

+1

При добавлении кода Python к вопросу, пожалуйста, будьте осторожны с форматированием и отступом. –

+0

muliply int со строкой? шутки в сторону? –

+3

@ JohnJohn2 да, серьезно. Я не думаю, что в этом есть что-то не так. – aIKid

ответ

10

Поскольку вы умножая строку и целое вместе:

>>> print '23' * 2 
2323 

что эквивалентно '23' + '23'.

Сделайте mul(2, int('23')), чтобы превратить '23' в целое число или просто избавиться от кавычек, окружающих 23.

Кстати, такая функция уже существует в operator модуле:

operator.mul(2, 23) 
1

Это потому, что строки не автоматически преобразуются в целые числа. Вместо этого умножение на строку возвращает строку с несколькими копиями исходной строки.

Если вы хотите, чтобы преобразовать строку в целое число, вы должны сделать это явно:

int("23") 
3

Умножение строки не одни и те же вещи, как умножение чисел.

Строка умножение делает не неявно преобразовать в число, даже если строка может быть истолкована как таковые. Вместо этого, строка повторяется, по целому числу данной:

>>> 'foo' * 3 
'foofoofoo' 

Если ваш метод должен умножать числа, то убедитесь, что вы получите только цифры; используйте int() или float() для преобразования строк в номера сначала.

4

В вашей функции умножения сначала преобразуйте ввод в int или float, в зависимости от вашего требования.

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

Mulitplication ничего, кроме повторяющегося того. В вашем случае, если строка передается вашей функции, она становится «добавленной» много раз.

Кроме того, если оба входа являются строками, тогда он выдаст ошибку.

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

Так что безопаснее сначала их преобразовать, прежде чем умножать.

1

Оператор Python * может работать как с числами, так и последовательностями i.Е либо не умножать числа:

2*3 
6 

или в repeat sequences:

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.

Смежные вопросы