Использование функции для упрощения c0de? - PullRequest
0 голосов
/ 11 сентября 2018

Упростите следующий код с помощью функции.

salary1 = float(input("Enter previous salary"))
benefits1 = float(input("Enter previous benefits"))
bonus1 = float(input("Enter previous bonus"))
salary2 = float(input("Enter new salary"))
benefits2 = float(input("Enter new benefits"))
bonus2 = float(input("Enter new bonus"))
if salary2 > salary1:
    salaryincrease = salary2 - salary1
else:
    salaryincrease = 0
if benefits2 > benefits1:
    benefitsincrease = benefits2 - benefits1
else:
    benefitsincrease = 0
if bonus2 > bonus1:
    bonusincrease = bonus2 - bonus1
else:
    bonusincrease = 0

из https://guidebookstgc.snagfilms.com/9151_ComputerScience.pdf стр. 102

Честно говоря, я не знаю, что я 'Я должен был это сделать.

Может кто-то указать на очевидное, на первый взгляд?

Ответы [ 5 ]

0 голосов
/ 11 сентября 2018

Цель этого упражнения - искать повторяющиеся шаблоны и абстрагировать их в своей собственной функции.

Проверьте этот блок:

if salary2 > salary1:
    salaryincrease = salary2 - salary1
else:
    salaryincrease = 0

, этот блок:

if benefits2 > benefits1:
    benefitsincrease = benefits2 - benefits1
else:
    benefitsincrease = 0

и этот блок:

if bonus2 > bonus1:
    bonusincrease = bonus2 - bonus1
else:
    bonusincrease = 0

Как вы думаете, естьшаблон, который можно абстрагировать в функции?

0 голосов
/ 11 сентября 2018

Вот пример написания функции для обработки вашего пользовательского ввода. Фактически, он обрабатывает их все в одной функции.

def get_floats(*names):
    return (float(input("Enter %s: " % name)) for name in names)

salary1, benefits1, bonus1, salary2, benefits2, bonus2 = get_floats(
     "previous salary", "previous benefits", "previous bonus",
     "new salary", "new benefits", "new bonus")

Здесь мы вынули все одинаковые части между исходными строками (включая части строки приглашения!) И поместили их в новую функцию. Здесь очень мало избыточности.

0 голосов
/ 11 сентября 2018

Это похоже на домашнее задание, но в качестве примера:

def determine_increase(num1, num2):
    if num2 > num1:
        return num2 - num1
    else:
        return 0

Тогда вы бы назвали его следующим образом:

salaryincrease = determine_increase(salary1, salary2)
bonusincrease  = determine_increase(bonus1, bonus2)
benefitsincrease = determine_increase(benefits1, benefits2)

Это принимает повторяющуюся логику и уплотняетэто одна функция, поэтому вам нужно изменить ее только в одном месте, если, скажем, вы хотите увеличить процент, вы бы изменили только одну функцию вместо всех 3 экземпляров в исходном коде.

0 голосов
/ 11 сентября 2018

Вы также можете упростить логику, используя предопределенные функции и заменяя их условиями:

salaryincrease = max(0, salary2 - salary1)
bonusincrease  = max(0, bonus2  - bonus1)  
benefitsincrease = max(0, benefits2-benefits1) 

Это допустимая замена для ваших if - max() - встроенная функция: max (...)

Это не так явно, как ответ @hgoscenski, но было бы правильным упрощением с использованием функций.

0 голосов
/ 11 сентября 2018

Вам нужно искать шаблоны. Вещи, которые повторяются в вашем коде последовательно. Не смотрите на конкретные имена переменных, а на их относительное положение в коде и то, как они используются.

Одна из областей, на которую я бы просто обратил внимание, это операторы if - else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...