Форматирование с плавающей запятой с использованием f-строки в условной инструкции при проверке, является ли пользовательский ввод целым - PullRequest
1 голос
/ 07 апреля 2020

Я работаю над программой, которая

  1. получает положительное целое число в качестве ввода
  2. умножает ввод на определенное число
  3. возвращает результат так что он имеет 2 десятичных знака

Вот как в настоящее время работает программа:

// Введите положительное целое число ...: 1

// [ Ожидаемый результат] Результат: 1.00

// [Фактический результат] ValueError: Неверный спецификатор формата

Кажется, проблема в том, что я форматирую f-строку при печати результата , Не могли бы вы проверить, что не так с синтаксисом?

rand_num = 1.0
value = int(input('Enter a positive integer...: '))
result = rand_num * value

print(f'Result: {result:.2f if value > 0 else "Why don't you check your input value again?"}')

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Вы можете не усложнять свой l oop следующим образом:

In [600]: if value > 0: 
     ...:     print(f'Result: {result:.2f}') 
     ...: else: 
     ...:     print("Why don't you check your input value again?") 
     ...:                                                                                                                                                                                                   
Result: 1.00
0 голосов
/ 07 апреля 2020

Есть две проблемы с частью 'f-строки' вашего кода:

  • Для вложенного выражения вам нужны дополнительные скобки
  • Вы не можете экранировать символ кавычки (в разделе Почему вы не проверяете ...) внутри f-строки

Я добавил скобки и переместил сообщение в отдельную переменную, теперь оно работает:

rand_num = 1.0
value = int(input('Enter a positive integer...: '))
result = rand_num * value

input_check_msg = 'Why don\'t you check your input value again?'    
print(f"Result: {result:{'.2f' if value > 0 else input_check_msg}}")
0 голосов
/ 07 апреля 2020

Не помещайте if/else внутрь f-string, просто

print(f'Result: {result:.2f}' if value > 0 else "Why don't you check your input value again?")
...