【问题标题】:if-else statement to increment or decrement inside for loop in pythonif-else语句在python中的for循环内递增或递减
【发布时间】:2020-05-14 12:36:07
【问题描述】:

我将输入一个n,然后打印n行数。如果这个字符串是“++X”或“X++”,每一行我都会输入一个字符串" 那么我将 1 与 0 相加(X 的初始值为 0)。如果我的字符串是“--X”或“X--”,那么我将从 0 中减去 1。(如果我已经取了另一个字符串,则从该字符串值中减去)。

这是我的代码:

n = int(input())
c = 0
for x in range(n):
    a = input()
    if a == "X++" or "++X":
        c = c + 1
    elif a == "--X" or "X--":
        c = c - 1

print(c)

我的意见:

2
X++
--X

我的输出:

2

预期输出:

0

因为,“X++”的值为 1,“--X”的值为 0。那么,我的代码有什么问题,我该如何解决?

【问题讨论】:

  • 您的or 表达式不会像您预期的那样工作。它基本上是在说 (a == "X++") or "++X": 在 Python 中总是会评估为 True 。相反,您可以这样做 if a in ('X++', '++X'):
  • 不客气 =)

标签: python-3.x for-loop if-statement increment decrement


【解决方案1】:

参考:https://docs.python.org/3/reference/expressions.html#operator-precedence

逻辑表达式中的优先顺序使您的表达式等同于if (a == "X++") or "++X":,它始终为True,因为bool("++X") == True。任何非空字符串都将为 True。因此,正如其他答案所暗示的那样,您可以使用if a == "X++" or a == "++X":,因为or 在表达式中最后被评估,interp 将首先评估相等操作,然后应用or

另一种更简写的方法来测试一个变量是否有一个可以替代的值是使用in 运算符。

n = int(input())
c = 0
for x in range(n):
    a = input()
    if a in ("X++", "++X"):
        c = c + 1
    elif a in ("--X", "X--"):
        c = c - 1

print(c)

所以你有一个非空字符串评估为True的情况,还有其他有趣的情况在表达式中评估为TrueFalse。例如,列表:

li1 = []
li2 = [1, 2]

if li1:
    print("li1")
if li2:
    print("li2")

将输出li2

奖金回合 - 使用 dict 将值与字符串输入相关联:

>>> def foo(n):
...     d = {'X++': 1, '++X': 1, '--X': -1, 'X--': -1}
...     c = 0
...     for _ in range(n):
...         a = input()
...         c += d.get(a, 0)
...     return c
...     
>>> foo(3)
<-- X++
<-- ++X
<-- ++X
3

【讨论】:

    【解决方案2】:
    n = int(input())
    c = 0
    for x in range(n):
        a = input()
        if a == "X++" or a == "++X":
            c = c + 1
        elif a == "--X" or a == "X--":
            c = c - 1
    
    print(c)
    

    :)

    【讨论】:

      【解决方案3】:

      改变你的条件

      if a == "X++" or "++X":
      

      if a == "X++" or a == "++X": 
      

      if a in ("X++", "++X"):
      

      【讨论】:

        【解决方案4】:

        您忘记在ors 的每一秒操作数中与a 进行比较。非空字符串将评估为True

        n = int(input())
        c = 0
        for x in range(n):
            a = input()
            if a == "X++" or a == "++X":
                c = c + 1
            elif a == "--X" or a == "X--":
                c = c - 1
        
        print(c)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 2014-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多