我在使用AND和OR时感到困惑,尽管这是一个基本问题,但我却感到困惑。我了解使用AND和OR逻辑运算符时会有短路方法。
Assume int a,x=0,y=0;
a). a= 10 && ++x && y++
Values a=0,x =1,y=1 [expected ]
b). a= 10 && ++x || y++
Values a=1 ,x=1,y=0 [short circuit
,expected ]
c). a= 10 || ++x || y++
Values a=1 , x=0, y=0 [short
circuit ]
我的问题是:
a = 10 && y ++
Values a =0, x=0(default didn't
change ), y=1 [ expected no short
circuit y is incremented later and
hence a =0 ]
参考问题1。
a = 10 || ++x && y++
实际值:
a=1, x=0,y=0
我所期望的:
a = 0, x=0, y=1
说明:10 || ++ x(短路)
所以我仍然使用a =(1 && y ++)=> a = 0(没有短路,并且y具有后增量),因此= 0,y = 1。
我如何理解我的问题2;我相信我错过了一些事情。
答案 0 :(得分:3)
||
和&&
都强制执行从左到右的评估。 &&
的优先级高于||
1 ,因此a || b && c
被解析为a || (b && c)
。请记住,对于a || b
,如果a
不为零,则表达式的结果为1,而与b
的值无关,因此b
不会被求值。因此,在表达式a || (b && c)
中,如果a
不为零,则不会计算(b && c)
。
因此,在给定a = 10 || x++ && ++y
的情况下,10
非零,这意味着无论x++ && ++y
的结果如何,表达式的结果均为1,因此x++
和++y
# list of unique teams (assuming home and away teams are identical)
teams = liga2['HomeTeam'].unique()
# create the dataframe
df = pd.DataFrame(index=teams, columns=['home_goals','away_goals'])
# for each team, populate the df with the sum of their home and away goals
for team in teams:
df.loc[team,'home_goals'] = liga2[ liga2.HomeTeam == team ].FTHG.sum()
df.loc[team,'away_goals'] = liga2[ liga2.AwayTeam == team ].FTAG.sum()
被评估。