为了账号安全,请及时绑定邮箱和手机立即绑定

范围定义不正确

范围定义不正确

慕仙森 2023-09-05 15:25:27
当我输入时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
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

该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


查看完整回答
反对 回复 2023-09-05
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这是因为stop在range函数中是独占的,意味着 range 函数给出的值将从startstop-1

acceptable_range = list(range(0,60))


查看完整回答
反对 回复 2023-09-05
?
慕后森

TA贡献1802条经验 获得超5个赞

首先,您需要修复 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


查看完整回答
反对 回复 2023-09-05
  • 3 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信