Codewars - Highest Scoring WordMaximum product of word lengths in PythonEncryption and decryption using alphabetic shiftsOutputting all possible words which fit a string of lettersCamelCase word countThe BFS approach to the SmartWordToy challengeScrabble helper: find the highest score with any 7 lettersCounting ambiguous Morse Code encodings, with and without Java StreamsFind the longest sub string of a word after concatenation of given words arrayPython program for Word Search IIAdd and Search Word

Printing a list as "a, b, c." using Python

Cauterizing a wound with metal?

Under GDPR, can I give permission once to allow everyone to store and process my data?

RAID0 instead of RAID1 or 5, is this crazy?

Give Lightning Web Component a Prettier Name

Board Chinese train at a different station (on-route)

How can I observe Sgr A* with itelescope.net

Spicing up a moment of peace

Why is "I let him to sleep" incorrect (or is it)?

Which polygons can be turned inside out by a smooth deformation?

Group by consecutive index numbers

How to differentiate between two people with the same name in a story?

Why is 3/4 a simple meter while 6/8 is a compound meter?

Why do motor drives have multiple bus capacitors of small value capacitance instead of a single bus capacitor of large value?

Normalized Malbolge to Malbolge translator

Are sweatpants frowned upon on flights?

Did the Apollo Guidance Computer really use 60% of the world's ICs in 1963?

Can a network vulnerability be exploited locally?

Get contents before a colon

Heat output from a 200W electric radiator?

Why do IR remotes influence AM radios?

Pen test results for web application include a file from a forbidden directory that is not even used or referenced

Coupling two 15 Amp circuit breaker for 20 Amp

Why does Sauron not permit his followers to use his name?



Codewars - Highest Scoring Word


Maximum product of word lengths in PythonEncryption and decryption using alphabetic shiftsOutputting all possible words which fit a string of lettersCamelCase word countThe BFS approach to the SmartWordToy challengeScrabble helper: find the highest score with any 7 lettersCounting ambiguous Morse Code encodings, with and without Java StreamsFind the longest sub string of a word after concatenation of given words arrayPython program for Word Search IIAdd and Search Word






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








4












$begingroup$


Here is my solution for CodeWars - Highest Scoring Game




Given a string of words, you need to find the highest scoring word.



Each letter of a word scores points according to its position in the alphabet: a = 1, b = 2, c = 3 etc.



You need to return the highest scoring word as a string.



If two words score the same, return the word that appears earliest in the original string.



All letters will be lowercase and all inputs will be valid



Example:



Input: 'man i need a taxi up to ubud'



Output: 'taxi'




This is my solution:



def word_value(input_word):
values =
'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
'f': 6,
'g': 7,
'h': 8,
'i': 9,
'j': 10,
'k': 11,
'l': 12,
'm': 13,
'n': 14,
'o': 15,
'p': 16,
'q': 17,
'r': 18,
's': 19,
't': 20,
'u': 21,
'v': 22,
'w': 23,
'x': 24,
'y': 25,
'z': 26

value = 0
for letter in input_word:
value += values[letter]
return value

def high(x):
word_list = x.split(" ")

word_values = []
for word in word_list:
word_values.append(word_value(word))

max_value = max(word_values)
index_of_max = word_values.index(max_value)

return word_list[index_of_max]


The solution passed the test suite but I think I can improve the part where I store all the letters matched with their value. Is there any suggestions for this and in general the entire code?



Thank you.










share|improve this question







New contributor



King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$endgroup$




















    4












    $begingroup$


    Here is my solution for CodeWars - Highest Scoring Game




    Given a string of words, you need to find the highest scoring word.



    Each letter of a word scores points according to its position in the alphabet: a = 1, b = 2, c = 3 etc.



    You need to return the highest scoring word as a string.



    If two words score the same, return the word that appears earliest in the original string.



    All letters will be lowercase and all inputs will be valid



    Example:



    Input: 'man i need a taxi up to ubud'



    Output: 'taxi'




    This is my solution:



    def word_value(input_word):
    values =
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4,
    'e': 5,
    'f': 6,
    'g': 7,
    'h': 8,
    'i': 9,
    'j': 10,
    'k': 11,
    'l': 12,
    'm': 13,
    'n': 14,
    'o': 15,
    'p': 16,
    'q': 17,
    'r': 18,
    's': 19,
    't': 20,
    'u': 21,
    'v': 22,
    'w': 23,
    'x': 24,
    'y': 25,
    'z': 26

    value = 0
    for letter in input_word:
    value += values[letter]
    return value

    def high(x):
    word_list = x.split(" ")

    word_values = []
    for word in word_list:
    word_values.append(word_value(word))

    max_value = max(word_values)
    index_of_max = word_values.index(max_value)

    return word_list[index_of_max]


    The solution passed the test suite but I think I can improve the part where I store all the letters matched with their value. Is there any suggestions for this and in general the entire code?



    Thank you.










    share|improve this question







    New contributor



    King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






    $endgroup$
















      4












      4








      4





      $begingroup$


      Here is my solution for CodeWars - Highest Scoring Game




      Given a string of words, you need to find the highest scoring word.



      Each letter of a word scores points according to its position in the alphabet: a = 1, b = 2, c = 3 etc.



      You need to return the highest scoring word as a string.



      If two words score the same, return the word that appears earliest in the original string.



      All letters will be lowercase and all inputs will be valid



      Example:



      Input: 'man i need a taxi up to ubud'



      Output: 'taxi'




      This is my solution:



      def word_value(input_word):
      values =
      'a': 1,
      'b': 2,
      'c': 3,
      'd': 4,
      'e': 5,
      'f': 6,
      'g': 7,
      'h': 8,
      'i': 9,
      'j': 10,
      'k': 11,
      'l': 12,
      'm': 13,
      'n': 14,
      'o': 15,
      'p': 16,
      'q': 17,
      'r': 18,
      's': 19,
      't': 20,
      'u': 21,
      'v': 22,
      'w': 23,
      'x': 24,
      'y': 25,
      'z': 26

      value = 0
      for letter in input_word:
      value += values[letter]
      return value

      def high(x):
      word_list = x.split(" ")

      word_values = []
      for word in word_list:
      word_values.append(word_value(word))

      max_value = max(word_values)
      index_of_max = word_values.index(max_value)

      return word_list[index_of_max]


      The solution passed the test suite but I think I can improve the part where I store all the letters matched with their value. Is there any suggestions for this and in general the entire code?



      Thank you.










      share|improve this question







      New contributor



      King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      $endgroup$




      Here is my solution for CodeWars - Highest Scoring Game




      Given a string of words, you need to find the highest scoring word.



      Each letter of a word scores points according to its position in the alphabet: a = 1, b = 2, c = 3 etc.



      You need to return the highest scoring word as a string.



      If two words score the same, return the word that appears earliest in the original string.



      All letters will be lowercase and all inputs will be valid



      Example:



      Input: 'man i need a taxi up to ubud'



      Output: 'taxi'




      This is my solution:



      def word_value(input_word):
      values =
      'a': 1,
      'b': 2,
      'c': 3,
      'd': 4,
      'e': 5,
      'f': 6,
      'g': 7,
      'h': 8,
      'i': 9,
      'j': 10,
      'k': 11,
      'l': 12,
      'm': 13,
      'n': 14,
      'o': 15,
      'p': 16,
      'q': 17,
      'r': 18,
      's': 19,
      't': 20,
      'u': 21,
      'v': 22,
      'w': 23,
      'x': 24,
      'y': 25,
      'z': 26

      value = 0
      for letter in input_word:
      value += values[letter]
      return value

      def high(x):
      word_list = x.split(" ")

      word_values = []
      for word in word_list:
      word_values.append(word_value(word))

      max_value = max(word_values)
      index_of_max = word_values.index(max_value)

      return word_list[index_of_max]


      The solution passed the test suite but I think I can improve the part where I store all the letters matched with their value. Is there any suggestions for this and in general the entire code?



      Thank you.







      python programming-challenge






      share|improve this question







      New contributor



      King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share|improve this question







      New contributor



      King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share|improve this question




      share|improve this question






      New contributor



      King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      asked 8 hours ago









      King ColdKing Cold

      213 bronze badges




      213 bronze badges




      New contributor



      King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




      New contributor




      King Cold is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.

























          3 Answers
          3






          active

          oldest

          votes


















          3













          $begingroup$

          Indeed, the values dictionary looks unnecessary. Using a built-in function ord you could compute the letter score with ord(letter) - ord('a') + 1. One may argue that it is even faster than a dictionary lookup, but in this case the timing difference is rather marginal.




          With Python you should avoid rolling explicit loops. For example, collecting the word values is more idiomatically expressed as a comprehension:



           word_values = [word_value(word) for word in word_list]


          Similarly, instead of



           for letter in input_word:
          value += values[letter]


          consider functools.reduce:



           value = functools.reduce(lambda x, y: x + ord(y) - ord('a') + 1, input_word, 0)





          share|improve this answer









          $endgroup$






















            2













            $begingroup$

            Welcome to code review, good job as your first program I suppose.



            Style



            Docstrings: Python documentation strings (or docstrings) provide a convenient way of associating documentation with Python modules, functions, classes, and methods. An object's docstring is defined by including a string constant as the first statement in the object's definition.



            def word_value(input_word):
            def high(x):


            You should include a docstring with your functions indicating what they do specially the names are pretty ambiguous ...



            def get_word_value(word):
            """Return word letter score."""

            def get_highest_scoring_word(word_list):
            """Return highest scoring word."""


            Blank lines: I suggest you check PEP0008 https://www.python.org/dev/peps/pep-0008/ the official Python style guide and regarding blank lines, use blank lines sparingly to separate logical sections inside a function (too many blank lines in your high function)



            word_values = []
            for word in word_list:
            word_values.append(word_value(word))

            max_value = max(word_values)
            index_of_max = word_values.index(max_value)

            return word_list[index_of_max]


            Code



            First function



            can be shortened in the following way:



            import string


            def get_value(word):
            """Return word letter score."""
            values = dict(zip(string.ascii_lowercase, range(1, 27)))
            return sum(values[letter] for letter in word)


            Second function:



            word_list = x.split(" ")


            split() has a default value of " " so no need to specify



            word_list = x.split()


            does the same functionality



            Descriptive names:



            word_list is extremely confusing, because word_list is not a list so I suggest changing the name to word_sequence



            Comprehension syntax:



            word_values = []
            for word in word_list:
            word_values.append(word_value(word))


            this can be enclosed in a comprehension syntax (it's more efficient and shorter)



            word_values = [word_value(word) for word in word_sequence]


            Code might look like:



            import string


            def get_value(word):
            """Return word letter score."""
            values = dict(zip(string.ascii_lowercase, range(1, 27)))
            return sum(values[letter] for letter in word)


            def get_highest(word_sequence):
            """
            Return word with the highest score assuming word_sequence a
            string of words separated by space.
            """
            return max(word_sequence.split(), key=get_value)


            if __name__ == '__main__':
            words = 'abc def ggg'
            print(get_highest(words))





            share|improve this answer











            $endgroup$














            • $begingroup$
              Thank you for your response. That is some beautiful code you wrote.
              $endgroup$
              – King Cold
              6 hours ago










            • $begingroup$
              You're welcome man, I'm not an expert though
              $endgroup$
              – Emad Boctor
              6 hours ago


















            1













            $begingroup$

            If performance isn't your main concern then consider the following approach of looking up the index of each character in an alphabet string. This will be slower than the other methods suggested, but provides greater readability.



            def word_value(word):
            alphabet = 'abcdefghijklmnopqrstuvwxyz'
            # The +1 is not strictly necessary to get the right result
            # since it shouldn't matter if the scores start from 0 or 1.
            return sum(alphabet.index(char) + 1 for char in word)

            def highest_valued_word(phrase):
            return max(
            (word for word in phrase.split(' ')),
            # Use the `word_value` function to select the maximum.
            key=word_value
            )





            share|improve this answer








            New contributor



            rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.





            $endgroup$

















              Your Answer






              StackExchange.ifUsing("editor", function ()
              StackExchange.using("externalEditor", function ()
              StackExchange.using("snippets", function ()
              StackExchange.snippets.init();
              );
              );
              , "code-snippets");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "196"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );






              King Cold is a new contributor. Be nice, and check out our Code of Conduct.









              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f227119%2fcodewars-highest-scoring-word%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              3













              $begingroup$

              Indeed, the values dictionary looks unnecessary. Using a built-in function ord you could compute the letter score with ord(letter) - ord('a') + 1. One may argue that it is even faster than a dictionary lookup, but in this case the timing difference is rather marginal.




              With Python you should avoid rolling explicit loops. For example, collecting the word values is more idiomatically expressed as a comprehension:



               word_values = [word_value(word) for word in word_list]


              Similarly, instead of



               for letter in input_word:
              value += values[letter]


              consider functools.reduce:



               value = functools.reduce(lambda x, y: x + ord(y) - ord('a') + 1, input_word, 0)





              share|improve this answer









              $endgroup$



















                3













                $begingroup$

                Indeed, the values dictionary looks unnecessary. Using a built-in function ord you could compute the letter score with ord(letter) - ord('a') + 1. One may argue that it is even faster than a dictionary lookup, but in this case the timing difference is rather marginal.




                With Python you should avoid rolling explicit loops. For example, collecting the word values is more idiomatically expressed as a comprehension:



                 word_values = [word_value(word) for word in word_list]


                Similarly, instead of



                 for letter in input_word:
                value += values[letter]


                consider functools.reduce:



                 value = functools.reduce(lambda x, y: x + ord(y) - ord('a') + 1, input_word, 0)





                share|improve this answer









                $endgroup$

















                  3














                  3










                  3







                  $begingroup$

                  Indeed, the values dictionary looks unnecessary. Using a built-in function ord you could compute the letter score with ord(letter) - ord('a') + 1. One may argue that it is even faster than a dictionary lookup, but in this case the timing difference is rather marginal.




                  With Python you should avoid rolling explicit loops. For example, collecting the word values is more idiomatically expressed as a comprehension:



                   word_values = [word_value(word) for word in word_list]


                  Similarly, instead of



                   for letter in input_word:
                  value += values[letter]


                  consider functools.reduce:



                   value = functools.reduce(lambda x, y: x + ord(y) - ord('a') + 1, input_word, 0)





                  share|improve this answer









                  $endgroup$



                  Indeed, the values dictionary looks unnecessary. Using a built-in function ord you could compute the letter score with ord(letter) - ord('a') + 1. One may argue that it is even faster than a dictionary lookup, but in this case the timing difference is rather marginal.




                  With Python you should avoid rolling explicit loops. For example, collecting the word values is more idiomatically expressed as a comprehension:



                   word_values = [word_value(word) for word in word_list]


                  Similarly, instead of



                   for letter in input_word:
                  value += values[letter]


                  consider functools.reduce:



                   value = functools.reduce(lambda x, y: x + ord(y) - ord('a') + 1, input_word, 0)






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 8 hours ago









                  vnpvnp

                  43.1k2 gold badges36 silver badges110 bronze badges




                  43.1k2 gold badges36 silver badges110 bronze badges


























                      2













                      $begingroup$

                      Welcome to code review, good job as your first program I suppose.



                      Style



                      Docstrings: Python documentation strings (or docstrings) provide a convenient way of associating documentation with Python modules, functions, classes, and methods. An object's docstring is defined by including a string constant as the first statement in the object's definition.



                      def word_value(input_word):
                      def high(x):


                      You should include a docstring with your functions indicating what they do specially the names are pretty ambiguous ...



                      def get_word_value(word):
                      """Return word letter score."""

                      def get_highest_scoring_word(word_list):
                      """Return highest scoring word."""


                      Blank lines: I suggest you check PEP0008 https://www.python.org/dev/peps/pep-0008/ the official Python style guide and regarding blank lines, use blank lines sparingly to separate logical sections inside a function (too many blank lines in your high function)



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))

                      max_value = max(word_values)
                      index_of_max = word_values.index(max_value)

                      return word_list[index_of_max]


                      Code



                      First function



                      can be shortened in the following way:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      Second function:



                      word_list = x.split(" ")


                      split() has a default value of " " so no need to specify



                      word_list = x.split()


                      does the same functionality



                      Descriptive names:



                      word_list is extremely confusing, because word_list is not a list so I suggest changing the name to word_sequence



                      Comprehension syntax:



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))


                      this can be enclosed in a comprehension syntax (it's more efficient and shorter)



                      word_values = [word_value(word) for word in word_sequence]


                      Code might look like:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      def get_highest(word_sequence):
                      """
                      Return word with the highest score assuming word_sequence a
                      string of words separated by space.
                      """
                      return max(word_sequence.split(), key=get_value)


                      if __name__ == '__main__':
                      words = 'abc def ggg'
                      print(get_highest(words))





                      share|improve this answer











                      $endgroup$














                      • $begingroup$
                        Thank you for your response. That is some beautiful code you wrote.
                        $endgroup$
                        – King Cold
                        6 hours ago










                      • $begingroup$
                        You're welcome man, I'm not an expert though
                        $endgroup$
                        – Emad Boctor
                        6 hours ago















                      2













                      $begingroup$

                      Welcome to code review, good job as your first program I suppose.



                      Style



                      Docstrings: Python documentation strings (or docstrings) provide a convenient way of associating documentation with Python modules, functions, classes, and methods. An object's docstring is defined by including a string constant as the first statement in the object's definition.



                      def word_value(input_word):
                      def high(x):


                      You should include a docstring with your functions indicating what they do specially the names are pretty ambiguous ...



                      def get_word_value(word):
                      """Return word letter score."""

                      def get_highest_scoring_word(word_list):
                      """Return highest scoring word."""


                      Blank lines: I suggest you check PEP0008 https://www.python.org/dev/peps/pep-0008/ the official Python style guide and regarding blank lines, use blank lines sparingly to separate logical sections inside a function (too many blank lines in your high function)



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))

                      max_value = max(word_values)
                      index_of_max = word_values.index(max_value)

                      return word_list[index_of_max]


                      Code



                      First function



                      can be shortened in the following way:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      Second function:



                      word_list = x.split(" ")


                      split() has a default value of " " so no need to specify



                      word_list = x.split()


                      does the same functionality



                      Descriptive names:



                      word_list is extremely confusing, because word_list is not a list so I suggest changing the name to word_sequence



                      Comprehension syntax:



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))


                      this can be enclosed in a comprehension syntax (it's more efficient and shorter)



                      word_values = [word_value(word) for word in word_sequence]


                      Code might look like:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      def get_highest(word_sequence):
                      """
                      Return word with the highest score assuming word_sequence a
                      string of words separated by space.
                      """
                      return max(word_sequence.split(), key=get_value)


                      if __name__ == '__main__':
                      words = 'abc def ggg'
                      print(get_highest(words))





                      share|improve this answer











                      $endgroup$














                      • $begingroup$
                        Thank you for your response. That is some beautiful code you wrote.
                        $endgroup$
                        – King Cold
                        6 hours ago










                      • $begingroup$
                        You're welcome man, I'm not an expert though
                        $endgroup$
                        – Emad Boctor
                        6 hours ago













                      2














                      2










                      2







                      $begingroup$

                      Welcome to code review, good job as your first program I suppose.



                      Style



                      Docstrings: Python documentation strings (or docstrings) provide a convenient way of associating documentation with Python modules, functions, classes, and methods. An object's docstring is defined by including a string constant as the first statement in the object's definition.



                      def word_value(input_word):
                      def high(x):


                      You should include a docstring with your functions indicating what they do specially the names are pretty ambiguous ...



                      def get_word_value(word):
                      """Return word letter score."""

                      def get_highest_scoring_word(word_list):
                      """Return highest scoring word."""


                      Blank lines: I suggest you check PEP0008 https://www.python.org/dev/peps/pep-0008/ the official Python style guide and regarding blank lines, use blank lines sparingly to separate logical sections inside a function (too many blank lines in your high function)



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))

                      max_value = max(word_values)
                      index_of_max = word_values.index(max_value)

                      return word_list[index_of_max]


                      Code



                      First function



                      can be shortened in the following way:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      Second function:



                      word_list = x.split(" ")


                      split() has a default value of " " so no need to specify



                      word_list = x.split()


                      does the same functionality



                      Descriptive names:



                      word_list is extremely confusing, because word_list is not a list so I suggest changing the name to word_sequence



                      Comprehension syntax:



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))


                      this can be enclosed in a comprehension syntax (it's more efficient and shorter)



                      word_values = [word_value(word) for word in word_sequence]


                      Code might look like:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      def get_highest(word_sequence):
                      """
                      Return word with the highest score assuming word_sequence a
                      string of words separated by space.
                      """
                      return max(word_sequence.split(), key=get_value)


                      if __name__ == '__main__':
                      words = 'abc def ggg'
                      print(get_highest(words))





                      share|improve this answer











                      $endgroup$



                      Welcome to code review, good job as your first program I suppose.



                      Style



                      Docstrings: Python documentation strings (or docstrings) provide a convenient way of associating documentation with Python modules, functions, classes, and methods. An object's docstring is defined by including a string constant as the first statement in the object's definition.



                      def word_value(input_word):
                      def high(x):


                      You should include a docstring with your functions indicating what they do specially the names are pretty ambiguous ...



                      def get_word_value(word):
                      """Return word letter score."""

                      def get_highest_scoring_word(word_list):
                      """Return highest scoring word."""


                      Blank lines: I suggest you check PEP0008 https://www.python.org/dev/peps/pep-0008/ the official Python style guide and regarding blank lines, use blank lines sparingly to separate logical sections inside a function (too many blank lines in your high function)



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))

                      max_value = max(word_values)
                      index_of_max = word_values.index(max_value)

                      return word_list[index_of_max]


                      Code



                      First function



                      can be shortened in the following way:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      Second function:



                      word_list = x.split(" ")


                      split() has a default value of " " so no need to specify



                      word_list = x.split()


                      does the same functionality



                      Descriptive names:



                      word_list is extremely confusing, because word_list is not a list so I suggest changing the name to word_sequence



                      Comprehension syntax:



                      word_values = []
                      for word in word_list:
                      word_values.append(word_value(word))


                      this can be enclosed in a comprehension syntax (it's more efficient and shorter)



                      word_values = [word_value(word) for word in word_sequence]


                      Code might look like:



                      import string


                      def get_value(word):
                      """Return word letter score."""
                      values = dict(zip(string.ascii_lowercase, range(1, 27)))
                      return sum(values[letter] for letter in word)


                      def get_highest(word_sequence):
                      """
                      Return word with the highest score assuming word_sequence a
                      string of words separated by space.
                      """
                      return max(word_sequence.split(), key=get_value)


                      if __name__ == '__main__':
                      words = 'abc def ggg'
                      print(get_highest(words))






                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited 7 hours ago

























                      answered 7 hours ago









                      Emad BoctorEmad Boctor

                      1,1412 silver badges16 bronze badges




                      1,1412 silver badges16 bronze badges














                      • $begingroup$
                        Thank you for your response. That is some beautiful code you wrote.
                        $endgroup$
                        – King Cold
                        6 hours ago










                      • $begingroup$
                        You're welcome man, I'm not an expert though
                        $endgroup$
                        – Emad Boctor
                        6 hours ago
















                      • $begingroup$
                        Thank you for your response. That is some beautiful code you wrote.
                        $endgroup$
                        – King Cold
                        6 hours ago










                      • $begingroup$
                        You're welcome man, I'm not an expert though
                        $endgroup$
                        – Emad Boctor
                        6 hours ago















                      $begingroup$
                      Thank you for your response. That is some beautiful code you wrote.
                      $endgroup$
                      – King Cold
                      6 hours ago




                      $begingroup$
                      Thank you for your response. That is some beautiful code you wrote.
                      $endgroup$
                      – King Cold
                      6 hours ago












                      $begingroup$
                      You're welcome man, I'm not an expert though
                      $endgroup$
                      – Emad Boctor
                      6 hours ago




                      $begingroup$
                      You're welcome man, I'm not an expert though
                      $endgroup$
                      – Emad Boctor
                      6 hours ago











                      1













                      $begingroup$

                      If performance isn't your main concern then consider the following approach of looking up the index of each character in an alphabet string. This will be slower than the other methods suggested, but provides greater readability.



                      def word_value(word):
                      alphabet = 'abcdefghijklmnopqrstuvwxyz'
                      # The +1 is not strictly necessary to get the right result
                      # since it shouldn't matter if the scores start from 0 or 1.
                      return sum(alphabet.index(char) + 1 for char in word)

                      def highest_valued_word(phrase):
                      return max(
                      (word for word in phrase.split(' ')),
                      # Use the `word_value` function to select the maximum.
                      key=word_value
                      )





                      share|improve this answer








                      New contributor



                      rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.





                      $endgroup$



















                        1













                        $begingroup$

                        If performance isn't your main concern then consider the following approach of looking up the index of each character in an alphabet string. This will be slower than the other methods suggested, but provides greater readability.



                        def word_value(word):
                        alphabet = 'abcdefghijklmnopqrstuvwxyz'
                        # The +1 is not strictly necessary to get the right result
                        # since it shouldn't matter if the scores start from 0 or 1.
                        return sum(alphabet.index(char) + 1 for char in word)

                        def highest_valued_word(phrase):
                        return max(
                        (word for word in phrase.split(' ')),
                        # Use the `word_value` function to select the maximum.
                        key=word_value
                        )





                        share|improve this answer








                        New contributor



                        rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.





                        $endgroup$

















                          1














                          1










                          1







                          $begingroup$

                          If performance isn't your main concern then consider the following approach of looking up the index of each character in an alphabet string. This will be slower than the other methods suggested, but provides greater readability.



                          def word_value(word):
                          alphabet = 'abcdefghijklmnopqrstuvwxyz'
                          # The +1 is not strictly necessary to get the right result
                          # since it shouldn't matter if the scores start from 0 or 1.
                          return sum(alphabet.index(char) + 1 for char in word)

                          def highest_valued_word(phrase):
                          return max(
                          (word for word in phrase.split(' ')),
                          # Use the `word_value` function to select the maximum.
                          key=word_value
                          )





                          share|improve this answer








                          New contributor



                          rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.





                          $endgroup$



                          If performance isn't your main concern then consider the following approach of looking up the index of each character in an alphabet string. This will be slower than the other methods suggested, but provides greater readability.



                          def word_value(word):
                          alphabet = 'abcdefghijklmnopqrstuvwxyz'
                          # The +1 is not strictly necessary to get the right result
                          # since it shouldn't matter if the scores start from 0 or 1.
                          return sum(alphabet.index(char) + 1 for char in word)

                          def highest_valued_word(phrase):
                          return max(
                          (word for word in phrase.split(' ')),
                          # Use the `word_value` function to select the maximum.
                          key=word_value
                          )






                          share|improve this answer








                          New contributor



                          rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.








                          share|improve this answer



                          share|improve this answer






                          New contributor



                          rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.








                          answered 7 hours ago









                          rob.earwakerrob.earwaker

                          2115 bronze badges




                          2115 bronze badges




                          New contributor



                          rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.




                          New contributor




                          rob.earwaker is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.

























                              King Cold is a new contributor. Be nice, and check out our Code of Conduct.









                              draft saved

                              draft discarded


















                              King Cold is a new contributor. Be nice, and check out our Code of Conduct.












                              King Cold is a new contributor. Be nice, and check out our Code of Conduct.











                              King Cold is a new contributor. Be nice, and check out our Code of Conduct.














                              Thanks for contributing an answer to Code Review Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              Use MathJax to format equations. MathJax reference.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f227119%2fcodewars-highest-scoring-word%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              ParseJSON using SSJSUsing AMPscript with SSJS ActivitiesHow to resubscribe a user in Marketing cloud using SSJS?Pulling Subscriber Status from Lists using SSJSRetrieving Emails using SSJSProblem in updating DE using SSJSUsing SSJS to send single email in Marketing CloudError adding EmailSendDefinition using SSJS

                              Кампала Садржај Географија Географија Историја Становништво Привреда Партнерски градови Референце Спољашње везе Мени за навигацију0°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.340°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.34МедијиПодациЗванични веб-сајту

                              19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу