【问题标题】:if Statement returns true when it is not python [duplicate]if 语句在不是 python 时返回 true [重复]
【发布时间】:2021-11-29 20:07:29
【问题描述】:

为二十一点游戏编写代码。构建了一个“if”语句来评估拼出卡片的字符串的第一个字符,因此我可以为卡片分配一个“int”值。前任。 '[0]' 索引应该是 'k' 对于 king 并且值应该增加 10。

    #face cards
    if card_1_split[0] == 'k' or 'q' or 'j':
        card_value += 10
        
    elif card_1_split[0] == 'a':
        #determining ace
        ace_value = input('Do you want the Ace to be an 11 or 1?>>')
        if ace_value == '11':
            card_value += 11
        else:
            card_value +=1
            
    #number cards        
    else:
        card_value += int(card_1_split[0])

但由于某种原因,第一个 if 语句总是返回 true(即使它不是)并且卡值增加 10。

这是从牌组中随机抽取两张牌的输出

''' 2_of_hearts 8_of_clubs

2 #我打印出第一张卡片的索引[0],表明索引正确。

你的总分是:20 '''

卡值应该先增加 2,然后再增加 8,但它总是增加 10。总数是 20,因为我将上面的第一个代码块运行了两次(每张卡一个),但只包括第一张卡的代码因为它们是同一个东西。

【问题讨论】:

  • or 语句通过短路工作,类似于 java 中的||。所以在java中你会在上面的if stmnt中说:if x == 'k' || 'q' (is truthy) || 'j' (is truthy),它总是评估为真,因为值q是真的。
  • 在这种情况下,您可能需要 if card in ('k', 'q', 'j'):
  • Operator precedence== 的优先级高于or,因此card_1_split[0] == 'k' 首先被解析,其结果成为两个or 测试的第一个值。

标签: python if-statement boolean blackjack


【解决方案1】:

看待这个问题的一种方式是“扩展”python 处理“真实”值的方式。非空字符串计为真,空字符串计为假,所以你这里写的是:

if card_1_split[0] == 'k' or true or true:

所以它测试:

  • card_1_split[0] == 'k' 吗? (也许)
  • 'q' 的布尔表示是否正确? (是的,总是)
  • 'j' 的布尔表示是否正确? (是的,总是)

后两者都是正确的,所以你总是正确的。

你有两个选择:

if card_1_split[0] == 'k' or card_1_split[0] == 'q' or card_1_split[0] == 'j':

或者,也许更优雅:

if card_1_split[0] in ['k', 'q', 'j']:

【讨论】:

    【解决方案2】:

    Python 评估布尔值 card_1_split[0] == 'k' or 'q' or 'j'(card_1_split[0] == 'k') or 'q' or 'j'. The strings 'q'and'j'` 总是评估为真。默认情况下,python 中只有某些值评估为 False,所有其他值默认评估为 true。

    https://www.programiz.com/python-programming/methods/built-in/bool

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 2016-02-12
      • 2016-01-04
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2016-09-03
      相关资源
      最近更新 更多