当前位置: 首页 > 面试题库 >

python中的OR行为:

施同
2023-03-14
问题内容

我已经编写了以下代码,我要做的就是打印yes,如果传递的数字是1、0或2的字符串表示形式,而其他所有情况都为false:

number=raw_input()
if number is "1" or "0" or "2":
    print "Yes"
else:
     print "no"

我知道如何使预期的逻辑工作,但我只是想 需要
知道为什么它打印是任何数i传递给的raw_input。我希望答案尽可能详细,因为我不明白为什么它会失败,这对我来说似乎很Python


问题答案:

问题在于,对于Python,您的代码如下所示:

if (number is "1") or "0" or "2":

而且,由于任何非空字符串的求值结果True始终为True

做您想做的事情,一个不错的语法是:

if number in {"1", "0", "2"}:

请注意我在这里使用集合-尽管在这种情况下(只有三个值)并没有太大关系,但检查集合的速度比列表快,因为集合的成员资格测试是O(1)而不是O (n)。

这是写得更好,更容易的代码:

if number == "1" or number == "0" or number == "2":

这就是你想要的。

请注意,在对值进行比较时,应始终==不使用is-is是身份检查(两个值是同一对象)。通常,您应该使用或之类的is东西。is True``is None

如果您想将其作为数字来处理,则可以执行以下操作:

try:
   value = int(number)
except ValueError:
   value = None
if value is not None and 0 <= value <= 2:
    ...

在要与大量数字进行比较的情况下,这可能会更有用。请注意,我使用Python有用的比较链接(0 <= value <= 2而不是0 <= value and value <= 2)。



 类似资料:
  • 问题内容: 我知道and表达式存在于python中,但是有任何表达式吗?还是通过某种方式组合它们以产生与表达式相同的效果? 我的代码看起来像这样: 这样,我的意思是,如果用户输入“ a”并且任何类型的“ a”都包含在先前定义的列表中,我是否可以从给定列表中删除所有类型的“ a”? python告诉我在以下方面存在问题: 他告诉我: 问题答案: 正如Matt Ball的回答所解释的, 是“和/或”。

  • 问题内容: 我正在写一个php应用程序来访问MySQL数据库,在一个教程中,它说了某种形式 PHP如何知道该函数失败以便它运行模具部分?我想我在问它的​​“或”部分如何工作。我想我以前没看过。 问题答案: 如果第一条语句返回,则整个语句必须是第二部分,因此永远不要执行。 例如: 因此,如果您的查询失败,它将评估该语句并结束脚本。

  • 问题内容: 我有以下简单的代码行: 这应该很简单,如果我不为空或它不是一个空格,而是打印Something。现在,如果这两个条件之一是,为什么我看到打印了什么? 问题答案: 德摩根定律, 就您而言,根据第一条陈述,您已经有效地撰写了 这是不可能发生的。因此,无论输入是什么,都将始终返回,而取反则将始终给出。 相反,您应该这样写 或根据De Morgan引用的第二条陈述,

  • 问题内容: 我正在通过LPTHW,遇到了一些我听不懂的东西。您何时会需要布尔值或返回布尔值以外的其他值?LPTHW文本指出所有语言(如python)都具有此行为。他是说解释型语言还是编译型语言,还是鸭子类型的还是静态类型的语言? 我运行了以下代码: 请帮助我了解这里发生了什么。 根据文档:http : //docs.python.org/2/library/stdtypes.html 除非另有说明

  • 问题内容: python中以下语句的含义是什么: 是一个对象。以上有什么价值?那是什么类型呢? 问题答案: 如果 计算为,则x设置为,否则为 认为是

  • 我的TestNG测试如下: 如果Test1或Test2中的任何一个被传递,我希望我的Test3被执行。TestNG的工作方式似乎总是检查Test1和Test2是否都被传递。有没有办法可以将逻辑AND更改为逻辑OR。我还尝试过指定像这样的依赖方法,但运气不好 我还尝试了依赖组,但这再次检查是否所有相应的测试都在逻辑与中传递。运行上述测试后,我将获得以下输出: