Python - новый вопрос для новичка, неверный синтаксис из файла примера - PullRequest
2 голосов
/ 02 сентября 2011

Я пытаюсь научиться самому питону, но у меня уже нет оснований.

Я рассматриваю ряд примеров из книги, и самый первый пример был таким:

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.

Если бы кто-нибудь мог указать причину, по которой я получил эту ошибку, я был бы очень признателен!

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

Ваш код является действительным кодом Python в версии 2.6+ и 3+.Однако в 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.

Вместо применения этих исправлений, чтобы ваш код работал с возрастом-old 2.5, вы должны переключиться на более новую версию Python .

0 голосов
/ 28 марта 2013

Я использую Eclipse + Pydev , python v.3.2.3, ваш код хорошо работает как в Eclipse, так и в IDLE. Точка - это слово "as" в предложении ", за исключением ValueError as err:" не ключ слово в вашей IDE, поэтому я думаю, что вы должны переключить свой питон на более высокую версию.

0 голосов
/ 02 сентября 2011

Для лучшей читабельности попробуйте этот синтаксис для определения от нуля до девяти (хотя их лучше называть от «нуля» до «девяти» или даже от «_0» до «_9» - сохраняйте заглавные имена для классов, а не переменных)):

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

РЕДАКТИРОВАТЬ : Вот некоторая магия split / zip / * для определения ваших цифр:

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

Digits = zip(*(s.split('|') for s in digitparts))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...