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

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

                              Israel Cuprins Etimologie | Istorie | Geografie | Politică | Demografie | Educație | Economie | Cultură | Note explicative | Note bibliografice | Bibliografie | Legături externe | Meniu de navigaresite web oficialfacebooktweeterGoogle+Instagramcanal YouTubeInstagramtextmodificaremodificarewww.technion.ac.ilnew.huji.ac.ilwww.weizmann.ac.ilwww1.biu.ac.ilenglish.tau.ac.ilwww.haifa.ac.ilin.bgu.ac.ilwww.openu.ac.ilwww.ariel.ac.ilCIA FactbookHarta Israelului"Negotiating Jerusalem," Palestine–Israel JournalThe Schizoid Nature of Modern Hebrew: A Slavic Language in Search of a Semitic Past„Arabic in Israel: an official language and a cultural bridge”„Latest Population Statistics for Israel”„Israel Population”„Tables”„Report for Selected Countries and Subjects”Human Development Report 2016: Human Development for Everyone„Distribution of family income - Gini index”The World FactbookJerusalem Law„Israel”„Israel”„Zionist Leaders: David Ben-Gurion 1886–1973”„The status of Jerusalem”„Analysis: Kadima's big plans”„Israel's Hard-Learned Lessons”„The Legacy of Undefined Borders, Tel Aviv Notes No. 40, 5 iunie 2002”„Israel Journal: A Land Without Borders”„Population”„Israel closes decade with population of 7.5 million”Time Series-DataBank„Selected Statistics on Jerusalem Day 2007 (Hebrew)”Golan belongs to Syria, Druze protestGlobal Survey 2006: Middle East Progress Amid Global Gains in FreedomWHO: Life expectancy in Israel among highest in the worldInternational Monetary Fund, World Economic Outlook Database, April 2011: Nominal GDP list of countries. Data for the year 2010.„Israel's accession to the OECD”Popular Opinion„On the Move”Hosea 12:5„Walking the Bible Timeline”„Palestine: History”„Return to Zion”An invention called 'the Jewish people' – Haaretz – Israel NewsoriginalJewish and Non-Jewish Population of Palestine-Israel (1517–2004)ImmigrationJewishvirtuallibrary.orgChapter One: The Heralders of Zionism„The birth of modern Israel: A scrap of paper that changed history”„League of Nations: The Mandate for Palestine, 24 iulie 1922”The Population of Palestine Prior to 1948originalBackground Paper No. 47 (ST/DPI/SER.A/47)History: Foreign DominationTwo Hundred and Seventh Plenary Meeting„Israel (Labor Zionism)”Population, by Religion and Population GroupThe Suez CrisisAdolf EichmannJustice Ministry Reply to Amnesty International Report„The Interregnum”Israel Ministry of Foreign Affairs – The Palestinian National Covenant- July 1968Research on terrorism: trends, achievements & failuresThe Routledge Atlas of the Arab–Israeli conflict: The Complete History of the Struggle and the Efforts to Resolve It"George Habash, Palestinian Terrorism Tactician, Dies at 82."„1973: Arab states attack Israeli forces”Agranat Commission„Has Israel Annexed East Jerusalem?”original„After 4 Years, Intifada Still Smolders”From the End of the Cold War to 2001originalThe Oslo Accords, 1993Israel-PLO Recognition – Exchange of Letters between PM Rabin and Chairman Arafat – Sept 9- 1993Foundation for Middle East PeaceSources of Population Growth: Total Israeli Population and Settler Population, 1991–2003original„Israel marks Rabin assassination”The Wye River Memorandumoriginal„West Bank barrier route disputed, Israeli missile kills 2”"Permanent Ceasefire to Be Based on Creation Of Buffer Zone Free of Armed Personnel Other than UN, Lebanese Forces"„Hezbollah kills 8 soldiers, kidnaps two in offensive on northern border”„Olmert confirms peace talks with Syria”„Battleground Gaza: Israeli ground forces invade the strip”„IDF begins Gaza troop withdrawal, hours after ending 3-week offensive”„THE LAND: Geography and Climate”„Area of districts, sub-districts, natural regions and lakes”„Israel - Geography”„Makhteshim Country”Israel and the Palestinian Territories„Makhtesh Ramon”„The Living Dead Sea”„Temperatures reach record high in Pakistan”„Climate Extremes In Israel”Israel in figures„Deuteronom”„JNF: 240 million trees planted since 1901”„Vegetation of Israel and Neighboring Countries”Environmental Law in Israel„Executive branch”„Israel's election process explained”„The Electoral System in Israel”„Constitution for Israel”„All 120 incoming Knesset members”„Statul ISRAEL”„The Judiciary: The Court System”„Israel's high court unique in region”„Israel and the International Criminal Court: A Legal Battlefield”„Localities and population, by population group, district, sub-district and natural region”„Israel: Districts, Major Cities, Urban Localities & Metropolitan Areas”„Israel-Egypt Relations: Background & Overview of Peace Treaty”„Solana to Haaretz: New Rules of War Needed for Age of Terror”„Israel's Announcement Regarding Settlements”„United Nations Security Council Resolution 497”„Security Council resolution 478 (1980) on the status of Jerusalem”„Arabs will ask U.N. to seek razing of Israeli wall”„Olmert: Willing to trade land for peace”„Mapping Peace between Syria and Israel”„Egypt: Israel must accept the land-for-peace formula”„Israel: Age structure from 2005 to 2015”„Global, regional, and national disability-adjusted life years (DALYs) for 306 diseases and injuries and healthy life expectancy (HALE) for 188 countries, 1990–2013: quantifying the epidemiological transition”10.1016/S0140-6736(15)61340-X„World Health Statistics 2014”„Life expectancy for Israeli men world's 4th highest”„Family Structure and Well-Being Across Israel's Diverse Population”„Fertility among Jewish and Muslim Women in Israel, by Level of Religiosity, 1979-2009”„Israel leaders in birth rate, but poverty major challenge”„Ethnic Groups”„Israel's population: Over 8.5 million”„Israel - Ethnic groups”„Jews, by country of origin and age”„Minority Communities in Israel: Background & Overview”„Israel”„Language in Israel”„Selected Data from the 2011 Social Survey on Mastery of the Hebrew Language and Usage of Languages”„Religions”„5 facts about Israeli Druze, a unique religious and ethnic group”„Israël”Israel Country Study Guide„Haredi city in Negev – blessing or curse?”„New town Harish harbors hopes of being more than another Pleasantville”„List of localities, in alphabetical order”„Muncitorii români, doriți în Israel”„Prietenia româno-israeliană la nevoie se cunoaște”„The Higher Education System in Israel”„Middle East”„Academic Ranking of World Universities 2016”„Israel”„Israel”„Jewish Nobel Prize Winners”„All Nobel Prizes in Literature”„All Nobel Peace Prizes”„All Prizes in Economic Sciences”„All Nobel Prizes in Chemistry”„List of Fields Medallists”„Sakharov Prize”„Țara care și-a sfidat "destinul" și se bate umăr la umăr cu Silicon Valley”„Apple's R&D center in Israel grew to about 800 employees”„Tim Cook: Apple's Herzliya R&D center second-largest in world”„Lecții de economie de la Israel”„Land use”Israel Investment and Business GuideA Country Study: IsraelCentral Bureau of StatisticsFlorin Diaconu, „Kadima: Flexibilitate și pragmatism, dar nici un compromis în chestiuni vitale", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 71-72Florin Diaconu, „Likud: Dreapta israeliană constant opusă retrocedării teritoriilor cureite prin luptă în 1967", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 73-74MassadaIsraelul a crescut in 50 de ani cât alte state intr-un mileniuIsrael Government PortalIsraelIsraelIsraelmmmmmXX451232cb118646298(data)4027808-634110000 0004 0372 0767n7900328503691455-bb46-37e3-91d2-cb064a35ffcc1003570400564274ge1294033523775214929302638955X146498911146498911

                              Кастелфранко ди Сопра Становништво Референце Спољашње везе Мени за навигацију43°37′18″ СГШ; 11°33′32″ ИГД / 43.62156° СГШ; 11.55885° ИГД / 43.62156; 11.5588543°37′18″ СГШ; 11°33′32″ ИГД / 43.62156° СГШ; 11.55885° ИГД / 43.62156; 11.558853179688„The GeoNames geographical database”„Istituto Nazionale di Statistica”проширитиууWorldCat156923403n850174324558639-1cb14643287r(подаци)