简单逻辑Python 3
嘿,所以我被这个问题困住了,不知道为什么我的代码不能工作。感谢您的帮助。干杯 编写一个函数简单逻辑Python 3,python,Python,嘿,所以我被这个问题困住了,不知道为什么我的代码不能工作。感谢您的帮助。干杯 编写一个函数闹钟(白天,度假),它需要一个整数天 (编码为0=Sun,1=Mon,2=Tue,…6=Sat)和休假时的布尔值 并返回一个字符串,其形式为“7:00”,指示报警发生的时间 钟应该响了。在工作日,警报应为“7:00”,并在 周末应该是“10:00”。除非我们在度假——那就去吧 工作日应为“10:00”,周末应为“休息” 例如: 打印(闹钟(1,假))给出7:00 打印(闹钟(0,真))给出关闭 我有:
闹钟(白天,度假)
,它需要一个整数天
(编码为0=Sun,1=Mon,2=Tue,…6=Sat)和休假时的布尔值
并返回一个字符串,其形式为“7:00”
,指示报警发生的时间
钟应该响了。在工作日,警报应为“7:00”
,并在
周末应该是“10:00”
。除非我们在度假——那就去吧
工作日应为“10:00”
,周末应为“休息”
例如:
打印(闹钟(1,假))
给出7:00
打印(闹钟(0,真))
给出关闭
我有:
def alarm_clock(day, on_vacation):
'''Alarm Clock'''
if day in range(1-6) and on_vacation is True:
return '10:00'
elif day is 0 or 7 and on_vacation is True:
return 'off'
elif day in range(1-6) and on_vacation is False:
return '7:00'
elif day is 0 or 7 and on_vacation is False:
return '10:00'
这应该是
if day in range(1, 7) and on_vacation:
否则,范围(1-6)
实际上是范围(-5)
如果你在度假,只有两种结果,如果你没有:
def alarm_clock(day, on_vacation):
if on_vacation: # same as explicitly asking if on_vacation is True
# if on vacation set it to off else set to weekday time
return "off" if day in {0,6} else "10:00"
# else not on vacation so 10:00 for wkend and 7 for weekday
return "10:00" if day in {0, 6} else "07:00"
如果您在休假期间将闹钟设置为10或关闭,如果您不在休假期间,闹钟设置为10或7。如果用户输入的日期超出有效范围,您可能还需要检查该日期是否有效,并输出相应的消息
在检查相等性时,还应使用==
,仅在python中缓存小整数时才起作用,如果超出该范围,您将看到测试失败:
In [16]: day = 256
In [17]: day is 256
Out[17]: True
In [12]: day = 257
In [13]: day is 257
Out[13]: False
In [22]: day = 257
In [23]: day == 257
Out[23]: True
使用0-6之间的整数范围不会遇到问题,但在一般情况下,==
,is
检查对象的标识,以查看它们是否实际上是相同的对象,=
检查相等性,即两个对象是否具有相等的值
只是为了好玩,一种不同的方式:
def alarm_clock(day, on_vacation):
return {0: ["10:00", "off"], 6: ["10:00", "off"]}.get(day, ["07:00", "10:00"])[on_vacation]
如果您提供输出,则更容易确定什么是关闭的,但我确实看到您对数字使用了错误的整数集。您希望能够传递函数的完整集合是
[0,1,2,3,4,5,6]
你错误地测试了两行中的7行,一周7天。但是一个从0开始的指数在一周中的几天内只能达到6,因为你把数字0包括在内。此外,用于范围的语法错误,格式应为range(1,6)
我想你希望它是包容性的
range(1,6) = [1,2,3,4,5,6]
但它实际上会回来
range(1,6) = [1,2,3,4,5]
因为它从提供的第一个数字一直到第二个数字,但不包括它
下面是编写代码的方法:
def alarm_clock(day, on_vacation):
'''Alarm Clock'''
if on_vacation:
if day in range(1,6):
return '10:00'
elif day in [0,6]:
return 'off'
else:
if day in range(1,6):
return '7:00'
elif day in [0,6]:
return '10:00'
我更改了条件流,以使其更易于理解和调试。通常最好是进行更多的分支,而不是根据这两种情况获得所有四个结果。如果是If/elif/else问题,您的答案是通过范围(1-6)
更改范围(1,7)
但是if/elif/else通常很难阅读。在这里,周末和休假可以理解为累积奖金。使用列表索引,您还可以编写:
def week_end(day): return (day%6 == 0)
def alarm_clock(day,on_vacation):
return ['7:00','10:00','off'][week_end(day) + on_vacation]
以下是预期的解决方案:
def alarm_clock(day, on_vacation):
if day in range(1,7) and on_vacation:
print ('10:00')
elif day is 0 or 7 and on_vacation is True:
print ('off')
elif day in range(1,7) and on_vacation is False:
print ('7:00')
elif day is 0 or 7 and on_vacation is False:
print ('10:00')
alarm_clock(day_of_the_week,is_on_vacation)
你从你的代码中得到了什么输出?还有,为什么你要用0到7的范围来表示我认为是一周中的几天?因为这就是我们在问题中被告知要使用的:)但是0到7表示一周中有8天,你的问题要求0到6,这将是一周中的7天。(0是星期天,6是星期六)缩进是错误的:函数体应该缩进…1@tobias_k它更显式,在Python中2.x不需要为线性扫描构造列表-在3.x中-它不那么重要,因为有“更聪明”的成员资格测试。。。所以一个中的六个,半打t'other12==12是真的
计算False
,因为这些表达式开始计算最后一个的结果12为真
=>False
(12本身既不为真,也不为假,只有12的存在才能计算为真或假),12==False
=>False
。您可以通过(12==(12为真))==(12==12为真)
检查它,它将计算为真。但是(12==12)为真
将计算为真
。不管它存在于记忆的哪一部分,总是真的是真的。你是对的,我完全误解了这一点。我现在要编辑我的答案,删除所有这些,因为我注意到数字范围使用错误,所以这可能是真正的罪魁祸首。
def alarm_clock(day, on_vacation):
if day in range(1,7) and on_vacation:
print ('10:00')
elif day is 0 or 7 and on_vacation is True:
print ('off')
elif day in range(1,7) and on_vacation is False:
print ('7:00')
elif day is 0 or 7 and on_vacation is False:
print ('10:00')
alarm_clock(day_of_the_week,is_on_vacation)