Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单逻辑Python 3_Python - Fatal编程技术网

简单逻辑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'other
12==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)