【问题标题】:Creating a python scrabble function that takes a string as input and returns a score for that word [duplicate]创建一个 python 拼字游戏函数,该函数将字符串作为输入并返回该单词的分数 [重复]
【发布时间】:2015-08-26 19:22:38
【问题描述】:

您好,我正在参加 Codecademy 练习 9/15。目标是创建一个以字符串为输入的拼字游戏函数,然后返回该单词的分数。

他们给了你一本字典,这是我在谷歌上搜索“如何循环遍历字典并添加值”之后所得到的。

score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, 
         "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, 
         "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, 
         "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, 
         "x": 8, "z": 10}




1) total = 0 # takes your input word value and saves it to total 


2) def scrabble_score(x):       # defining function name 
3)     for i in score.values(): # loops through score           
4)         total += i           # sums up your input key value
5)     return i 

此代码不断抛出局部变量总错误。

这是否意味着总变量不适用于 scrabble_score(x) 函数?

【问题讨论】:

  • 你还有一个不同的问题。请注意,您永远不会在函数中使用变量x,这意味着返回的任何结果都不取决于输入单词。在函数内部声明 total 可能会更好,这样每次调用函数时都可以计算不同的总数。
  • 您还返回了i,这意味着您只是返回了最后一个分数。

标签: python


【解决方案1】:

你需要把total = 0放在函数里面,你需要循环输入的单词,然后从字典中添加每个字母的分数。您还需要返回total,而不是i

SCORES = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, 
          "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, 
          "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, 
          "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, 
          "x": 8, "z": 10}

def scrabble_score(word):
    total = 0
    for letter in word:
        total += SCORES[letter]
    return total

这是另一种方法,以备不时之需:

def scrabble_score(word):
    return sum(SCORES[letter] for letter in word)

【讨论】:

  • 只是为了澄清“total+= SCORES[letter]
  • @PRamos,我不明白你的意思。
【解决方案2】:

您有total += i,但此时范围内没有名为total 的变量。考虑在循环之前使用total=0 对其进行初始化。或者,将total 声明为全局变量。

另外,您的循环似乎没有考虑x 的值,所以它要做的就是计算所有可能分数的总和。

然后返回一个索引而不是总数。

【讨论】:

    【解决方案3】:

    当你使用字典时,你不需要遍历它。访问字典值的方法非常简单。例如,在您拥有的字典中:

    score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, 
             "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, 
             "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, 
             "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, 
             "x": 8, "z": 10}
    

    如果您想获得 'a' 的值,您只需: score['a'] 这将返回为键“a”设置的值,您将得到1。如果你想使用变量,你可以这样做:

    test='b'
    total=score[test]
    print(total)
    

    你会得到:

    3
    

    您所要做的就是遍历您拥有的字符串并调用每个字母并将它们添加到总数中。 确保在开始之前将总数设置为0,否则会出错。遍历完单词中的每个字母后,返回总数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2020-02-10
      • 1970-01-01
      相关资源
      最近更新 更多