我正在构建一个非常简单的代码(我是一个初学者,只是了解python的基础知识),它通过将费率乘以小时(均由用户输入)来计算工资。
我已经成功地一次又一次地复制和粘贴相同的代码(输出按预期运行)。我试图通过将代码放在函数上以简化脚本的方式来减少工作量。但是,当我这样做时,一切似乎都变得艰难了。请求并接收输入,但是当确定错误并浮点数字输入的函数应该运行时,不会运行。
#computation of final pay
def compute_pay(hrs,rte):
pay = hrs*rte
print(pay)
#computation of hours; it's pretty much the same for rate; only variables #change
hrs = input("Enter Hours: ")
def compute_hours(hrs):
try:
float(hrs)
except:
hrs = -1
compute_hours(hrs)
if hrs == -1:
print(error_m)
while hrs == -1:
compute_hours(hrs)
if hrs == -1:
print(error_m)
#end
compute_pay(hrs,rte)
我期望计算实际工资,但是我遇到了类型错误,因为在#end中,字符串之间是相乘的,而不是变量'hrs'和'rte'的数值。发生这种情况的原因不是因为我没有建立变量的类型,而是因为包含变量的函数没有运行。
答案 0 :(得分:2)
您需要在函数中添加return
语句以捕获输出:
def compute_hours(hrs):
try:
float(hrs)
except:
hrs = -1
finally:
return hrs
new_hrs = compute_hours(hrs)
new_hrs
然后将存储来自compute_hours
的输出
答案 1 :(得分:0)
float(hrs)
不会更改hrs
的值。它将值转换为浮点数,但对该值不执行任何操作。您需要返回该值。
def compute_hours(hrs):
try:
return float(hrs)
except:
return -1
然后您像这样使用它:
hrs = compute_hours(hrs)
但是,如果用户输入了一个小时的无效数字,则您永远不会要求输入新值,因此循环将是无限的。您需要再次提示。
while hrs == -1:
compute_hours(hrs)
if hrs == -1:
print(error_m)
hrs = input("Enter hourse: ")
答案 2 :(得分:0)
您的函数缺少return
语句,因此您不会从compute_hours
获得任何有用的信息。似乎您想要的是一个函数,要求用户花费数小时,如果用户给您的值不正确,则返回-1。
def get_hours_from_user():
try:
return float(input('Enter Hours: '))
except ValueError:
return -1
计算薪水更有意义,因为它需要花费数小时和费率并返回薪水(无需缩写,这只会使阅读更困难)。
def compute_pay(hours, rate):
return hours * rate
您可以简化很多错误检查,尽管最好将此逻辑放在get_hours_from_user
内
hours = get_hours_from_user()
while hours == -1:
print('invalid value for hours')
hours = get_hours_from_user()
您对compute_pay
的底部调用使用了一些变量rte
,该变量在您的原始代码中不存在,我在这里为它添加了一个常量:
RATE = 8.0
pay = compute_pay(hours, RATE)
print('Your pay is:', pay)