0

I'm a beginner programmer and I've been completing zedshaw's Learn Python The Hard Way course, however in exercise 26 we are given a flawed code so we can debug it. Although the code was written using Python 2.x I've been re-writing them in Python 3 so I could learn it.

It raises the following error:

Traceback (most recent call last):
  File "/home/omar/PycharmProjects/Python_The_Hardway/ex26_Quiz.py", line 76, in <module>
    print("We'd have {} beans, {} jars, and {} crates".format(secret_formula(start_point)))
IndexError: tuple index out of range

Here's my code: link

Original code: link (This is the exercise file)

So my questions are:

  • Why does it finish with exit code 1?
  • Why doesn't it continue executing the code?
  • How can I rewrite it using Python 3?

Thank You

3 Answers 3

4

The secret_formula method returns a tuple, so you're essentially calling .format() with a single argument - the tuple. Try putting a * in front of secret_formula():

print("We'd have {} beans, {} jars, and {} crates".format(*secret_formula(start_point)))

That'll treat the tuple as separate arguments, and should fix it.

Sign up to request clarification or add additional context in comments.

1 Comment

Wow!, Thanks Kevin! I spent hours trying to figure out what was wrong.
1

Why does it finish with exit code 1?

Because you get an error.

Why doesn't it continue executing the code?

Because you get an error.

How can I rewrite it using Python 3?

The original Python 2 code looks like this:

print "We'd have %d beans, %d jars, and %d crabapples." % secret_formula(start_pont

The Python 3 version of that is:

print("We'd have %d beans, %d jars, and %d crabapples." % secret_formula(start_pont)

I added parenthesis around what is to be printed, since the print-statement is now a print() function.

Now, this code is of course broken, because it lacks a closing parenthesis, and start_point is miss-spelled. So it should really be:

print("We'd have %d beans, %d jars, and %d crabapples." % secret_formula(start_point))

If you want to move over to the new .format() formatting instead of the old % formatting, then it would look like this:

print("We'd have {:d} beans, {:d} jars, and {:d} crabapples.".format(*secret_formula(start_point))

But that's not necessary.

1 Comment

Thanks for your answers Lennart, they are really useful for a beginner like me.
0

The correct answer is given below

def break_words(stuff):
        """This function will break up words for us."""
        words = stuff.split(' ')
        return words

    def sort_words(words):
        """Sorts the words."""
        return sorted(words)

    def print_first_word(words):
        """Prints the first word after popping it off."""
        word = words.pop(0)
        print word

    def print_last_word(words):
        """Prints the last word after popping it off."""
        word = words.pop(-1)
        print word

    def sort_sentence(sentence):
        """Takes in a full sentence and returns the sorted words."""
        words = break_words(sentence)
        return sort_words(words)

    def print_first_and_last(sentence):
        """Prints the first and last words of the sentence."""
        words = break_words(sentence)
        print_first_word(words)
        print_last_word(words)

    def print_first_and_last_sorted(sentence):
        """Sorts the words then prints the first and last one."""
        words = sort_sentence(sentence)
        print_first_word(words)
        print_last_word(words)


    print "Let's practice everything."
    print 'You\'d need to know \'bout escapes with \\ that do \n newlines and \t tabs.'

    poem = """
    \tThe lovely world
    with logic so firmly planted
    cannot discern \n the needs of love
    nor comprehend passion from intuition
    and requires an explantion
    \n\t\twhere there is none.
    """


    print "--------------"
    print poem
    print "--------------"

    five = 10 - 2 + 3 - 5
    print "This should be five: %s" % five

    def secret_formula(started):
        jelly_beans = started * 500
        jars = jelly_beans / 1000
        crates = jars / 100
        return jelly_beans, jars, crates


    start_point = 10000
    beans, jars, crates = secret_formula(start_point)

    print "With a starting point of: %d" % start_point
    print "We'd have %d jeans, %d jars, and %d crates." % (beans, jars, crates)

    start_point = start_point / 10

    print "We can also do that this way:"
    print "We'd have %d beans, %d jars, and %d crabapples." % secret_formula(start_point)


    sentence = "All god\tthings come to those who weight."

    #python_exercise.break_words(sentence)
    #words = python_exercise.break_words(sentence)
    #python_exercise.sort_words(words)
    #sorted_words = python_exercise.sort_words(words)

    #print_first_word(words)
    #print_last_word(words)
    #print_first_word(sorted_words)
    #print_last_word(sorted_words)
    #sorted_words = python_exercise.sort_sentence(sentence)
    #print sorted_words

    #print_first_and_last(sentence)

    #print_first_a_last_sorted(sentence)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.