if语句中的列表理解

时间:2019-06-20 15:03:55

标签: python python-3.x if-statement list-comprehension

此刻,我正在努力使自己对列表理解有所了解,并尝试使用尽可能多的方式来构建黑石游戏。我停留在这一点:

   elif card == (char for char in ["K", "J", "Q"]):
        print("Detected facecard")

我知道使用字典或某些替代方法甚至扩展循环可能会更容易,但是我正在特别尝试了解为什么这行不通。

在....中为char打印char会产生对象类型,而不是对象。

有什么建议吗?预先感谢

2 个答案:

答案 0 :(得分:2)

vurmux所评论的是正确的方法,但这就是您所做的不起作用的原因:

(char for char in ["K", "J", "Q"])是一个生成器,所以实际上发生的是python正在将card与该生成器进行比较,这将永远是错误的。

>> x = (char for char in ["K", "Q", "J"])
>> print(x)
<generator object <genexpr> at 0x7f10752d4410>

答案 1 :(得分:1)

(char for char in ["K", "J", "Q"])构造生成器:

  

<generator object <genexpr> at 0x7f97e9f8f200>

因此,您正在尝试将一张卡(我认为它不是生成器:))与生成器进行比较。它始终是False。您只需检查card中是否有["K", "J", "Q"]

elif card in ['K', 'J', 'Q']: