在 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
的情况,还有其他有趣的情况在表达式中计算为 True
或 False
。例如,列表:
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
我将输入 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
的情况,还有其他有趣的情况在表达式中计算为 True
或 False
。例如,列表:
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