因此,在一个列表中,我需要检查'z‘是否与所选的情况相同,并返回True,但是如果有什么东西在路上,例如'x’,它就返回False。我做了一个代码,但问题是,如果有两个‘z’,左边的一个被'x‘阻塞,而另一个不是,则返回False,但应该是True。对其他案件来说很好。希望你能理解我,我很难解释这些事情。
def row(lst,i,j):
c = 0
if 'z' not in lst[i]:
c += 1
else:
for n in range(0,len(lst[i])):
if lst[i][n] == 'z' and n > j:
for m in range(j,n):
if lst[i][m] == 'x':
c += 1
else:
c = 0
break
if lst[i][n] == 'z' and j > n:
for m in range(n,j):
if lst[i][m] == 'x':
c += 1
else:
c = 0
break
if c > 0:
return False
elif c == 0:
return True我真的不知道这里到底是什么“破坏”,但我使用的列表是:
lst = [['_','_','_','_','_'],['z','x','_','_','z'],['_','_','x','_','_']]我正在调查的案子是lst1。
['_','x','_','_','z']返回True,行中有'z‘。
['_','x','_','x','z']返回False,z被阻塞。
['z','x','_','x','z']返回假
['z','x','_','_','z']问题:应该返回真
发布于 2016-11-14 01:36:35
这一行有两半要检查。(i,j)之前的(i,j)和(i,j)后面的。
问题是你还没到下半场就已经崩溃了。另外,我不知道你在和c做什么。
无论如何,一个解决办法可以是:
def check_row(lst, i, j):
if 'z' not in lst[i]:
return False
for n in range(j, 0, -1):
if lst[i][n] == 'z':
return True
elif lst[i][n] == 'x':
break
for n in range(j + 1, len(lst[i])):
if lst[i][n] == 'z':
return True
elif lst[i][n] == 'x':
break
return False这样做的目的是从目标值中寻找。首先,我们从目标循环到行的前面,然后从目标循环到行的末尾。在任何时候,如果它遇到'z',我们立即返回True。如果它遇到'x',我们就在那个方向中断搜索。我们被封锁了。
如果我们到达终点,这意味着我们还没有找到'z',所以我们返回False。
这可能会大大缩短,但这个基本版本应该可以工作。
https://stackoverflow.com/questions/40580259
复制相似问题