【问题标题】:a == b == c triple comparison in C# vs Pythona == b == c C# 与 Python 中的三元组比较
【发布时间】:2015-12-28 14:20:09
【问题描述】:

你会如何把这个python代码翻译成c#

l = [True, False]
for a in l:
    for b in l:
            for c in l:
                    print(a, b, c, a==b==c)

(输出这个)

True True True True
True True False False
True False True False
True False False False
False True True False
False True False False
False False True False
False False False True

进入类似的东西

void Main()
{
    List<bool> l = new List<bool> (){true, false};
    foreach(var a in l)
    {
        foreach(var b in l)
        {
            foreach(var c in l)
            {
                Console.WriteLine(a.ToString()+" "+b.ToString()+" "+c.ToString()+" "+(a==b==c).ToString());
            }
        }
    }
}

不幸的是,它的工作方式不同并输出:

True True True True
True True False False
True False True False
True False False True
False True True False
False True False True
False False True True
False False False False

【问题讨论】:

标签: c# python


【解决方案1】:

Python 有chained comparisons 所以a == b == c 的意思是:

(a == b) and (b == c)

在 C# 中,a == b == c 被评估为:

(a == b) == c

要将 Python 的 a == b == c 转换为 C# 使用

a == b && b == c

【讨论】:

    【解决方案2】:

    当您将列表更改为以下内容时,问题变得很明显:

    List<int> l = new List<int> { 1, 0 };
    

    现在,您会收到一个错误,即您无法在 bool 和 int 类型的操作数上使用 == 运算符。但你正在做int == int == int。因此,对该错误的唯一解释是,在评估第二个比较之前已经评估了其中一个比较。这正是这里发生的事情。

    表达式a == b == c 等价于C# 中的(a == b) == c。

    Python 在这里的特殊之处在于它将a == b == c 扩展为a == b and b == c。所以在 C# 中正确的表达方式是a == b &amp;&amp; b == c。

    【讨论】:

      【解决方案3】:

      试试这个:

      Console.WriteLine(a.ToString()+" "+b.ToString()+" "+c.ToString()+" "+(a==b && b == c).ToString());
      

      【讨论】:

      • 问题是直接请求翻译。
      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多