繁体   English   中英

使用 for 循环/Python 定义函数

[英]defining a fuction using the for loop / Python

我需要使用for 循环定义一个函数。 它的目的是检查secret_word 中包含的字母是否已包含在 old_letters_guessed列表中。 如果是,则函数返回 True。 否则,错误。 这是我到目前为止写的:

def check_win(secret_word, old_letters_guessed):
   for letter in old_letters_guessed or secret_word:
    if (secret_word.count(letter) > old_letters_guessed.count(letter)) and (old_letters_guessed.count(letter) == 0) or (secret_word.count(letter) > 0) and (old_letters_guessed.count(letter) == 0):
     return False
    else:
     return True

它在这些情况下工作正常:

check_win('typewriter',['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'])

True

check_win('typewriter',[])

False

check_win('',['q'])

True

但在这里,它不是返回 False,而是返回 True:

check_win('typewriter',['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o'])

True

我已经尝试多次更改它但没有成功,希望您能提供帮助。

非常感谢!

你可以使用这个:

def check_win(word, guessed):
    for letter in word:
        if letter not in guessed:
            return False
    return True

print(check_win('typewriter', ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'])) # True
print(check_win('typewriter', [])) # False
print(check_win('', ['q'])) # True
print(check_win('typewriter', ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o'])) # False

您的代码中发生的情况是它在第一次迭代中返回了某些内容,从而使 for 循环无用。

重新定义函数:

试试看:

def check_win(secret_word, old_letters_guessed):
    for letter in old_letters_guessed:
        yield letter in secret_word     # same as: if letter in secret_word: yield True, else: yield False

secret = "typewriter"
old = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p']

调用这个“yielding-function”不像函数通常那样工作,因为它是一个生成器

print(check_win(secret,old))
returns <generator object check_win at 0x0000020BFF8480B0>

实例化生成器对象:

mygenerator = check_win(secret,old)
n = 0
for i in mygenerator:
    print(f"{old[n]} is in {secret}: {i}")
    n += 1
returns:
>>> q is in typewriter: False
>>> w is in typewriter: True
>>> e is in typewriter: True
>>> r is in typewriter: True
>>> t is in typewriter: True
>>> y is in typewriter: True
>>> u is in typewriter: False
>>> i is in typewriter: True
>>> o is in typewriter: False
>>> p is in typewriter: True

一旦这正常工作,您就可以考虑计算匹配项的方法。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM