Python字符和索引匹配

2024-04-26 14:41:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道我做错了什么。我想要一个简单的方法来匹配两个字符串中的字符和位置。错误在于它没有识别出我想要的索引。你知道吗

我是新手。:)我想专家们可以理解我在这里开始尝试做什么。我不想复制一个复杂的牛和牛的代码,我只是想做这个早期的部分。请告知:

def bulls_and_cows(real, guess):
    bulls = 0
    cows = 0
    for i in guess:
        if i == i in real:
            if i[x] == i[x]
            bulls = bulls + 1
            print ("Bullseye!")
            print(bulls)
    else:
        print("No")

bulls_and_cows("like", "brig")

Tags: and方法字符串代码inif错误字符
3条回答

希望下面的代码对您来说不是太高级。它使用了非常方便的enumerate函数,让我们在字符串上循环并获得索引和字符。实际上,enumerate是一个通用函数,当我们需要获取项及其索引时,它可以用于任何for循环。你知道吗

def bulls_and_cows(real, guess):
    bulls = cows = 0
    for i, c in enumerate(guess):
        if c in real:
            # We have a match!
            if real[i] == c:
                # And it's in the correct position
                bulls += 1
            else:
                cows += 1

    print('Bulls', bulls, 'Cows', cows)

bulls_and_cows("like", "brig")

输出

Bulls 0 Cows 1

我的代码不能产生您想要的确切输出,但我相信您一定能找到答案。;)


如果您不能完全理解我的代码是如何工作的,请尝试

print(i, c)

作为for i, c in enumerate(guess):块中的第一行,在if c in real:行之前。你知道吗

您可以使用许多方便的实用工具,最重要的是zip

from collections import Counter
def bulls_and_cows(real, guess):
    # count bulls
    bulls = sum(x == y for x, y in zip(real, guess))

    # get letter counts separately for each string
    c1, c2 = map(Counter, (real, guess))

    # cows: sum min count for any letter, subtract bulls
    cows = sum(min(c1[x], c2[x]) for x in set(real) | set(guess)) - bulls

    print(bulls, cows)

对于纯显式迭代计数:

def bulls_and_cows(real, guess):
    bulls = 0
    for r, g in zip(real, guess):
        if r == g:
            bulls += 1
    print(bulls)

排队

for i in guess:

变量i将是字符串guess中的每个字符,而不是索引。如果要同时获取索引和字符,则需要使用enumerate()。你知道吗

下一步我不知道你打算比较什么

if i == i in real:

此外,x在此行之前的任何位置都没有初始化:

if i[x] == i[x]

相关问题 更多 >