Я пытаюсь умножить входное значение * 5, возведенное в степень входного значения. Я попробовал это:
def multiply(n):
return 5 ** len(str(n)) * n
Я попробовал (n = -2), но вместо -10, что является правильным ответом, мне дали -50. Почему это не выводит правильные числа, если n отрицательно?
Извините, я нуб, поэтому я просто использовал то, что уже знал, чтобы написать это. Это также работает, если (n = 0)
Кроме того, это работает, если n = положительные числа, поэтому, если (n = 10), то на выходе будет 250, и это правильно.
Вы не «возводите в степень входных данных», вы возводите в степень длины входных данных. Таким образом, ввод 2
возводится в степень 1, поскольку строка "1"
содержит один символ, а ввод -2
возводится в степень 2, поскольку строка "-2"
содержит два символа.
Я думаю, может быть, вы хотите использовать абсолютное значение, так что len(str(abs(n)))
? Но сложно сказать наверняка, потому что ваше описание того, что вы хотите, расплывчато.
Это сработало! Исходный вопрос звучит так: вам нужно умножить каждое число на 5, возведенное в число цифр каждого числа.
Можете ли вы перенести это в ответ?
Этот вопрос, вероятно, не требует формального ответа, потому что, по сути, это было просто ваше непонимание того, как len()
работает со строкой отрицательного числа. Недоразумения и опечатки, как правило, не требуют формальных ответов.
Я просто предложил это, чтобы отметить как полезное. В любом случае спасибо за это.
Я как бы хочу предложить int( log10( abs( n ) ) )+1
как «силу». Я полагаю, что n=0 может быть проблемой.
-2 имеет длину 2 при преобразовании в строку, поскольку учитывается отрицательный знак. Итак, расчет 5 ** 2 * -2 = -50
.
Вы хотите игнорировать отрицательный знак при подсчете цифр. Вы можете попробовать len(str(abs(n)))
, который проигнорирует отрицательный знак и даст правильный ответ.
-2
, при преобразовании в строку с помощью str
, становится "-2"
. Это строка длиной 2
, поскольку в строку включен отрицательный знак. Вы хотите посчитать цифры без отрицательного знака, чтобы -2
имела длину 1
.
str(abs(n))
избавляется от знака минус перед преобразованием в строку. Вы также можете избавиться от него после преобразования с помощью str(n).strip('-')
и получить тот же ответ.
вы напрямую проверяете длину ввода, преобразуя его в строку:
>>> n = -2
>>> str(n)
'-2' # String with length of two -> '-' and '2' (string 2)
>>> len(str(n))
2
Возможно, вы можете попробовать это (не уверен, хорошо это или плохо, но будет работать так, как вы ожидали):
# The dirty way..
def multiply(num: int):
# Initialize a variable to keep track of length
length = 0
# Convert the input to string and iterate over it
for n in str(num):
# If the current character is int, increment the length variable
try:
if isinstance(int(n), int):
length += 1
# Above code will raise error for '-', catch here
except ValueError:
pass
return 5 ** length * num
# Try with the input -2 again
print(multiply(-2))
def Multiple(n): return 5 ** len(str(abs(n))) * n Вместо этого я попробовал это, и это сработало. В любом случае спасибо за помощь, учтите это на случай будущих проблем.
хмм.. забыл про abs()
. это (abs()
) более прямой путь. >.< извините.
Не беспокойтесь об этом, я тоже новичок в этом. У меня есть еще один вопрос, поэтому, если бы вы могли мне помочь с ним, было бы здорово!
Я буду рад помочь. ^^
Почему ты используешь
len(str(n))
в качестве силы? Это не имеет смысла. Отрицательные числа будут на один символ длиннее из-за знака минус.