Python 3.x Python“;如果;“之间的条件差异”;及&&引用;或;

Python 3.x Python“;如果;“之间的条件差异”;及&&引用;或;,python-3.x,if-statement,Python 3.x,If Statement,我希望用户通过准确地说“是”或“否”来决定是否删除所选文件。出于什么原因,“是”起作用,而“否”循环返回并决定返回初始if语句 我尝试了一些事情,在谷歌搜索之后,我似乎找不到适合这个问题的答案。我试过: 使用str()和不使用str()更改输入文本 我在字符串文本中尝试了引号和撇号 我已尝试更改初始If语句: 第一: 如果输入文本!=(“是”或“否”): 我甚至试过 第二: 如果输入文本!='“是”或“输入文本!”否: 第三: 如果(inputText!=“是”)或(inputText!=“

我希望用户通过准确地说“是”或“否”来决定是否删除所选文件。出于什么原因,“是”起作用,而“否”循环返回并决定返回初始if语句

我尝试了一些事情,在谷歌搜索之后,我似乎找不到适合这个问题的答案。我试过:

使用str()和不使用str()更改输入文本

我在字符串文本中尝试了引号和撇号

我已尝试更改初始If语句:

第一:

如果输入文本!=(“是”或“否”):
我甚至试过

第二:

如果输入文本!='“是”或“输入文本!”否:
第三:

如果(inputText!=“是”)或(inputText!=“否”):
最接近我的是第一个。出于某种原因,“yes”似乎有效,但“no”似乎会循环回到第一个If语句

谁能给我指出正确的方向吗?我错过了什么

inputText=str(输入(“您确定要删除文件吗?(是/否)”)
ctrl=True
当ctrl==True时:
如果输入文本!=(“是”或“否”):
inputText=输入('请键入“是”或“否”)
elif inputText==“是”:
##删除
打印(“假装已删除”)
ctrl=False
elif inputText==“否”:
##狗屎不会被删除
打印(“假装未被删除”)
ctrl=False
我预期的结果将是一个简单的过程

>确实要删除文件吗?(是/否)*不是“是”或“否”的随机文本*
>>请键入“是”或“否”
这是我的第一个初始If语句示例:

>确实要删除文件吗?(是/否)是
>>假装被删除
这就是我所期望的:

>是否确实要删除文件(是/否)否
>>假装没有被删除
这就是我真正得到的

>是否确实要删除文件(是/否)否
>>请键入“是”或“否”
即使我这样做:

>是否确实要删除文件(是/否)否
>>请键入“是”或“否”是
>>假装被删除

我得到的结果是什么?这里的问题是你的逻辑,特别是这一行:

inputText != ('yes' or 'no')
('yes'或'no')解析为'yes',因为这是第一个计算为True的元素(在布尔上下文中)-换句话说,该行在功能上等同于下面的代码块:

if bool('yes') is True:
    compare_value='yes'
else:
    compare_value='no'
if inputText != compare_value:
    inputText = input('Please type "yes" or "no" ')
您可能打算这样做:

inputText = str(input("Are you sure you want to delete file? (yes/no) "))
ctrl = True
while ctrl == True:
    if inputText not in ('yes', 'no',):
        inputText = input('Please type "yes" or "no" ')
    elif inputText == 'yes':
        ##delete
        print("pretend got deleted")
        ctrl = False
    elif inputText == 'no':
        ##shit does not get deleted
        print("pretend doesn't got deleted")
        ctrl = False
以下是一些注意事项:

  • 现在您正在测试inputText是否不在包含“yes”和“no”的值集中(inputText不在('yes','no',))

  • 请注意该集合中的尾随逗号('yes','no',)(就在右括号之前)-在Python中()用于操作顺序以及定义集合-因此如果在parens('yes')=>中粘贴一个值,则与“yes”相同。尾随逗号(“是”)将使Python意识到你要定义一个集合,并将其视为一个集合。现在,严格地说,如果有多个值,那么末尾不需要逗号,也就是说(‘是’、‘否’)就可以了,但“最佳实践”是养成始终插入尾随逗号的习惯,这样就不会意外地在某个点上定义单个元素集,最后只得到一个值


  • 问题在于您的第一个if语句中。您的第一个if,
    if inputText!=('yes'或'no')
    在看到您的输入不是
    yes
    时立即解析为true。因此,只有当输入不是
    yes
    和非
    no
    时,才将if解析为
    true
    ,后者解析为
    if inputText!=('yes')和inputText!=(“否”)

    您的代码如下所示

    inputText=str(输入(“您确定要删除文件吗?(是/否)”)
    ctrl=True
    当ctrl==True时:
    如果输入文本!=('yes')和inputText!=(‘否’):
    inputText=输入('请键入“是”或“否”)
    elif inputText==“是”:
    ##删除
    打印(“假装已删除”)
    ctrl=False
    elif inputText==“否”:
    ##狗屎不会被删除
    打印(“假装未被删除”)
    ctrl=False
    
    如果(inputText!=“yes”)和(inputText!=“no”),您可以使用
    @Lyncius。请查看我的答案,如果你不明白,请告诉我(“是”、“否”)。如果我是对的,这就像是按照给定的顺序申报一张支票?(如果我错了,请纠正我)。但是后面的逗号呢?那是相当。。。令人困惑。@lyncius-尝试执行此操作-打印(('yes'或no'))-它将始终打印yes,因为“or”表达式在python中转换为“返回在布尔上下文中计算为True的第一个值”,并且,在查看答案后,请确保向上投票/接受对stackoverflow用户提出相同/类似问题最有帮助的答案。@Lyncius-“是”、“否”是一组值。表达式“inputText not in”(“是”、“否”)表示“检查inputText是否不是(允许的)值集中的一个值”-如果不在该值集中,则计算为真;否则evalulate为False。我尝试了这个方法,结果与我得到的相反,If语句“no”通过,但If语句“yes”不再有效,它直接返回到初始Ifstatement@Lyncius我的错。我构造了导致问题的if错误。我已经更新了我的答案。现在就试试吧,像个符咒!好的,很酷。公平地说,如果我再看一遍你的第一段,我会注意到同样的代码行。我仍在试图理解为什么
    if inputText!=('yes'或'no')
    不起作用。假设您输入了
    no
    ,那么控件将进入此if块,因为此表达式是
    c