首页 > 解决方案 > 如何检测元组的特定部分?

问题描述

处理一个家庭作业问题,该问题要求我编写一个程序,该程序需要一组元组并检测它是否算作多米诺骨牌循环。例如,如果给定 tuples [(1,2),(2,3),(3,4)],程序将返回True。如果给出一个类似的例子[(1,2),(3,4),(7,6)],它将返回False。此外,如果只给出了一组元组,但其中的两个值相同,例如[(5,5)]True应该返回,否则False,例如[(2,3)]。这是我遇到问题的部分,是让程序检测何时给出单个元组以及其中的值是否相同。游戏中也有空的多米诺骨牌,如果给出一个空列表,例如“[]”,我希望程序返回 True。

这是我到目前为止所拥有的,None当我尝试为一对元组运行它时它只会返回。对于多对元组,它可以工作。

def cycle(tiles):
    for i in range(len(tiles)-1):
        tile1 = tiles[i]
        tile2 = tiles [i+1]

        if tile1[1:] == tile2[0:1] or ((tile1 and not tile2) or (not tile1 and not tile2)):
            return True
        else:
            return False

print (cycle([(4,4)]))

标签: pythonloopsfor-loopif-statementwhile-loop

解决方案


这应该有效:

dominoes=[(1,2),(1,3),(3,4),(4,5),(5,6)]
def isdomino(agg, item):
   #print(agg, item)
   if agg[0] == 1:
      if item[0] == item[1]:
         return 'True', ''
      else:
         return 'False', ''
   else:  
     if agg[0] == 'False':
       return 'False', ''
     if agg[1] == item[0]:
       return 'True', item[1]
     return 'False', item[1]

def checkdominoes(dominoes):
   if len(dominoes) == 0:
     return ('True', '')
   else:
     return reduce(isdomino, dominoes, (len(dominoes),dominoes[0][0]))


dominoes=[(1,2),(1,3),(3,4),(4,5),(5,6)]
something = checkdominoes(dominoes)
eval(something[0])
# False

dominoes=[(1,2),(2,3),(3,4),(4,5),(5,6)]
something = checkdominoes(dominoes)
eval(something[0])
# True

dominoes=[(1,2)]
something = checkdominoes(dominoes)
eval(something[0])
# False

dominoes=[(2,2)]
something = checkdominoes(dominoes)
eval(something[0])
# True

dominoes=[]
something = checkdominoes(dominoes)
eval(something[0])
# True


推荐阅读