Да, вы можете. Проблема, как указывает сообщение об ошибке, заключается в том, что h
и r
не существуют в точке, где вы вызываете функцию:
p = computepay(h,r)
Обратите внимание, что это отличается h
и r
из тех, что определены внутри функции! Прочтите scopes , если вас это смущает.
Решение состоит в том, чтобы опустить аргументы как в определении функции, так и на сайте вызова:
def computepay():
...
p = computepay()
Однако необходимо сделать так, чтобы эти переменные были аргументами. Это делает вашу функцию более универсальной, если она делает одну вещь (вычисление оплаты), а не две ортогональные вещи (запрос ввода, затем вычисление оплаты). Если вы передаете значения в качестве аргументов, функция не заботится о том, откуда они берутся, поэтому вызывающий код может прочитать их из файла или из GUI без необходимости изменения самой функции.
Это универсальность также делает функцию более пригодной для модульного тестирования, которое Python особенно хорошо поддерживает в форме doctests .
Если вы все еще овладеваете основами языка , вы не должны беспокоиться об этом. Я просто подумал, что упомяну это.