python:whilestation与几个布尔测试

python:whilestation与几个布尔测试,python,boolean-logic,Python,Boolean Logic,当地的一所小学有如下形式的图书证ID:ID以“s”(代表“学生”)开头,长度正好为6个字符,包括“s”;或者它们以“t”(代表“教师”)开头,没有长度要求。以下函数应获取有效ID,但缺少while条件 def get_valid_id(): '''Prompt the user for and return a valid library card ID.''' s = raw_input("Enter ID: ") while ?????: s = r

当地的一所小学有如下形式的图书证ID:ID以“s”(代表“学生”)开头,长度正好为6个字符,包括“s”;或者它们以“t”(代表“教师”)开头,没有长度要求。以下函数应获取有效ID,但缺少while条件

def get_valid_id():
    '''Prompt the user for and return a valid library card ID.'''

    s = raw_input("Enter ID: ")
    while ?????:
        s = raw_input("Try again: ")
    return s
下面是while循环的一些可能条件。对于每一个,指出它是否能使功能正常工作

  • 这种情况会使功能正常工作吗?
    (s[0]!=“s”)和(len(s)!=6)和(s[0]!=“t”)

  • 这种情况会使功能正常工作吗?
    not((s[0]=“s”和len=6)或(s[0]=“t”))

  • 我不明白为什么1的答案是否定的,2的答案是肯定的。我认为第一个问题会起作用,因为都是“和”,第二个问题我认为“或”不会起作用。。有人能给我解释一下吗?

    正如有人评论的那样:

    非(A或B或C)=(非A)和(非B)和(非C)

    当您考虑“<代码>不是A=< /代码>时,也更容易想到,因此您需要的语句是<代码>而不是x<代码>,其中<代码> x>代码>是对一个好ID的测试。

    因此,第一个案例将转化为

     not ( (s[0] != "s") or (len(s) != 6) or (s[0] != "t") )
    
    i、 e.上述任何子语句的id传递都是真的,因此只需
    s[0]!=“s”
    就足够了

    在第二种情况下

    not( (s[0] == "s" and len(s) == 6) or (s[0] == "t") )
    
    表示如果
    (s[0]=“s”和len(s)==6)
    (学生标准)或
    s[0]=“t”
    (教师标准),则id通过

    正如有人评论的那样:

    非(A或B或C)=(非A)和(非B)和(非C)

    当您考虑“<代码>不是A=< /代码>时,也更容易想到,因此您需要的语句是<代码>而不是x<代码>,其中<代码> x>代码>是对一个好ID的测试。

    因此,第一个案例将转化为

     not ( (s[0] != "s") or (len(s) != 6) or (s[0] != "t") )
    
    i、 e.上述任何子语句的id传递都是真的,因此只需
    s[0]!=“s”
    就足够了

    在第二种情况下

    not( (s[0] == "s" and len(s) == 6) or (s[0] == "t") )
    

    表示如果
    (s[0]=“s”和len(s)==6)
    (学生标准)或
    s[0]=“t”
    (教师标准),则id通过

    这是因为1将接受长度<6的学生id。根据您的问题,学生id必须为6个字符长,包括s。还请注意,如果尝试输入空字符串,这两个选项都将中断
    s[0]
    将引发一个
    索引器

    这是因为1将接受长度<6的学生id。根据您的问题,学生id必须为6个字符长,包括s。还请注意,如果尝试输入空字符串,这两个选项都将中断
    s[0]
    将产生一个
    索引器

    我们在课堂上没有学到这一点。我正在上python的初级课程。家庭作业?如果是的话没关系,我们应该把它贴上这样的标签。DeMorgan定律是一个布尔逻辑定律,你可以研究它,即使你从来没有接近编程。看看维基百科,我们在课堂上没学过。我正在上python的初级课程。家庭作业?如果是的话没关系,我们应该把它贴上这样的标签。DeMorgan定律是一个布尔逻辑定律,你可以研究它,即使你从来没有接近编程。在维基百科上查看。谢谢谢普的透彻解释。@alicew没问题,即使是有经验的程序员也会被boolian逻辑绊倒,现在花点时间挠头看看很重要。谢谢谢普的透彻解释。@alicew没问题,即使是有经验的程序员也会被boolian逻辑绊倒,现在花点时间挠头看看是很重要的。