Python 在字符串中添加/追加每个事件

Python 在字符串中添加/追加每个事件,python,if-statement,append,Python,If Statement,Append,我正在研究奶牛/公牛的游戏,我知道这个问题已经被回答了一千遍,但是我还没有看到这个特殊的方法出现,我很困惑我到底做错了什么 我试图使一个列表的计数每出现一个存在于两个列表之间但不在同一索引位置的数字,就增加1。见下面的例子 n = [1,2,3,4] solution = [0,3,1,0] bulls = 0 cows = 0 for i in solution: if i != n[0]: if i in n: bulls +=1

我正在研究奶牛/公牛的游戏,我知道这个问题已经被回答了一千遍,但是我还没有看到这个特殊的方法出现,我很困惑我到底做错了什么

我试图使一个列表的计数每出现一个存在于两个列表之间但不在同一索引位置的数字,就增加1。见下面的例子

n = [1,2,3,4]
solution = [0,3,1,0]
bulls = 0
cows = 0
     
for i in solution:
    if i != n[0]:
        if i in n:
            bulls +=1
            print (bulls)
我也试着用下面的方法写这篇文章,但没有成功

n = [1,2,3,4]
solution = [0,3,1,0]
bulls = [0]
cows = [0]
     
for i in solution:
    if i != n[0] and i in n:
        bulls.append(1)
        bulls = sum(bulls)
        print (bulls)
这两个代码块都返回1,根据权限,它们应该返回2(1用于列表中匹配的1,1用于匹配的3)


任何洞察都将不胜感激。

这里有一个简单的解决方案。您的一个主要问题是,在循环的每次迭代中,您都告诉bulls为1(
bulls=sum(bulls)
)。另一个问题是,当您应该检查
n[currentSolutionIndex]

n = [1,2,3,4]
solution = [0,3,1,0]
bulls = 0
cows = 0
 
for i, data in enumerate(solution):
    if data in n:
        if data != n[i]: #if they aren't the same index
            bulls += 1
        else:            #otherwise they are the same index
            cows += 1
    
print(bulls) #2
print(cows)  #0
这里有一个替代的例子,我给你介绍更多的东西。这不一定是处理这个问题的好方法,但它向您介绍了更多的概念,并且这个问题是理解它们的一个简单方法。使用
zip
我们可以一次迭代2个数组
f1
farm1
值,
f2
farm2
值。我们还使用了一个列表生成器,因此我们可以将所有逻辑保持在一行上

这里有一件重要的事情需要注意~
副作用是糟糕的编码实践。在本例中,我们使用列表生成器的最终目的是解析其中的数字。这是一种副作用。我们应该使用列表生成器来获取列表。在这里,我们滥用列表生成器的唯一目的是将其转储到
sum
。简言之,这个例子没有一个是好的整体,但采取零碎和负责任地使用它说明了一些方便的概念

farm1 = [0,2,3,1]
farm2 = [1,2,3,4]

cows = sum([1 for f1, f2 in zip(farm1, farm2) if f1 == f2])
bulls = sum([1 for f1, f2 in zip(farm1, farm2) if f1 != f2 and f1 in farm2])

print(cows)  #2
print(bulls) #1

这里有一个简单的解决方案。您的一个主要问题是,在循环的每次迭代中,您都告诉bulls为1(
bulls=sum(bulls)
)。另一个问题是,当您应该检查
n[currentSolutionIndex]

n = [1,2,3,4]
solution = [0,3,1,0]
bulls = 0
cows = 0
 
for i, data in enumerate(solution):
    if data in n:
        if data != n[i]: #if they aren't the same index
            bulls += 1
        else:            #otherwise they are the same index
            cows += 1
    
print(bulls) #2
print(cows)  #0
这里有一个替代的例子,我给你介绍更多的东西。这不一定是处理这个问题的好方法,但它向您介绍了更多的概念,并且这个问题是理解它们的一个简单方法。使用
zip
我们可以一次迭代2个数组
f1
farm1
值,
f2
farm2
值。我们还使用了一个列表生成器,因此我们可以将所有逻辑保持在一行上

这里有一件重要的事情需要注意~
副作用是糟糕的编码实践。在本例中,我们使用列表生成器的最终目的是解析其中的数字。这是一种副作用。我们应该使用列表生成器来获取列表。在这里,我们滥用列表生成器的唯一目的是将其转储到
sum
。简言之,这个例子没有一个是好的整体,但采取零碎和负责任地使用它说明了一些方便的概念

farm1 = [0,2,3,1]
farm2 = [1,2,3,4]

cows = sum([1 for f1, f2 in zip(farm1, farm2) if f1 == f2])
bulls = sum([1 for f1, f2 in zip(farm1, farm2) if f1 != f2 and f1 in farm2])

print(cows)  #2
print(bulls) #1

谢谢,我只是在学习python,这是我遇到的第一个真正陷入困境的概念。我不知道枚举函数,它非常有用。@Brandon Covington-我很高兴能帮上忙。如果我的答案解决了你的问题,请记住选择它作为解决方案。你的答案解决了,我只是做了标记。这也产生了一个新的问题,但这只是因为当索引位置匹配时,必须找出如何附加计数,但这是另一个问题。@Brandon Covington-谢谢你,先生。给我一分钟,我在这里回答你的第二个问题。谢谢你,你刚才向我展示的概念是我一直在努力理解的,你把它们放在一种非常容易想象的方式。我将把这个关于这种语言如何工作的例子添加到我的跑步笔记列表中。我使用了这个代码,它工作得非常完美(更不用说完全手动操作可以节省大约50行代码。我衷心感谢您的帮助,我将阅读副作用的相关内容,以了解它们的工作原理以及如何避免它们。谢谢您,我只是在学习python,这是我遇到的第一个真正陷入困境的概念。我不知道enumerate函数,这非常有帮助。@Brandon Covington-我很高兴我能帮上忙。如果我的答案解决了你的问题,请记住选择它作为解决方案。你的答案解决了,我只是做了标记。这也产生了一个新问题,但只是因为当索引位置匹配时,必须找出如何附加计数,但这是另一个问题@Brandon Covington-谢谢你,先生。给我一分钟,我在这里回答你的第二个问题。谢谢你,你刚才向我展示的概念是我一直在努力理解的东西,你以一种非常容易形象化的方式来表达它们。我将把这种语言如何工作的示例添加到我的跑步笔记列表中。我使用了这个代码,而且它工作得非常完美(更不用说完全手动操作可以节省大约50行代码)。我衷心感谢您的帮助,我将阅读副作用的相关内容,以了解它们的工作原理以及如何避免它们。