Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的函数即使在调用它们时也没有执行_Python_Python 3.x - Fatal编程技术网

Python 我的函数即使在调用它们时也没有执行

Python 我的函数即使在调用它们时也没有执行,python,python-3.x,Python,Python 3.x,我正在构建一个非常简单的代码(我是一个初学者,刚刚掌握python的基本知识),它通过将费率乘以小时(两者都是用户输入的)来计算工资 我已经成功地一次又一次地复制和粘贴相同的代码(输出按预期运行)。我试图通过将代码置于函数之上来简化脚本,从而减少工作量。然而,当我这么做的时候,一切似乎都在走下坡路。请求并接收输入,但当确定错误和浮动数字输入的函数应该运行时,它不会运行 #computation of final pay def compute_pay(hrs,rte): pay = h

我正在构建一个非常简单的代码(我是一个初学者,刚刚掌握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)

我期望计算实际工资,但我得到了一个类型错误,因为,​最后,乘法是在字符串之间进行的,而不是变量“hrs”和“rte”的数值。发生这种情况不是因为我没有建立变量的类型,而是因为包含它的函数没有运行。

您需要向函数添加
return
语句以捕获输出:

def compute_hours(hrs):
    try:
        float(hrs)
    except:
        hrs = -1
    finally:
        return hrs

new_hrs = compute_hours(hrs)
new\u hrs
随后将存储
compute\u hours
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: ")

您的函数缺少
return
语句,因此您无法从
compute\u hours
中获得任何有用的信息。看起来您想要的是一个函数,它会询问用户几个小时,如果用户给出的值不正确,则返回-1

def get_hours_from_user():
    try:
        return float(input('Enter Hours: '))
    except ValueError:
        return -1
Compute pay作为一个花费小时和费率并返回工资的函数更有意义(无需缩写,这只会使它更难阅读)

您可以大大简化错误检查,不过最好将此逻辑放在
get\u hours\u from\u user

hours = get_hours_from_user()
while hours == -1:
    print('invalid value for hours')
    hours = get_hours_from_user()
您在底部对
compute\u pay
的调用使用了一些变量
rte
,在原始代码中不存在这些变量,我在这里为其添加了一个常量:

RATE = 8.0
pay = compute_pay(hours, RATE)
print('Your pay is:', pay)

您的函数正在执行,它们只是没有做任何有用的事情。
while
循环从不要求新值
hrs
。它给我一个错误:“code”名称“compute\u hours”未定义
RATE = 8.0
pay = compute_pay(hours, RATE)
print('Your pay is:', pay)