变量没有收到金额?蟒蛇

时间:2015-03-30 17:26:24

标签: python module return

当我运行程序时,我声明的变量都没有得到它们的值。我确实记得使用return语句,但它似乎没有做任何事情。

def main():
    time_Amount = getTime()

    seconds = getSeconds(time_Amount)
    minutes = getMinutes(seconds)
    hours = getHours(minutes)
    days = getDays(hours)

    printBreakDown(days, hours, minutes, seconds)

def getTime():
    time_Amount = int(input("Enter time in seconds: "))
    while (time_Amount == 0):
        seconds = int(input("Enter a non-zero amount of seconds: "))
    return time_Amount

def getSeconds(time_Amount):
    seconds = time_Amount % 60
    return seconds
def getMinutes(seconds):
    minutes = seconds % 60
    return minutes
def getHours(minutes):
    hours = minutes % 24
    return hours
def getDays(hours):
    days = hours % 365
    return days

def printBreakDown(days, hours, minutes, seconds):
    print("--------Break Down--------")
    print(days, "day(s), ", hours, "hour(s), ",
          minutes, "minute(s), ", seconds, "second(s)")

main()

2 个答案:

答案 0 :(得分:2)

我看到的第一件事是你在以下函数中写seconds而不是time_Amount

def getTime():
    time_Amount = int(input("Enter time in seconds: "))
    while (time_Amount == 0):
        # Check this line
        time_Amount = int(input("Enter a non-zero amount of seconds: "))
    return time_Amount

你拥有的是:

def getTime():
    time_Amount = int(input("Enter time in seconds: "))
    while (time_Amount == 0):
        seconds = int(input("Enter a non-zero amount of seconds: "))
    return time_Amount

如果用户在第一行输入0,则将输入while循环,提示用户输入非零值。然后,用户输入10,并为seconds分配值10.请注意time_Amount仍为0,因为您从未对其进行修改。检查loop条件,它保持在while循环内。

答案 1 :(得分:1)

您不能按照您尝试的方式使用模数(%)运算符。如果您传递的值小于除数,则您的值将保持不变。 这几乎不是将分钟转换为小时(等等)的合适方法,并导致您的奇怪值。

您最有可能想要使用的是每个部门存储您的精确值,并使用floor division operator //来确定多少天/小时/分钟/秒。

说明%//

之间的区别
>>> 10 // 24
0
>>> 10 % 24
10

或者,您可以使用datetime模块更简洁地计算:

from datetime import datetime,timedelta
def main():
    time_Amount = timedelta( seconds = int(input('Enter time in seconds: ')))

    while (time_Amount == timedelta(seconds = 0)):
        time_Amount = timedelta( seconds = int(input("Enter a non-zero amount of seconds: ")))    

    calc_time = datetime(1,1,1) + time_Amount
    print("--------Break Down--------")
    print("%d day(s), %d hour(s), %d minute(s), %d second(s)" %
          (calc_time.day-1, calc_time.hour, calc_time.minute, calc_time.second))

如何运作

  • 首先,我们从用户输入创建一个几秒钟的timedelta对象。本质上,这是一个反映持续时间的对象,可以用许多不同的时间单位表示。

  • datetime(1,1,1) + time_Amount获取1年,1个月和1天的datetime个对象,并以秒为单位添加timedelta个持续时间。

  • 我们使用字符串格式以惯用方式从datetime对象中取出相应的日,小时,分钟和秒。

如果您想要有月份或年份变量,则必须对其进行格式化并相应地从中减去1,分别使用calc_time.monthcalc_time.year进行访问。

<强>输出:

>>>main()
Enter time in seconds: 10000
--------Break Down--------
0 day(s), 2 hour(s), 46 minute(s), 40 second(s)