Python «Ошибка значения: не удалось преобразовать строку в float: %»

#python #string #function #valueerror

#python #строка #функция #ошибка значения

Вопрос:

У меня есть набор инструкций:

Создайте вызываемую функцию format_change , которая принимает строку, подобную строке в столбце Изменения, и выполняет следующее:

  • Если последний символ является % знаком, удалите его
  • преобразуйте строку в число с плавающей запятой
  • если это число с плавающей запятой положительное, умножьте его на 100
  • возвращает результирующее значение с плавающей запятой

Это мой код:

 def format_change(string):
    if string[-1] == "%":
        string = string[-1]

    str_as_float = float(string)

    if str_as_float > 0:
        str_as_float = str_as_float * 100

return str_as_float
  

тем не менее, когда я ввожу функцию

 format_change(0.45%)
  

Он возвращает вывод:

Ошибка значения: не удалось преобразовать строку в float: ‘%’

Что я могу сделать, чтобы преобразовать его правильно?

Комментарии:

1. Проверьте, как работает нарезка здесь . Также вы могли бы использовать str.replace('%','') для удаления % знака.

2. Это еще один хороший способ! Я обязательно использую это в следующий раз. это сэкономило бы мне драгоценное время. Большое спасибо!

Ответ №1:

Вы присваиваете строку '%' своей переменной, но вам нужно все, кроме этого символа. Измените начало вашей функции на:

 def format_change(string):
    if string[-1] == "%":
        string = string[:-1]  # added ':'
  

Ответ №2:

Попробуйте это:

 def format_change(string):
    if string[-1] == "%":
        string = string[:-1]
    
    str_as_float = float(string)

    if str_as_float > 0:
        str_as_float = str_as_float * 100

    return str_as_float


print(format_change('0.45%'))
  

Ответ №3:

Если вы ищете однострочную строку, вы можете использовать это:

 def format_change(string):
    return float(string.replace('%',''))*100 if float(string.replace('%',''))>0 else float(string.replace('%',''))
  
 format_change("-50%")
# -50.0
format_change("50%")
# 5000.0
  

Ответ №4:

Попробуйте это:

Решение 1:

 def format_change(string):
    if string.endswith("%"):
        string = string[0:-1]

    str_as_float = float(string)
    if str_as_float > 0:
        str_as_float = str_as_float * 100
    return str_as_float

print(format_change('-0.45%'))
  

Решение 2:

 def format_change(string):
   if string.endswith('%'):
       return abs(float(string[0:-1]))*100

print(format_change('-0.45%'))
  

Решение 3:

 def format_change(string):
    return abs(float(string.split('%')[0]))*100

print(format_change('-0.45%')
  

Вывод:

 45.0