我希望用户通过说“是”或“否”来决定是否删除所选文件。无论出于何种原因,“是”有效,但“否”则循环返回并决定返回初始if语句
我已经尝试了一些方法,经过一些Google搜索,我似乎找不到适合此问题的响应。我尝试过:
使用str()和不使用str()更改inputText
我已经尝试过在字符串文本上使用引号和撇号。
我尝试更改初始的If语句:
第一:
if inputText != ('yes' or 'no'):
我什至尝试过
第二:
if inputText != 'yes' or inputText != 'no':
第三:
if (inputText != 'yes') or (inputText != 'no'):
我最接近的是第一。出于某种原因,“是”似乎有效,但“否”似乎会循环回到第一个If语句。
有人能指出我正确的方向吗?我想念什么?
inputText = str(input("Are you sure you want to delete file? (yes/no) "))
ctrl = True
while ctrl == True:
if inputText != ('yes' or '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
我预期的结果将很简单
>> Are you sure you want to delete file? (yes/no) *random text that isn't 'yes' or 'no'*
>> Please type "yes" or "no"
这是我最初的If语句示例中的结果:
>> Are you sure you want to delete file? (yes/no) yes
>> pretend got deleted
这是我的期望:
>> Are you sure you want to delete file (yes/no) no
>> pretend doesn't got deleted
这是我真正得到的
>> Are you sure you want to delete file (yes/no) no
>> Please type "yes" or "no"
即使我这样做:
>> Are you sure you want to delete file (yes/no) no
>> Please type "yes" or "no" yes
>> pretend got deleted
是我得到的结果
答案 0 :(得分:2)
问题出在您的第一个if语句中。一旦发现您的输入不是if inputText != ('yes' or 'no')
,您的第一个if yes
就会解析为true。因此,仅当输入不是true
而不是解析为yes
的{{1}}时,才更改是否解析为no
您的代码如下所示
if inputText != ('yes') and inputText != ('no')
答案 1 :(得分:0)
这里的问题与您的逻辑有关,尤其是这一行:
inputText != ('yes' or 'no')
(“是”或“否”)解析为“是”,因为那是第一个评估为True(在布尔上下文中)的元素
您可能打算这样做:
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'相同。尾部的逗号('yes',)将使Python意识到您要定义一个集合-并以此为准。现在,严格来说,如果不止一个值,则最后不需要逗号,即,('yes','no')可以-但是,这是养成习惯的“最佳实践”始终使用逗号结尾,因此您不会在某个点上意外地尝试定义单个元素集,而最终只得到一个值。