因此,我正在尝试为一个hang子手游戏编写一个函数,该函数将返回由小写英文字母组成的字符串-所有未使用letterGuessed的小写英文字母。我看不到让列表理解功能正常工作
def getAvailableLetters(lettersGuessed):
'''
lettersGuessed: list, what letters have been guessed so far
returns: string, comprised of letters that represents what letters have not
yet been guessed.
'''
[letterGuessed.remove(letter) if letter in'abcdefghijklmnopqrstuvwxyz' for letter in lettersGuessed ]
答案 0 :(得分:1)
[letter for letter in 'abcdefghijklmnopqrstuvwxyz' if letter not in lettersGuessed]
要详细说明为什么这样做,可以考虑并列出以下内容:
[ expression for item in list if conditional ]
在我们的例子中,list
是字母。
我们的expression
只是list
中的单个字母,而我们的conditional
是lettersGuessed
中不存在的字母。
令人高兴的是,它几乎可以翻译成英文句子,应该易于理解。
如果字母不在猜字母列表中,请给我每个字母
我建议您通读这篇文章,因为对列表理解有很好的了解将为您的python编码带来巨大的好处。 https://www.pythonforbeginners.com/basics/list-comprehensions-in-python
答案 1 :(得分:0)
需要扩展@scoJo的回复,这是我的看法。
import string
test_guesses = ['a','b','f']
def getAvailableLetters(lettersGuessed):
# Note that we're ensuring that input letters are lowercase when being compared to the list.
return ''.join([i for i in string.ascii_lowercase if i.lower() not in lettersGuessed])
在原始答复中,您是从猜测字母列表中删除字母,而不是字母。
我的解决方案还利用Python的字符串标准库来创建字母列表,而不必确保您键入了每个字母。
如果要返回列表,只需删除.join()函数。
输入:
getAvailableLetters(test_guesses)
输出:
'cdeghijklmnopqrstuvwxyz'
答案 2 :(得分:0)
为简单起见,我建议使用Python sets
集合是“独特元素的无序集合”
TypeError: context must be a dict rather than ReturnList.
这样,您可以做一个简单的减法来检索可用字母的列表,然后将此列表连接到单个字符串。
无需手动迭代
注意:如果要保留仍然可用的字母的排序顺序,请在返回字符串之前使用Python的sort函数
<iframe
src="http://mywebsite.com"
style="border:0px #ffffff none;"
name="myiFrame"
scrolling="no"
frameborder="1"
marginheight="0px"
marginwidth="0px"
height="400px"
width="600px"
allowfullscreen
></iframe>