Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我们能让它成为python函数,它就不会´;我什么也不退_Python - Fatal编程技术网

如果我们能让它成为python函数,它就不会´;我什么也不退

如果我们能让它成为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,

我必须编写一个函数,如果您可以仅使用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, "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