在 python 中的 for 循环内递增或递减的 if-else 语句

if-else statement to increment or decrement inside for loop in python

我将输入 n 然后打印 n 行的 lines.Every 我将输入一个字符串如果这样string 是 "++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。那么,我的代码有什么问题,我该如何解决?

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)

:)

改变你的条件从

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

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

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

您忘记在 or 的每个第二个操作数中与 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)

参考: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.

另一种 shorthand 方法来测试一个变量是否有一个可能是几个备选的值是使用 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