簡體   English   中英

遍歷字符串以找到匹配的字符並生成不同的表情符號

[英]Iterate through a string to find matching characters and produce different emoji

如何從表情符號化的emojified中調用contains_char

我希望能夠遍歷guess_word以查看secret_word中是否有任何匹配的字母。 如果有匹配的字母,output 應該有綠色的表情符號框。 如果沒有匹配的字母,output 應該有白色的表情符號框。 如果存在字母但不在正確的 position 中,則 output 應該有黃色框。

def contains_char(any_length: str, single_character: str) -> bool:
    """Loop iterates through each character in string to find matching character."""
    assert len(single_character) == 1
    if single_character in any_length:
        return True 
    else:
        return False

def emojified(guess_word: str, secret_word: str) -> str:
    """A way to match letters to its corresponding emoji color output. """
    assert len(guess_word) == len(secret_word)
    WHITE_BOX: str = "\U00002B1C"
    GREEN_BOX: str = "\U0001F7E9"
    YELLOW_BOX: str = "\U0001F7E8"
    emoji_color: str = ""
    i: int = 0 
    contains_char
    while i < len(guess_word):
        if guess_word[0] == secret_word[0]:
            emoji_color += GREEN_BOX
        else:
            emoji_color += WHITE_BOX
            
        print(emoji_color)

我希望 output 如下圖所示。 謝謝!

圖片

你把這個復雜化了。

def emojified(guess_word: str, secret_word: str) -> str:
    assert len(guess_word) == len(secret_word)
    WHITE_BOX: str = "\u2B1C"
    GREEN_BOX: str = "\U0001F7E9"
    YELLOW_BOX: str = "\U0001F7E8"
    output: list = []
    this_box: str = ''
    for i, char in enumerate(guess_word):
        if i < len(secret_word) and secret_word[i] == char:
            this_box = GREEN_BOX
        elif char in secret_word:
            this_box = YELLOW_BOX
        else:
            this_box = WHITE_BOX
        output.append(this_box)
    return ''.join(output)

assert可能不是處理這個問題的最佳方式; Python 可以在某些情況下禁用斷言語句。 如果檢查應該是您的生產邏輯的一部分,則可能會重構它以引發異常。

如果您確保兩個字符串的長度相同,則條件i < len(secret_word)是多余的,但我認為保留它更安全,以防您想放寬該條件。

追加到字符串的成本相對較高,因此一個好的做法是將事物收集到一個列表中,並且只在最后將列表加入到一個字符串中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM