0

我是一名初级程序员,我一直在完成 zedshaw 的Learn Python The Hard Way课程,但是在练习 26 中,我们得到了一个有缺陷的代码,因此我们可以对其进行调试。虽然代码是使用 Python 2.x 编写的,但我一直在用 Python 3 重新编写它们,以便我可以学习它。

它引发以下错误:

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

这是我的代码:链接

原始代码:链接(这是练习文件)

所以我的问题是:

  • 为什么它以退出代码 1 结束?
  • 为什么它不继续执行代码?
  • 如何使用 Python 3 重写它?

谢谢你

4

3 回答 3

4

secret_formula方法返回一个元组,因此您实际上是.format()使用单个参数调用 - 元组。尝试将 a*放在前面secret_formula()

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

这会将元组视为单独的参数,并且应该修复它。

于 2012-11-02T05:01:16.033 回答
1

为什么它以退出代码 1 结束?

因为你得到一个错误。

为什么它不继续执行代码?

因为你得到一个错误。

如何使用 Python 3 重写它?

原始的 Python 2 代码如下所示:

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

Python 3 版本是:

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

我在要打印的内容周围添加了括号,因为print- 语句现在是一个print()函数。

现在,这段代码当然是有问题的,因为它没有右括号,而且start_point拼写错误。所以它真的应该是:

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

如果您想切换到新.format()格式而不是旧%格式,那么它看起来像这样:

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

但这不是必需的。

于 2012-11-02T09:20:07.417 回答
0

正确答案如下

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)
于 2014-04-19T16:57:13.240 回答