Умножьте входные данные на 5, увеличив количество цифр каждого числа, но мой код нуждается в переработке

Я пытаюсь умножить входное значение * 5, возведенное в степень входного значения. Я попробовал это:

def multiply(n):
return 5 ** len(str(n)) * n

Я попробовал (n = -2), но вместо -10, что является правильным ответом, мне дали -50. Почему это не выводит правильные числа, если n отрицательно?

Почему ты используешь len(str(n)) в качестве силы? Это не имеет смысла. Отрицательные числа будут на один символ длиннее из-за знака минус.

John Gordon 30.08.2024 19:14

Извините, я нуб, поэтому я просто использовал то, что уже знал, чтобы написать это. Это также работает, если (n = 0)

OrigamiDarknessDragon 30.08.2024 19:18

Кроме того, это работает, если n = положительные числа, поэтому, если (n = 10), то на выходе будет 250, и это правильно.

OrigamiDarknessDragon 30.08.2024 19:19

Вы не «возводите в степень входных данных», вы возводите в степень длины входных данных. Таким образом, ввод 2 возводится в степень 1, поскольку строка "1" содержит один символ, а ввод -2 возводится в степень 2, поскольку строка "-2" содержит два символа.

John Gordon 30.08.2024 19:22

Я думаю, может быть, вы хотите использовать абсолютное значение, так что len(str(abs(n)))? Но сложно сказать наверняка, потому что ваше описание того, что вы хотите, расплывчато.

John Gordon 30.08.2024 19:23

Это сработало! Исходный вопрос звучит так: вам нужно умножить каждое число на 5, возведенное в число цифр каждого числа.

OrigamiDarknessDragon 30.08.2024 19:23

Можете ли вы перенести это в ответ?

OrigamiDarknessDragon 30.08.2024 19:29

Этот вопрос, вероятно, не требует формального ответа, потому что, по сути, это было просто ваше непонимание того, как len() работает со строкой отрицательного числа. Недоразумения и опечатки, как правило, не требуют формальных ответов.

John Gordon 30.08.2024 19:34

Я просто предложил это, чтобы отметить как полезное. В любом случае спасибо за это.

OrigamiDarknessDragon 30.08.2024 19:41

Я как бы хочу предложить int( log10( abs( n ) ) )+1 как «силу». Я полагаю, что n=0 может быть проблемой.

infixed 30.08.2024 20:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
10
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

-2 имеет длину 2 при преобразовании в строку, поскольку учитывается отрицательный знак. Итак, расчет 5 ** 2 * -2 = -50.

Вы хотите игнорировать отрицательный знак при подсчете цифр. Вы можете попробовать len(str(abs(n))), который проигнорирует отрицательный знак и даст правильный ответ.

-2, при преобразовании в строку с помощью str, становится "-2". Это строка длиной 2, поскольку в строку включен отрицательный знак. Вы хотите посчитать цифры без отрицательного знака, чтобы -2 имела длину 1.
Momo 30.08.2024 19:18
str(abs(n)) избавляется от знака минус перед преобразованием в строку. Вы также можете избавиться от него после преобразования с помощью str(n).strip('-') и получить тот же ответ.
Mark Ransom 30.08.2024 19:52
Ответ принят как подходящий

вы напрямую проверяете длину ввода, преобразуя его в строку:

>>> 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 Вместо этого я попробовал это, и это сработало. В любом случае спасибо за помощь, учтите это на случай будущих проблем.

OrigamiDarknessDragon 30.08.2024 19:43

хмм.. забыл про abs(). это (abs()) более прямой путь. >.< извините.

Cheap Nightbot 30.08.2024 19:50

Не беспокойтесь об этом, я тоже новичок в этом. У меня есть еще один вопрос, поэтому, если бы вы могли мне помочь с ним, было бы здорово!

OrigamiDarknessDragon 30.08.2024 19:56

Я буду рад помочь. ^^

Cheap Nightbot 31.08.2024 13:13

Другие вопросы по теме