我在创建运行时间计算器时遇到函数使用问题
这是我现在的代码:
def get_input():
pace = str(input("Enter pace [mm:ss]: "))
distance = float(input("Enter distance [miles]: "))
mm, ss = int(pace.split(":")[0]), int(pace.split(":")[1])
return(pace, distance, mm, ss)
def calculate_time(pace, distance, mm, ss):
print(pace)
print(mm)
print(ss)
new_sec = mm * 60
full_sec = ss + new_sec
print(full_sec)
print(distance)
total_time_sec = full_sec * distance
print(total_time_sec)
seconds_per_mile = total_time_sec / 60
hours = int(seconds_per_mile // 60)
print(seconds_per_mile)
print(hours)
minutes = int((total_time_sec - (hours * 3600))//60)
print(minutes)
seconds = int(total_time_sec - ((hours * 3600) + (minutes * 60)))
print(seconds)
print(pace, full_sec, distance)
return(seconds, minutes, hours)
def display_time(pace, distance, mm, ss, seconds, minutes, hours):
if seconds < 10:
print(hours,":",minutes,":0",seconds, sep="")
else:
print(hours,":",minutes,":",seconds, sep="")
return()
def main():
pace, distance, mm, ss = get_input()
new_sec, full_sec, total_time_sec, seconds_per_mile, hours, minutes, seconds = calculate_time(pace, distance, mm, ss)
display_time(pace, distance, mm, ss, seconds, minutes, hours)
main()
我对使用函数不是特别在行。我觉得我也不太明白怎么返回东西之类的。
我遇到的错误是:
Traceback (most recent call last):
File "C:/Python33/homework 3 test.py", line 36, in <module>
main()
File "C:/Python33/homework 3 test.py", line 34, in main
new_sec, full_sec, total_time_sec, seconds_per_mile, hours, minutes, seconds = calculate_time(pace, distance, mm, ss)
ValueError: need more than 3 values to unpack
这个函数的目的是让用户输入他们的配速和距离,然后输出跑完这个距离所需的时间。
举个例子:
Enter pace [mm:ss]: 8:15
Enter distance [miles]: 26.2
3:36:09
如果有人能解释一下我哪里出错了,我会非常感激。我并不一定想要知道怎么做到完美,但我确实遇到了很多困难,需要一点帮助。
1 个回答
1
你的代码有点难读(可以参考一下PEP-8(Python代码风格指南)),但你函数calculate_time()
有一个明显的问题,就是它做了
return(seconds, minutes, hours) # return a three-element tuple
而main()
试图把这个结果拆分成六个变量:
new_sec, full_sec, total_time_sec, seconds_per_mile, hours, minutes, seconds = calculate_time(pace, distance, mm, ss)
一些评论:
pace = str(input("Enter pace [mm:ss]: "))
mm, ss = int(pace.split(":")[0]), int(pace.split(":")[1])
代码有点复杂。其实input()
已经返回字符串了,而且这里有个很方便的Python特性叫做列表推导式,你可以用上:
pace = input("Enter pace [mm:ss]: ")
mm, ss = [int(item) for item in pace.split(":")]