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