【问题标题】:Shortening the following if statement?缩短以下 if 语句?
【发布时间】:2018-08-19 09:00:46
【问题描述】:

抱歉这个幼稚的问题。我试图让这段代码更短一些,因为写出这整行似乎很麻烦。有什么方法可以缩短 if 语句?

if data.char == "1" or "2" or "3" or "4" or "5" or "6" or "7" or "8" or "9":
    data.board[row][col] = int(data.char)

【问题讨论】:

  • 现有代码无法编译...所以,raise SyntaxError()?
  • 如果代码已经按预期工作,那么使用代码审查。在这种情况下,代码当前存在语法错误。
  • 很抱歉。刚刚修好了。
  • 这段代码并没有像你想象的那样做。它总是会出现True,因为它等同于(data.char == "1") or ("2") or ("3") or ...,并且在布尔上下文中"2" 被视为True

标签: python python-3.x


【解决方案1】:

正如cco所说:

if data.char in "123456789"
    data.board[row][col] = int(data.char)

in 运算符在找到指定序列中的变量时计算结果为 true,否则为 false。它可以用于列表、字符串、元组和字典。但是 in 只会检查字典的键 - 而不是值。

例如,如果您想要整数,您可以声明一个数字列表并使用它。

if num in [1,2,3,4,5,6,7,8,9]:
    do something

或者:

if num in range(1,9):
    do something

【讨论】:

  • 如果data.char包含'23'、'567'等,你给出的主要测试将有误报
【解决方案2】:

这个怎么样?

import string
digits = set(string.digits) - {'0'}
if data.char in digits:
    data.board[row][col] = int(data.char)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多