更好的方式,写一个Long" if"声明?

时间:2014-08-27 21:34:22

标签: python if-statement

您好,这可能是一个非常基本的问题,但因为我是编程和python的新手,我真的想学习,我问。

我正在制作一个程序,从用户那里获取他所拥有的“扑克牌”套装的输入。该计划只接受正确的诉讼。

例如;

  

钻石,心形,俱乐部,黑桃

如果用户输入任何其他内容,例如“三角形”,程序将返回“输入错误”。

这是我到目前为止所得到的:

if suit == "Diamonds":
    return "Accepted"
if suit == "Hearts":
    return "Accepted"
if suit == "Clubs":
    return "Accepted"
if suit == "Spades":
    return "Accepted"
else:
    return "Wrong input"

我的问题是,有没有更好的方式来写这个,而不是通过这个繁琐的过程为每个套装制作一个全新的“if”声明。

4 个答案:

答案 0 :(得分:8)

您可以使用in检查suit是否在列表,元组或一组接受的诉讼中:

if suit in {"Diamonds", "Hearts", "Clubs", "Spades"}:
    return "Accepted"
else:
    return "Wrong input"

您还可以使用tuple(...)),list[...])或frozenset代替set({ {1}})。

答案 1 :(得分:7)

if suit in ("Diamonds","Hearts","Clubs","Spades"):
    return "Accepted"
else:
    return "Wrong input"

只需使用in检查成员资格,如果元组中没有suit,则会执行else子句。

membership operators

您还可以使用not in

来反转逻辑
if suit not in ("Diamonds","Hearts","Clubs","Spades"):
    return "Wrong input"
else:
    return "Accepted"

如果您还要检查值:

if suit  in ("Diamonds","Hearts","Clubs","Spades") and value in ("Ace","king","Queen"....):
    return "Accepted"
else:
    return "Wrong input"

使用set {"Diamonds","Hearts","Clubs","Spades"}是检查会员资格的更有效方式

答案 2 :(得分:2)

您可以使用in运算符:

accepted = ['Diamonds', 'Hearts', 'Clubs', 'Spades']
if suit in accepted:
  return "accepted"
else:
  return "wrong input"

答案 3 :(得分:2)

我不知道这是否符合您的需求,但有时使用字典的替代方法可能有助于if ... elif的长序列:

states = {"Diamonds": "accepted",
          "Hearts":   "accepted",
          "Clubs":    "accepted",
          "Spades":   "accepted"}
return states.get(suit,"wrong input")