如果我们能让它成为python函数,它就不会´;我什么也不退
我必须编写一个函数,如果您可以仅使用Myletter中的字母拼写myWord,则该函数应返回bool值True,如果不能,则返回bool值False。如果我们能让它成为python函数,它就不会´;我什么也不退,python,Python,我必须编写一个函数,如果您可以仅使用Myletter中的字母拼写myWord,则该函数应返回bool值True,如果不能,则返回bool值False。 为此,我需要我的letterPoints字典,它是: global letterPoints letterPoints = {"A": 1, "B": 3, "C": 3, "D": 2, "E": 1, "F": 4, "G": 2, "H": 4, "I": 1, "J":8, "K": 5, "L": 1, "M": 3, "N": 1,
为此,我需要我的letterPoints字典,它是:
global letterPoints
letterPoints = {"A": 1, "B": 3, "C": 3, "D": 2, "E": 1, "F": 4, "G": 2, "H": 4, "I": 1, "J":8, "K": 5, "L": 1, "M": 3, "N": 1, "O": 1, "P": 3, "Q": 10, "R": 1, "S": 1, "T": 1, "U": 1, "V": 4, "W": 4, "X": 8, "Y": 4, "Z": 10}
def canWeMakeIt(myWord, myLetters):
canMake = True
letterPoints= list(myLetters)
length=len(myWord)
for i in range(length):
i=i+1
letter=myWord[i]
if letter not in letterPoints:
canMake = False
else:
letterPoints.remove(letter)
return canMake
这是你的函数
def canWeMakeIt(my_word, letters):
allowed = list(letters):
for i in my_word:
if i not in allowed:
return False
return True
#NOTICE HOW YOU MUST CALL IT TO DO SOMETHING
print(canWeMakeIt("cat","tack"))
现在让我们分析一下您的代码:
- 你的缩进不正确
- 你不必在for循环中增加i
- 如果你不知道如何使用dict,你就不需要使用dict,这是不必要的
def canWeMakeIt(myWord, myLetters):
canMake = True
letterPoints = list(myLetters)
length = len(myWord)
for i in range(length):
letter = myWord[i]
if letter not in letterPoints:
canMake = False
return canMake
print(canWeMakeIt("cat","tac"))
你注意到了区别;) 您可以通过a对
word
中的字母进行计数,然后将这些字母和出现次数与传递给函数的字典可用字母的键和值进行比较:
from collections import Counter
def can_we_make_it(word, available_letters):
letter_counter = Counter(word.upper())
for letter, count in letter_counter.items():
if count > available_letters.get(letter, 0):
return False
return True
在您提供的示例中,传递给函数的字典键是大写的。我在这里做同样的假设,即可用字母
的键是大写字母。需要注意的是,由于Python区分大小写,因此有必要通过word.upper()
将word
转换为大写,以避免KeyError
在word
包含小写字母时出现异常
还值得指出的是,您应该检查条件count>available\u letters.get(letter,0)
而不是count>available\u letters[letter]
,以避免word
包含available\u letters
中不存在的字母时出现keyrerror
异常
演示:
注意:我已随意更改标识符,使其更具python风格。方法不正确,您没有调用它,返回什么,我该怎么做?您只能使用dict键字母的值数?此函数不可能不返回任何内容,你真的叫它了吗?@hackintosjdn:删除行i=i+1
,并使用带括号的print
:print(canWeMakeIt('cat','tac'))
。看看如果你尝试canWeMakeIt(“cat”,“tac”)
@Tonechas当前它区分大小写会发生什么?这就是我想我不知道为什么当我说:canWeMakeIt(“食物”,“阿福多”)时,它会返回True而不是False。错误在哪里?错误是在允许的部分中,您有所有三个字符f,o,d
doo-word-foor可以生成
In [275]: can_we_make_it('one', {'O': 1, 'N': 1, 'E': 1})
Out[275]: True
In [276]: can_we_make_it('Zone', {'O': 1, 'N': 1, 'E': 1})
Out[276]: False
In [277]: can_we_make_it('Zone', {'O': 1, 'N': 1, 'E': 1, 'Z': 1})
Out[277]: True
In [278]: can_we_make_it('ozone', {'O': 1, 'N': 1, 'E': 1, 'Z': 1})
Out[278]: False
In [279]: can_we_make_it('ozone', {'O': 2, 'N': 1, 'E': 1, 'Z': 1})
Out[279]: True