尝试为两个字符串

时间:2017-10-27 17:15:42

标签: python python-3.x

我自己编写了以下代码(基于doc字符串中解释的一些说明):

def find_correct(answer, guess):
'''
(list, list) -> list
Given the answer code and a guess code, return
a list containing the string 'b' for each correctly positioned
colour in the guess. For example, if answer is 'YOGB' and guess is
'RTLB', ['b'] will be returned since index 3 in both is B. If answer is 'YOGB'
and guess is 'YTLB', ['b','b'] will be returned since index 0 in both is Y and
index 3 in both is B (ie. two 'b's in the list since two indexes match)
'''
for i in range(len(guess)):
    if answer[i] == guess[i]:
        return ['b']

然而,无论有多少索引匹配,这只返回一个['b'](除非没有匹配,在这种情况下没有返回任何内容),因为我只写了return ['b']。我不知道如何让它返回多个b。我试过了几件事:

 return ['b'] for i in range(len(guess)):
     if answer[i] == guess[i]

正在做

  return ['b'] * i

但显然这些都不是因为我认为我理解的原因(但我认为无论如何都会尝试)。是否有一种简单的方法可以使代码完成我想要的而无需完全重写我已编写的代码,或者我应该回到绘图板?也许有一些方法我可以使用a.count(b)函数然后将该结果乘以['b']?只是一个我一直在尝试的想法。谢谢!

4 个答案:

答案 0 :(得分:0)

可能你想要这个:

def find_correct(answer, guess):
    l=[]
    for i in range(len(guess)):
        if answer[i] == guess[i]:
            l.append('b')
    return l
print(find_correct('YOGB','RYLB'))

输出:

['b']

请记住,只要遇到return,您就会退出该功能。所以,制作一个清单并在最后归还。

如果你想要一个班轮,

def find_correct(answer, guess):
    return ['b' for i in range(len(guess)) if answer[i] == guess[i]]

答案 1 :(得分:0)

你接近正确的答案!就像许多人所说的那样,你只需要制作一份清单并在其中附加,直到你完成为止。然后,返回该列表!见下文:

def find_correct(answer, guess):
    return_list = []
    for i in range(len(guess)):
        if answer[i] == guess[i]:
            return_list.append('b')
    return return_list

答案 2 :(得分:0)

实现这一目标的最佳方法是通过列表理解。

def find_correct(answer, guess):
    return ['b' for a,g in zip(answer, guess) if a == g]

这样做是一次遍历answerguess一个元素,如果元素相同,则将'b'添加到新列表中。

zip接受一系列迭代器并返回一个迭代器,它给出一个元组,每个元素都是相应迭代器的下一个元素。

答案 3 :(得分:0)

使用itertoolsproduct的另一种方式,以及其他人建议使用lists

def find_correct(answer, guess):
    l = [(a,b) for a,b in itertools.product(answer, guess) if a==b]  
    return ['b']*len(l)

find_correct('YOGB','RTLB')
['b']

find_correct('YOGB','YTLB')
['b', 'b']

find_correct('RYLB','RGBY')
['b', 'b', 'b']