繁体   English   中英

Python-新手入门问题,示例文件中的语法无效

[英]Python - New beginner question, invalid syntax from a example file

我正在尝试学习自己的python,但是我已经在基础知识上失败了。

我正在阅读一本书中的一系列示例,第一个示例是:

import sys

Zero = ['  ***  ',' *   * ','*     *','*     *','*     *',' *   * ','  ***  ']
One = ['   *   ','  **   ','   *   ','   *   ','   *   ','   *   ','  ***  ']
Two = ['  ***  ',' *   * ',' *  *  ','   *   ','  *    ',' *     ',' ***** ']
Three = [' ***** ','     * ','   **  ','     * ','     * ',' *  *  ','  **   ']
Four = ['    *  ','   *   ','  *    ',' *     ',' ******','    *  ','    *  ']
Five = [' ***** ',' *     ',' ****  ','     * ','     * ',' *   * ','  ***  ']
Six = ['  *    ',' *     ',' *     ',' ****  ',' *   * ',' *   * ',' ****  ']
Seven = [' ***** ','     * ','    *  ','   *   ','  *    ',' *     ',' *     ']
Eight = ['  ***  ',' *   * ',' *   * ','  ***  ',' *   * ',' *   * ','  ***  ']
Nine = ['  **** ',' *   * ',' *   * ','  **** ','     * ','     * ','     * '] 

Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]

try:
    digits = sys.argv[1]
    row = 0
    while row < 7:
        line = ''
        column = 0
        while column < len(digits):
            number = int(digits[column])
            digit = Digits[number]
            line += digit[row] + ' '
            column += 1
        print(line)
        row += 1
except IndexError:
    print('usage: bigdigits.py <number>')
except ValueError as err:
    print(err, 'in', digits)

当我运行bigdigits.py 1351355时,出现错误,提示SyntaxError:无效的语法。 我以为它与错误的路径有关,或者与之有关,我使用C:\\ py3eg作为程序路径。 当我将其复制到C:\\ Python32路径时,发生了同样的事情。 我什至从图书网站下载了代码,但仍然出现错误,因此代码看起来还不错。

这本书是针对Python 3编程的,并且我安装了Python版本3.2.1。

如果有人能指出导致我收到此错误的原因,我将不胜感激!

您的代码是2.6+和3+中的有效Python代码。 但是,它在Python 2.5下产生以下错误消息:

File "syntax-error.py", line 31
  except ValueError as err:
                     ^
SyntaxError: invalid syntax

那是因为Python 2.5不知道as关键字。 在2.5中,您可以使用逗号代替:

  except ValueError, err:

请注意,这将破坏Python 3.x的兼容性。

您应该切换到较新的Python版本,而不是应用这些补丁以使代码在古老的2.5版本上运行。

我使用的是Eclipse + Pydev,python v.3.2.3,您的代码在Eclipse和IDLE中均运行良好。关键是句子“ ValueValue as err除外:”中的单词“ as”不是您的关键字IDE,所以我认为您应该将python切换到更高版本。

为了获得更好的可读性,请尝试使用以下语法来定义零到九(尽管最好将它们命名为“零”到“九”,甚至“ _0”到“ _9”-保存类的大写名称,而不是变量):

Zero = """\
  ***  
 *   * 
*     *
*     *
*     *
 *   * 
  ***  """.splitlines()

编辑 :这是一些split / zip / *魔术来定义您的数字:

digitparts = """\
  ***  |   *   |  ***  | ***** |    *  | ***** |  *    | ***** |  ***  |  **** 
 *   * |  **   | *   * |     * |   *   | *     | *     |     * | *   * | *   * 
*     *|   *   | *  *  |   **  |  *    | ****  | *     |    *  | *   * | *   * 
*     *|   *   |   *   |     * | *     |     * | ****  |   *   |  ***  |  **** 
*     *|   *   |  *    |     * | ******|     * | *   * |  *    | *   * |     * 
 *   * |   *   | *     | *  *  |    *  | *   * | *   * | *     | *   * |     * 
  ***  |  ***  | ***** |  **   |    *  |  ***  | ****  | *     |  ***  |     * """.splitlines()

Digits = zip(*(s.split('|') for s in digitparts))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM