我将接受一个意见 n 然后打印 n 每一行我都会输入一个字符串,如果这个字符串是 "++X "或 "X++",那么我将在0的基础上加1(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。那么,我的代码有什么问题,如何解决这个问题?
参考文献。https:/docs.python.org3referenceexpressions.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
,还有其他有趣的情况下,评估到的是 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 = 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"):
你忘了和我比 a
的第二个操作数中。or
s. 非空的字符串将计算为 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)