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

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


有只小跳蛙
浏览 213回答 3
3回答

慕神8447489

您需要return在函数中添加一条语句来捕获输出:def compute_hours(hrs):    try:        float(hrs)    except:        hrs = -1    finally:        return hrsnew_hrs = compute_hours(hrs)new_hrs 然后将存储来自 compute_hours

PIPIONE

您的函数缺少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_userhours = get_hours_from_user()while hours == -1:    print('invalid value for hours')    hours = get_hours_from_user()您在底部调用compute_pay使用一些变量rte,该变量在原始代码中的任何地方都不存在,我在此处为其添加一个常量:RATE = 8.0pay = compute_pay(hours, RATE)print('Your pay is:', pay)

梵蒂冈之花

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: ")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python