范围定义不正确

当我输入时to_float_hours(0,1,0)它会返回一个值,但当我输入时to_float_hours(0,0,1)它不会返回一个值。


此外,如果我输入to_float_hours(0,61,0)它会返回一个值,而当我输入时to_float_hours(0,1,59)它不会。


为什么分钟的范围是大于 1 的值,而秒的范围是 0 到 58 之间的值?


我希望该函数仅在分钟和秒的输入都在 0 到 59 之间(包括 0 到 59)时返回一个值。


def to_float_hours(hours, minutes, seconds):

    acceptable_range = list(range(0,59))

    while minutes and seconds in acceptable_range:

        hours = hours

        minutes = minutes/60

        seconds = seconds/3600

        total = hours+minutes+seconds

        return total


慕仙森
浏览 89回答 3
3回答

慕婉清6462132

该range()函数直到最后一个值才提交。您当前的范围应该是(0,60),因为在 59 之后,秒或分钟会自动更改为前一分钟或下一秒,因此该值会更新为 0 而不是 60。因此正确的范围是 (0,60 ),其中python 实际上不会考虑范围内的最后一个数字,而是考虑它之前的数字。所以创造list(range(0,60))其实就是创造[0,1,2,...59]另一个问题是您应该使用if语句而不是while循环,因为您希望仅当数字在可接受的范围内时才执行条件。另外,我不明白你为什么要限制分钟和秒。他们甚至可以超过60。无论如何,这是代码的工作版本:-def to_float_hours(hours, minutes, seconds):    acceptable_range = list(range(0,60))    if seconds in acceptable_range and minutes in acceptable_range:        hours = hours        minutes = minutes/60        seconds = seconds/3600        total = hours+minutes+seconds        return total

江户川乱折腾

这是因为stop在range函数中是独占的,意味着 range 函数给出的值将从start到stop-1acceptable_range = list(range(0,60))

慕后森

首先,您需要修复 While 中的逻辑并通过加一来修复范围(因为我们从零开始)。def to_float_hours(hours, minutes, seconds):    acceptable_range = list(range(0,60))    while minutes in acceptable_range and seconds in acceptable_range:        hours = hours        minutes = minutes/60        seconds = seconds/3600        total = hours+minutes+seconds        return total
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python