【问题标题】:Is there a cleaner way to write this boolean comparison in Python? [closed]有没有一种更简洁的方法可以在 Python 中编写这个布尔比较? [关闭]
【发布时间】:2020-03-02 06:47:50
【问题描述】:

此作业的说明是:

我们传入 2 个布尔输入,寒冷和下雨。

你应该输出一个字符串:('cold' or 'warm') ' and ' ('rainy' 或“干”)基于这些输入。

('cold' or 'warm') 表示您应该使用这两个词中的一个,具体取决于 输入布尔值。

例如 False,True = '温暖多雨'

我放的代码是:

# Get our boolean values from the command line
import sys
isCold= sys.argv[1] == 'True'
isRainy= sys.argv[2] == 'True'

# Your code goes here

condition = ""
if (isCold):
  condition += "cold"
else:
  condition += "warm"

if (isRainy):
  condition += " and rainy"
else:
  condition += " and dry"

print(condition)

代码是正确的并输出它应该的,但我想知道有没有更简洁的方法来写这个?我觉得有,但我不太清楚。

【问题讨论】:

    标签: python python-3.x if-statement conditional-statements boolean-expression


    【解决方案1】:

    您可以将条件表达式与 Python 3.6 的 f-strings 结合起来,用一行代码构建字符串:

    condition = f"{'cold' if isCold else 'warm'} and {'rainy' if isRainy else 'dry'}"
    

    在 Python 2 中,% string formatting operator 也可以工作:

    condition = "%s and %s" % (
        'cold' if isCold else 'warm',
        'rainy' if isRainy else 'dry'
    )
    

    【讨论】:

    • 非常感谢!我在一个单独的文件中遇到的一个问题是当我输入: print(f"{'cold' if isCold else 'warm'} and {'rainy' if isRainy else 'dry'}") 时,我得到一个语法错误,箭头指向括号前的最后一个双引号。我知道如果不查看其余代码可能不容易看到错误,但我不想为此创建一个全新的线程,我想知道您是否可以仅通过这些信息看到错误并告诉我是什么错误的?再次感谢。
    • 语法错误很可能是由于您的 Python 版本。 f-strings 是在 Python 3.6 中引入的。
    • 啊哈!就是这样。我运行的python版本是3.4.3
    【解决方案2】:

    使用条件表达式。

    condition += "cold" if isCold else "warm"
    condition += " and " + ("rainy" if isRainy else "dry")
    

    【讨论】:

      【解决方案3】:

      我建议首先使用三元表达式来获取冷/暖和雨/干的字符串值:

      coldText = 'cold' if isCold else 'warm'
      rainyText = 'rainy' if isRainy else 'dry'
      

      然后使用string interpolation 构造你的最终字符串,使形式和内容分开:

      finalText = '%s and %s' % (coldText, rainyText)
      print(finalText)
      

      【讨论】:

        【解决方案4】:

        另一种方法是使用字典:

        condition = {True: 'cold', False: 'warm'}[isCold] + ' and ' + {True: 'rainy', False: 'dry'}[isRainy]
        

        较少的pythonic,因为不太明确:

        可以将TrueFalse 强制转换为10 并将其用作索引。

        condition = ['warm', 'cold'][isCold] + ' and ' + ['dry', 'rainy'][isRainy]
        

        我经常使用 TrueFalse10 的强制转换,例如计算布尔列表中的 True 值。 (sum() 在列表中)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-12
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-13
          相关资源
          最近更新 更多