essexcase Ответов: 1

Syntaxerror: недопустимый синтаксис (<string>, строка 14)


  1  from decimal import Decimal, getcontext
  2  import math
  3  def calc(n):
  4      t = Decimal(0)
  5      pi = Decimal(0)
  6      deno = Decimal(0)
  7      k = 0
  8      for k in range(n):
  9          t = (Decimal(-1)**k)*(math.factorial(Decimal(6)*k))*(13591409+545140134*k)
 10          deno = math.factorial(3*k)*(math.factorial(k)**Decimal(3))*(640320**(3*k))
 11          pi += Decimal(t)/Decimal(deno)
 12      pi = pi * Decimal(12)/Decimal(640320**Decimal(1.5))
 13      pi = 1/pi
 14      return str(pi)
 15  print(calc(1))


Что я уже пробовал:

Привет я абсолютно новым для программирования и обучения на языке Python, используя черный пес питон руководство по эксплуатации. Я скопировал код из книги и не могу понять, почему у меня возникли проблемы с запуском кода. SyntaxError: недопустимый синтаксис (<string>, строка 14)

0x01AA

Когда я включу это https://www.tutorialspoint.com/execute_python_online.php[^] он компилируется и запускается...

essexcase

я только что попробовал через тот же веб-сайт и все еще получаю тот же syntaxError?

0x01AA

Странно, но для меня он печатает число, похожее на число Пи...

Хорошо, после копирования/вставки мне нужно настроить два разрыва строки, но это просто проблема форматирования.

[Редактировать]
Я отформатировал немного вашего кода, и теперь я могу скопировать/вставить его по ссылке выше, и он работает без каких-либо дополнительных изменений.

essexcase

Спасибо, теперь он работает на tutorialspoint, но когда я пытаюсь запустить тот же код в своей оболочке, я получаю это сообщение

Обратная трассировка (самый недавний призыв последнего):
Файл "C:\python\picalc.py", строка 16, in <module>
печать(calc(1))
Файл "C:\python\picalc.py", строка 10, в calc
Т = (десятичное число(-1)**к)*(математика.факториал(в десятичной системе(6)*к))*(13591409+545140134*к)
TypeError: 'decimal.Объект Decimal' не может быть интерпретирован как целое число
>>>

0x01AA

Извините, я не знаю Python... но я догадываюсь
Decimal(13591409+545140134*k)
и
Decimal(640320**(3*k))
может, поможет.


[Редактировать]
Здесь Repl.it - Python Online Compiler и IDE - быстрый, мощный, бесплатный[^] Я получаю ту же ошибку, что и ты.

После удаления десятичного преобразования здесь
t = (Decimal(-1)**k)*(math.factorial(6*k))*(13591409+545140134*k)
вместо
t = (Decimal(-1)**k)*(math.factorial(Decimal(6)*k))*(13591409+545140134*k) он работает

essexcase

Спасибо.

1 Ответов

Рейтинг:
2

0x01AA

Похоже, это и есть решение, Смотрите также все комментарии к этому вопросу.

  1  from decimal import Decimal, getcontext
  2  import math
  3  def calc(n):
  4      t = Decimal(0)
  5      pi = Decimal(0)
  6      deno = Decimal(0)
  7      k = 0
  8      for k in range(n):
  9          t = (Decimal(-1)**k)*(math.factorial(6*k))*(13591409+545140134*k)
 10          deno = math.factorial(3*k)*(math.factorial(k)**Decimal(3))*(640320**(3*k))
 11          pi += Decimal(t)/Decimal(deno)
 12      pi = pi * Decimal(12)/Decimal(640320**Decimal(1.5))
 13      pi = 1/pi
 14      return str(pi)
 15  print(calc(1))


Похоже, что некоторые реализации python выполняют неявные преобразования типов, а другие-нет.
Извините, что я не могу дать более достоверную информацию.