当我运行程序时,我声明的变量都没有得到它们的值。我确实记得使用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()
答案 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.month
和calc_time.year
进行访问。
<强>输出:强>
>>>main()
Enter time in seconds: 10000
--------Break Down--------
0 day(s), 2 hour(s), 46 minute(s), 40 second(s)