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

2 投票
3 回答
2366 浏览
提问于 2025-04-17 01:12

我正在自学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: Invalid Syntax。我以为这可能和路径不对有关,我的程序路径是C:\py3eg。当我把它复制到C:\Python32路径下时,还是出现了同样的错误。我甚至从书的网站上下载了代码,结果还是有错误,所以代码显然是没问题的。

这本书是关于Python 3编程的,而我安装的是Python 3.2.1版本。

如果有人能告诉我为什么会出现这个错误,我会非常感激!

3 个回答

0

我在用Eclipse加上Pydev,Python版本是3.2.3。你的代码在Eclipse和IDLE中都能正常运行。关键是句子“except ValueError as err:”中的“as”这个词在你的开发环境里不是一个关键字,所以我觉得你应该把Python升级到更高的版本。

0

为了让代码更容易读懂,可以试试这种写法来定义数字零到九(不过这些名字如果改成“zero”到“nine”,或者甚至用“_0”到“_9”会更好——大写的名字留给类用,不要用在变量上):

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

编辑: 下面是一些分割和组合的技巧,用来定义你的数字:

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

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

你的代码在Python 2.6及以上版本和3.x版本中是有效的。但是,在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中无法运行。

与其对你的代码进行修改以让它在老旧的2.5版本上运行,不如升级到更新的Python版本

撰写回答