2013-11-07 2 views
-2

Я запустил код ниже и получил синтаксическую ошибку. Не знаю, что случилось.Печать красиво отформатированной таблицы с использованием (x, x * x, x * x * x)

for x in range(1,11): 
    print '{0:2d} {1:3d}{2:4d}'.format(x), (x*x), (x*x*x) 
+2

Я этого не делаю. Вместо этого я получаю «IndexError». –

+3

Если вы действительно получаете «SyntaxError» здесь, то вы должны использовать Python 3 и 'print()' является функцией. То есть * отдельно * от 'IndexError' ваш код будет повышаться. –

+0

Как рекомендация: [PrettyTable] (https://pypi.python.org/pypi/PrettyTable) – dorvak

ответ

1

Должно быть IndexError:

>>> for x in range(1,11): 
...  print '{0:2d} {1:3d}{2:4d}'.format(x), (x*x), (x*x*x) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
IndexError: tuple index out of range 

Благодаря @Martijn Питерс, получить его с PY3 или from __future__ import print_function.

>>> from __future__ import print_function 
>>> for x in range(1,11): 
...  print '{0:2d} {1:3d}{2:4d}'.format(x, x*x, x*x*x) 
    File "<stdin>", line 2 
    print '{0:2d} {1:3d}{2:4d}'.format(x, x*x, x*x*x) 
          ^
SyntaxError: invalid syntax 

Вы неправильно передать аргументы, попробуйте (если печать является функцией):

>>> for x in range(1,11): 
...  print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)) 
... 
1 1 1 
2 4 8 
3 9 27 
4 16 64 
5 25 125 
6 36 216 
7 49 343 
8 64 512 
9 81 729 
10 100 1000 
1

Вы должны закрыть и открывающая скобка в format:

for x in range(1,11): 
    print '{0:2d} {1:3d}{2:4d}'.format(x, x*x, x*x*x) 

Ваш код

print '{0:2d} {1:3d}{2:4d}'.format(x), (x*x), (x*x*x) 

фактически эквивалентно:

print ('{0:2d} {1:3d}{2:4d}'.format(x)), (x*x), (x*x*x) 

Итак, вы передаете просто одно значение в строке формата (т.е. только x) в то время как он ожидает 3.

>>> '{}{}{}'.format(1) 

Traceback (most recent call last): 
    File "<pyshell#75>", line 1, in <module> 
    '{}{}{}'.format(1) 
IndexError: tuple index out of range 

Если строка формата имеет только один спецификатор формата, то ваш код будет уже работал должным образом. Это работает, потому что разделенные запятыми элементы печатаются с пробелом между ними:

>>> print '{:04d}'.format(1), 2, 3 
0001 2 3 
0

Это то, что вы хотите:

print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x) 

формат() ожидает 3 значения с пути ваш формат ваши строки

Смежные вопросы