【发布时间】:2020-04-29 17:45:40
【问题描述】:
最近,我在自学时遇到了一个初学者的问题,该问题要求我编写一个程序来计算给定输入的工作时间和小时费率的工资。对于超过 40 小时的任何时间,都应支付一个半时间。我成功地做到了这一点,但由于某种原因,这对我来说似乎很奇怪。以下代码完美运行,我得到了 100% 的作业:
def computepay(h,r):
try:
hrsfloat = float(h)
except:
print("Error: 'Hours' must be a number")
quit()
try:
ratefloat = float(r)
except:
print("Error: 'hourly rate in dollars' must be a number")
quit()
if hrsfloat <= 40:
return(hrsfloat*ratefloat)
else:
x=hrsfloat-40
return((1.5 * x + 40) * ratefloat)
h = input("Enter Hours:")
r = input("Enter hourly rate in dollars:")
p = computepay(h,r)
print('Pay', p)
但由于某种原因,我宁愿把
h = input("Enter Hours:")
r = input("Enter hourly rate in dollars:")
在computepay的定义内,采用以下方式:
def computepay(h,r):
h = input("Enter Hours:")
r = input("Enter hourly rate in dollars:")
try:
hrsfloat = float(h)
except:
print("Error: 'Hours' must be a number")
quit()
try:
ratefloat = float(r)
except:
print("Error: 'hourly rate in dollars' must be a number")
quit()
if hrsfloat <= 40:
return(hrsfloat*ratefloat)
else:
x=hrsfloat-40
return((1.5 * x + 40) * ratefloat)
p = computepay(h,r)
print('Pay', p)
但这会返回错误:
Traceback(最近一次调用最后一次): 文件“C:[redacted]”,第 20 行,在 p = 计算支付(h,r) NameError: 名称“h”未定义
那么,有没有办法把computepay写成这样自包含呢?我不知道为什么我觉得有必要这样做,但我真的这样做。
【问题讨论】:
-
如果您要打印
p,那肯定是来自某个地方。所以当然,你可以把它放在你的函数中,但是它怎么会回来呢? (您可以将其包含在您的退货中,但这会变得混乱)。因此,实际上您可能想要的是def printPayFromInput(): ...,它包含您当前在全球范围内拥有的行。这样它仍然很整洁,而且您也不会让computepay负责做超出它需要做的事情。 -
这没有什么问题,如果您永远不需要调用
compute_pay来获取从其他地方获取的值。如果您确实从函数内部获取输入,那么compute_pay没有理由接受任何参数。 -
简单去掉参数
h, r?在函数和对它的调用中。 -
@Mike'Pomax'Kamermans 哦,好主意!谢谢!
-
@chepner,是的,我现在明白了,谢谢!