Python Компактность кода
Начал изучать язык. В книжке имеется такая задача: Написать программу которая меняет каждую цифру на "дополнение до 9" Пример: Цифра 0 меняется на 9, Цифра 1 меняется на 8, цифра 2 меняется на 7.... Цифра 8 меняется на 1, Цифра 9 на 0. Я написал код, но мне он кажется слишком громоздким.
x=int(input("Введите целое число: "))
y=0
if x==0:
y=x+9
print("До числа 9 нехватает еще", (y))
if x==1:
y=x+7
print("До числа 9 нехватает еще", (y))
if x==2:
y=x+5
print("До числа 9 нехватает еще", (y))
if x==3:
y=x+3
print("До числа 9 нехватает еще", (y))
if x==4:
y=x+1
print("До числа 9 нехватает еще", (y))
if x==5:
y=x-1
print("До числа 9 нехватает еще", (y))
if x==6:
y=x-3
print("До числа 9 нехватает еще", (y))
if x==7:
y=x-5
print("До числа 9 нехватает еще", (y))
if x==8:
y=x-7
print("До числа 9 нехватает еще", (y))
if x==9:
y=x-0
print("До числа 9 нехватает еще", (y))
Подскажите пожалуйста вариант как можно сделать его компактнее. Я конечно попытаюсь сделать это сам например через while или elif. Но хотелось бы увидеть пример от более продвинутых пользователей тоже Спасибо!=*
Ответы (3 шт):
number = int(input("Введите целое число:"))
print(f'Осталось {9 - number} до 9!')
Можно добавить исключение для чисел больше девяти и так далее. Просто пример того, как легко избавиться от условий и сократить код в несколько раз.
Коллеги выше уже подсказали другое решение, но думаю рационально будет его записать сюда и добавить дополнительные объяснения.
print(f'Осталось {9 - int(input("Введите целое число:")) } до 9!')
Теперь будем двигаться "от сложному к простому". Для начало разберёмся, как работают f-строки (для справки: данный синтаксис появился в версии Python 3.6). Они позволяют вставить код прямо в строку, что на самом деле очень удобно. Кстати, также он ускоряет код! Проверьте на досуге, если интересно.
Как это работает? Вы просто пишете строку в формате f'Какая-то функция с аргументами 3 и 5: {any_func(3, 5)}'. Преобразование типов при этом происходит автоматически.
Далее мы просто вызываем в фигурных скобках функцию input(), результат который преобразуем в целочисленное значение, а потом находим разность 9 и полученного значения.
Надеюсь, смог максимально понятно всё объяснить. Удачи!
Целое число может состоять из нескольких цифр.
x = input("Введите целое число: ")
# меняем каждую цифру на "дополнение до 9"
result = 10 ** len(x) - 1 - int(x)
print(result)
Вывод:
Введите целое число: 3423455
6576544
Первый вариант работает некорректно с отрицательными числами. Второй вариант уже работает корректно. Также, можно подать любую строку на вход, будут заменяться только цифры:
x = input("Введите целое число: ")
res = "".join(map(lambda i: str(9 - int(i)) if i.isdigit() else i, x))
print(res)
Вывод:
Введите целое число: -34234234
-65765765