[英]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']
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.