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