if ('0' or '13' or '26' or '39') in user and accumulator + 11 <= 21:
accumulator += 11
print 'ADDING 11!!!!!'
elif ('0' or '13' or '26' or '39') in user:
accumulator + 1
print 'ADDING 1'
这是整个计划的背景。我在那里有print
语句用于调试目的,但是,我在if
语句中遇到问题,确定0,13,26或39是否在列表中{{1}并且user
不会超过21.我试过没有括号和单引号,任何建议?
答案 0 :(得分:2)
如果您正在检查整数而不是包含ASCII数字的字符串,是的,请不要使用单引号。
你的意思是
if any(x in user for x in ('0', '13', '26', '39')) and accumulator + 11 <= 21:
它说的是什么 - 它会检查这些字符串中的任何一个(或数字,如果删除引号)都在列表user
中。
您需要对elif
进行相同的更改。
另外,你的意思是
accumulator += 1
而不是
accumulator + 1
答案 1 :(得分:0)
accumulator + 1
应该是
accumulator += 1
答案 2 :(得分:0)
正如@agf所提到的,对多个any
使用or
并对多个all
使用and
将是处理上述问题的自然方法,可以是使用set
例如
给定
user1=['1','13','25']
and
user2=['0','1','13','14','26','27','39']
if ('0' or '13' or '26' or '39') in user1
通常写为
any(x in user1 for x in ['0' , '13' , '26' , '39'])
也可以写成
not set(['0' , '13' , '26' , '39']).isdisjoint(user1)
or
len(set(['0' , '13' , '26' , '39']).intersection(user1))>0
,同样
if ('0' and '13' and '26' and '39') in user2
通常写为
all(x in user2 for x in ['0' , '13' , '26' , '39'])
也可以写成
len(set(['0' , '13' , '26' , '39']).difference(user2)) == 0
所以回到你的问题,使用set intersection我们可以写为
if not set(['0' , '13' , '26' , '39']).isdisjoint(user1) and accumulator + 11 <= 21:
accumulator += 11
print 'ADDING 11!!!!!'
elif ('0' or '13' or '26' or '39') in user:
accumulator += 1
print 'ADDING 1'
答案 3 :(得分:0)
其他一些答案很好,但对于Python新手来说可能并不清楚。这里有一些更清晰的东西(但不是pythonic,在用户中没有查找号码的情况下可能更慢,等等......是的,我知道)。
lookup_numbers = ['0', '13', '26', '39']
num_found = False
for lookup_number in lookup_numbers:
if lookup_number in user:
num_found = True
break
if num_found:
if ((accumulator + 11) <= 21):
accumulator += 11
else:
accumulator += 1
注意:如果您的用户列表包含字符串,请在 lookup_numbers 中保留每个条目的引号。如果包含整数,则删除引号。