即使调用它们,我的函数也没有执行

时间:2018-12-29 01:09:56

标签: python python-3.x

我正在构建一个非常简单的代码(我是一个初学者,只是了解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'的数值。发生这种情况的原因不是因为我没有建立变量的类型,而是因为包含变量的函数没有运行。

3 个答案:

答案 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)