【问题标题】:I want it to give me error when is not 0 or 1 [closed]我希望它在不是 0 或 1 时给我错误 [关闭]
【发布时间】:2018-11-08 08:04:40
【问题描述】:
#!/usr/bin/python

def open_doors(state):
    (ld, rd, li, ri, lo, ro, cl, ml, gs) = state

    if not(ld == 0 or rd == 0 or li == 0 or ri == 0 and lo == 0 or ro == 0 or cl == 0 or ml == 0):
      raise ValueError("Error: A state is not specified or invalid entry")

    if not(ld == 1 or rd == 1 or li == 1 or ri == 1 and lo == 1 or ro == 1 or cl == 1 or ml == 1):
      raise ValueError("Error: A state is not specified or invalid entry")

    leftDoor = (ld or li or lo)
    rightDoor = (rd or ri or ro)
    if (li and cl):
      leftDoor = 0
    if (ri and cl):
      rightDoor = 0

    if leftDoor and rightDoor and not ml and gs == 'P':
      print("left door and right door open")
    elif leftDoor and not ml and gs == 'P':
      print("open left door")
    elif rightDoor and not ml and gs == 'P':
      print("open right door")
    else:
      print("both doors stay closed")   

open_doors([0,0,1,6,0,0,1,0,'2'])

如果没有指定每个状态,则引发 ValueError, 开关和锁不是 0 或 1 或者 gs 是 不是('P''R','N','2','3''D')之一

【问题讨论】:

  • 所以你只是想让你的代码更简洁?另外,您的 if 条件中的单个 and 语句是错字吗?
  • 查找any()all()
  • 我只想输入 0 或 1,如果不是 0 或 1,它应该引发 ValueError

标签: python python-3.x


【解决方案1】:

我愿意

if any((i != 0 and i != 1) for i in state):
  raise ValueError("Error: A state is not specified or invalid entry")

这很简短。

甚至可以改成

valid = set((0, 1))
if any(i not in valid for i in state):
  raise ValueError("Error: A state is not specified or invalid entry")

我不确定这是否是更好的性能或可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2020-12-19
    • 2021-08-24
    • 2023-03-12
    • 2020-11-23
    • 2018-11-02
    相关资源
    最近更新 更多