【问题标题】:What's wrong with my python code?我的 python 代码有什么问题?
【发布时间】:2012-11-02 04:56:09
【问题描述】:

我是一名初级程序员,我一直在完成 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

这是我的代码:link

原代码:link(这是练习文件)

所以我的问题是:

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

谢谢

【问题讨论】:

    标签: python string python-3.x string-formatting


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇!谢谢凯文!我花了几个小时试图找出问题所在。
    【解决方案2】:

    为什么它以退出代码 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-statement 现在是 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))
    

    但这不是必须的。

    【讨论】:

    • 感谢您的回答 Lennart,它们对像我这样的初学者非常有用。
    【解决方案3】:

    下面给出正确答案

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-02
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多