Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Snow Leopards - Elsje & Dainiz #61

Open
wants to merge 16 commits into
base: master
Choose a base branch
from

Conversation

elsjeslothower
Copy link

We added a few comments within the code itself - let us know your thoughts!! Thanks for looking over it for us!

@@ -1,5 +1,32 @@
# AdaGrams

## Plan of Action
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent documentation of the plan!

pass
letter_pool = []
letter_bank = []
for letter, count in LETTER_DISTRIBUTION.items():
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This works perfectly well! I have a couple of suggestions - you don't really need to turn the LETTER_DISTRIBUTION dictionary in to a list of tuples in order to access the count nor do you need to use a for-loop with an unused variable i. Here's an alternative based on your approach which doesn't convert the dictionary to a list of tuples or create unused variables:

    for letter in LETTER_DISTRIBUTION:
        count = LETTER_DISTRIBUTION[letter]
        while count > 0:
            letter_pool.append(letter)
            count -= 1

for i in range(count):
letter_pool.append(letter)
# Should we rewrite 45-47 with list comprehension? This is what we tried:
# letter_pool = [[letter] * count
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want to write a list comprehension using the nested loop approach, you'd need a nested list comprehension. I speak for myself in saying I don't usually find those to be very readable.

else:
bank_dict[item] += 1
for letter in word.upper():
if letter not in bank_dict.keys():
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Python can iterate over a dictionary and uses its keys to do so, so no need to convert the dictionary to a list of dictionary keys just for iterating over it.

for letter in word.upper():
if letter not in bank_dict.keys():
return False
elif letter in bank_dict.keys():
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above, no need to convert to a list first.

bank_dict = {}
# We tried to implement dictionary comprehension for this,
# but are unsure if it's possible:
# alt_bank_dict = {letter, 1 for letter in letter_bank
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's possible! Try this:

    bank_dict = {letter: letter_bank.count(letter) for letter in letter_bank}

for tally, letters in SCORE_CHART.items():
if character in letters:
total_score += tally
if len(word) >= 7:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 nice


def score_word(word):
pass
total_score = 0
for character in word.upper():
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does work however, if you create a data structure like:

{
    'A': 1, 
    'B': 3, 
    'C': 3, 
    'D': 2, 
...
}

Then you can avoid nested iteration:

    for letter in word:
        score_total += LETTER_VALUES[letter]

Which is much simpler and easier to read! Always consider the best data structure that allows the simplest and most straightforward access.

word_info = [{"word": word, "score": score_word(word), "length": len(word)}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function works great! One minor improvement would be to avoid looping by checking whether there's only one element in word_info. Since that list only contains more than one element if there's ties, you can use that fact to return the sole element, e.g.

    if len(word_info) == 1:
        return word_info[0]["word"], word_info[0]["score"]

Then go on to do all the tie-break looping only if you actually have a tie.

@marciaga
Copy link

marciaga commented Oct 6, 2022

Well done! Good job with adding the documentation of your pairing effort and with the general organization of your code, using lots of commits with descriptive messages, and using built-ins where it made sense. Be sure to consider your data structures using the guidelines I offered in the PR comments, because well-chosen data structures will mean simpler code when accessing them!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants