我在创建运行时间计算器时遇到函数使用问题

0 投票
1 回答
1753 浏览
提问于 2025-04-26 12:05

这是我现在的代码:

  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(":")]

撰写回答