Visual novel syntax error

Forum rules This is the right place for Ren'Py help. Please ask one question per thread, use a descriptive subject like 'NotFound error in option.rpy' , and include all the relevant information - especially any relevant code and traceback messages. Use the code tag to format scripts.

Forum rules
This is the right place for Ren’Py help. Please ask one question per thread, use a descriptive subject like ‘NotFound error in option.rpy’ , and include all the relevant information — especially any relevant code and traceback messages. Use the code tag to format scripts.

User avatar

RayDizzle

Regular
Posts: 25
Joined: Tue Jul 28, 2015 9:49 pm
Deviantart: Gem2012
Location: New Zealand
Contact:

Invalid Syntax Error [SOLVED]

#1

Post

by RayDizzle » Tue Sep 15, 2015 10:44 pm

I’ve been scripting a vn and have gotten pretty far without too many issues. But I’ve come to a bit of a snag. At one point in my script, I’m getting an invalid syntax error. Here’s the code:

Code: Select all

label start:
    default chose = ""
    default roommate = ""
    default chase = ""
    default dinner_dylan = ""
    $ alex = False
    $ dinner_dylan = False
    [Bunch of text]
    $ chose = "dinner_dylan"
    [Text]
    $ roommate = "dylan"
    [Text]
    $ chase = "yes"
    [Text]
    $ chose = "brekkiealex"
label home:
    hide shop
    "I walked back to my dormroom to relax."
    
    if alex == True:
        jump alexhall
    
    elif dinner_dylan == True:
        "When I got back to my dormroom, Dylan was leaning against the wall of the corridor."
        jump dylanhall
    
    elif chose == "dinner_dylan":
        "When I got back to my dormroom, Dylan was leaning against the wall of the corridor."
        jump dylanhall
    
    elif roommate == "dylan":
        "When I got to my new room, Dylan was leaning against the wall of the corridor."
        jump dylanroomhall
    
    elif chase = "yes":
        jump chaseyes
       
    elif chose == "brekkiealex":
        jump alexhall
    
    else:
        "On my way back, I saw this kid hanging around in the hallway."
        jump nobody
        

It also seems to think that some of my variables are undefine character names and I have no idea why that is. So if anyone could give me a little help, that’d be great. :)

Last edited by RayDizzle on Wed Sep 16, 2015 3:17 am, edited 1 time in total.


User avatar

trooper6

Lemma-Class Veteran
Posts: 3712
Joined: Sat Jul 09, 2011 10:33 pm
Projects: A Close Shave
Location: Medford, MA
Contact:

Re: Invalid Syntax Error

#2

Post

by trooper6 » Tue Sep 15, 2015 10:49 pm

So the first thing that stood out to me in your code was this:

Code: Select all

    default chose = ""
    default roommate = ""
    default chase = ""
    default dinner_dylan = ""
$ alex = False

So…what is happening here?

Why are those defaults indented? Why is the line with the $ not indented? Why is alex not defined with default?

I would imagine that the code should look more like:

Code: Select all

default chose = ""
default roommate = ""
default chase = ""
default dinner_dylan = ""
default alex = False

label start:
    "Blah Blah Blah"

But let’s get to what is probably the most relevant question. Do you use the name «alex» for two different things? Do you have this variable called alex and also a character called alex? Because you shouldn’t be reusing your variable names.

A Close Shave:
*Last Thing Done (Aug 17): Finished coding emotions and camera for 4/10 main labels.
*Currently Doing: Coding of emotions and camera for the labels—On 5/10
*First Next thing to do: Code in all CG and special animation stuff
*Next Next thing to do: Set up film animation
*Other Thing to Do: Do SFX and Score (maybe think about eye blinks?)

Check out My Clock Cookbook Recipe: http://lemmasoft.renai.us/forums/viewto … 51&t=21978


User avatar

RayDizzle

Regular
Posts: 25
Joined: Tue Jul 28, 2015 9:49 pm
Deviantart: Gem2012
Location: New Zealand
Contact:

Re: Invalid Syntax Error

#3

Post

by RayDizzle » Tue Sep 15, 2015 10:56 pm

No, I’m not reusing the names. Also, I re-wrote my coding the way you had shown me and now I have a new error:

Code: Select all

I'm sorry, but an uncaught exception occurred.

While running game code:
  File "game/script.rpy", line 1767, in script
    jump alexhall
SyntaxError: invalid syntax (script.rpy, line 1782)

So it seems that there’s something wrong with the jump? I’m totally stumped.

P.S. Thanks for helping out :) (I’m terrible at this stuff as you can see)


User avatar

trooper6

Lemma-Class Veteran
Posts: 3712
Joined: Sat Jul 09, 2011 10:33 pm
Projects: A Close Shave
Location: Medford, MA
Contact:

Re: Invalid Syntax Error

#4

Post

by trooper6 » Wed Sep 16, 2015 12:01 am

I’m not sure why you’d get that error. Perhaps post the code around line 1782? Including some lines before and some lines afterwards.

I took the code you provided and put it into a project and didn’t get any errors. Of course I did take the initial declaration of variables and put it outside of a label like you are supposed to, and I simplified some of your if statements. But it is working.

So…what is happening in your script?

Code: Select all

# You can place the script of your game in this file.

# Declare images below this line, using the image statement.
# eg. image eileen happy = "eileen_happy.png"

# Declare characters used by this game.
define e = Character('Eileen', color="#c8ffc8")

# Declare your variables here
default chose = ""
default roommate = ""
default chase = ""
default dinner_dylan = ""
default alex = False

label start:
    $ dinner_dylan = False
    #[Bunch of text]
    $ chose = "dinner_dylan"
    #[Text]
    $ roommate = "dylan"
    #[Text]
    $ chase = "yes"
    #[Text]
    $ chose = "brekkiealex"
    
label home:
    hide shop
    "I walked back to my dormroom to relax."
    
    if alex == True or chose == "brekkiealex":
        jump alexhall
    
    elif dinner_dylan == True or chose == "dinner_dylan":
        "When I got back to my dormroom, Dylan was leaning against the wall of the corridor."
        jump dylanhall
    
    elif roommate == "dylan":
        "When I got to my new room, Dylan was leaning against the wall of the corridor."
        jump dylanroomhall
    
    elif chase = "yes":
        jump chaseyes
    
    else:
        "On my way back, I saw this kid hanging around in the hallway."
        jump nobody

label alexhall:
    "You see Alex in the hall. Your game is over."
    return
    
label dylanhall:
    "Dylan talks to you a bit. Your game is over."
    return
    
label dylanroomhall:
    "Dylan, your roommate talks to you a bit. Your game is over."
    return
    
label chaseyes:
    "You decide to go chase after your best freinds. Your game is over."
    return
    
label nobody:
    "And you end up not dating and totally find with it. Your game is over."
    return

A Close Shave:
*Last Thing Done (Aug 17): Finished coding emotions and camera for 4/10 main labels.
*Currently Doing: Coding of emotions and camera for the labels—On 5/10
*First Next thing to do: Code in all CG and special animation stuff
*Next Next thing to do: Set up film animation
*Other Thing to Do: Do SFX and Score (maybe think about eye blinks?)

Check out My Clock Cookbook Recipe: http://lemmasoft.renai.us/forums/viewto … 51&t=21978


User avatar

PyTom

Ren’Py Creator
Posts: 15922
Joined: Mon Feb 02, 2004 10:58 am
Completed: Moonlight Walks
Projects: Ren’Py
IRC Nick: renpytom
Github: renpytom
itch: renpytom
Location: Kings Park, NY
Contact:

Re: Invalid Syntax Error

#5

Post

by PyTom » Wed Sep 16, 2015 12:18 am

Just by the name of the error, it sure looks like there is some Ren’Py code mixed in a Python block..

Supporting creators since 2004
(When was the last time you backed up your game?)

«Do good work.» — Virgil Ivan «Gus» Grissom
Software > Drama • https://www.patreon.com/renpytom


User avatar

RayDizzle

Regular
Posts: 25
Joined: Tue Jul 28, 2015 9:49 pm
Deviantart: Gem2012
Location: New Zealand
Contact:

Re: Invalid Syntax Error

#6

Post

by RayDizzle » Wed Sep 16, 2015 2:13 am

I’ve made some slight adjustments and it’s somehow managed to fix itself, though I don’t know how the adjustments I made have actually changed anything. But, all in all, it’s all working now. Thanks :)


Как чинить SyntaxError

SyntaxError — это ошибка, которая легко может ввести в ступор начинающего программиста. Стоит забыть одну запятую или не там поставить кавычку и Python наотрез откажется запускать программу. Что ещё хуже, по выводу в консоль сложно сообразить в чём дело. Выглядят сообщения страшно и непонятно. Что с этим делать — не ясно. Вот неполный список того, что можно встретить:

  • SyntaxError: invalid syntax
  • SyntaxError: EOL while scanning string literal
  • SyntaxError: unexpected EOF while parsing

Эта статья о том, как справиться с синтаксической ошибкой SyntaxError . Дочитайте её до конца и получите безотказный простой алгоритм действий, что поможет вам в трудную минуту — ваш спасательный круг.

Работать будем с программой, которая выводит на экран список учеников. Её код выглядит немного громоздко и, возможно, непривычно. Если не всё написанное вам понятно, то не отчаивайтесь, чтению статьи это не помешает.

Ожидается примерно такой результат в консоли:

Но запуск программы приводит к совсем другому результату. Скрипт сломан:

Ошибки в программе бывают разные и каждой нужен свой особый подход. Первым делом внимательно посмотрите на вывод программы в консоль. На последней строчке написано SyntaxError: invalid syntax . Если эти слова вам не знакомы, то обратитесь за переводом к Яндекс.Переводчику:

Первое слово SyntaxError Яндекс не понял. Помогите ему и разделите слова пробелом:

Теория. Синтаксические ошибки

Программирование — это не магия, а Python — не волшебный шар. Он не умеет предсказывать будущее, у него нет доступа к секретным знаниями, это просто автомат, это программа. Узнайте как она работает, как ищет ошибки в коде, и тогда легко найдете эффективный способ отладки. Вся необходимая теория собрана в этом разделе, дочитайте до конца.

SyntaxError — это синтаксическая ошибка. Она случается очень рано, еще до того, как Python запустит программу. Вот что делает компьютер, когда вы запускаете скрипт командой python script.py :

  1. запускает программу python
  2. python считывает текст из файла script.py
  3. python превращает текст программы в инструкции
  4. python исполняет инструкции

Синтаксическая ошибка SyntaxError возникает на четвёртом этапе в момент, когда Python разбирает текст программы на понятные ему компоненты. Сложные выражения в коде он разбирает на простейшие инструкции. Вот пример кода и инструкции для него:

  1. создать строку ‘Евгений’
  2. создать словарь
  3. в словарь добавить ключ ‘name’ со значением ‘Евгений’
  4. присвоить результат переменной person

SyntaxError случается когда Python не смог разбить сложный код на простые инструкции. Зная это, вы можете вручную разбить код на инструкции, чтобы затем проверить каждую из них по отдельности. Ошибка прячется в одной из инструкций.

1. Найдите поломанное выражение

Этот шаг сэкономит вам кучу сил. Найдите в программе сломанный участок кода. Его вам предстоит разобрать на отдельные инструкции. Посмотрите на вывод программы в консоль:

Вторая строчка сообщает: File «script.py», line 9 — ошибка в файле script.py на девятой строчке. Но эта строка является частью более сложного выражения, посмотрите на него целиком:

2. Разбейте выражение на инструкции

В прошлых шагах вы узнали что сломан этот фрагмент кода:

Разберите его на инструкции:

  1. создать строку ‘Имя ученика: ‘
  2. получить у строки метод format
  3. вызвать функцию с двумя аргументами
  4. результат присвоить переменной label

Так выделил бы инструкции программист, но вот Python сделать так не смог и сломался. Пора выяснить на какой инструкции нашла коса на камень.

Теперь ваша задача переписать код так, чтобы в каждой строке программы исполнялось не более одной инструкции из списка выше. Так вы сможете тестировать их по отдельности и облегчите себе задачу. Так выглядит отделение инструкции по созданию строки:

Сразу запустите код, проверьте что ошибка осталась на прежнему месте. Приступайте ко второй инструкции:

Строка format = template.format создает новую переменную format и кладёт в неё функцию. Да, да, это не ошибка! Python разрешает класть в переменные всё что угодно, в том числе и функции. Новая переменная переменная format теперь работает как обычная функция, и её можно вызвать: format(. ) .

Снова запустите код. Ошибка появится внутри format . Под сомнением остались две инструкции:

  1. вызвать функцию с двумя аргументами
  2. результат присвоить переменной label

Скорее всего, Python не распознал вызов функции. Проверьте это, избавьтесь от последней инструкции — от создания переменной label :

Запустите код. Ошибка снова там же — внутри format . Выходит, код вызова функции написан с ошибкой, Python не смог его превратить в инструкцию.

3. Проверьте синтаксис вызова функции

Теперь вы знаете что проблема в коде, вызывающем функцию. Можно помедитировать еще немного над кодом программы, пройтись по нему зорким взглядом еще разок в надежде на лучшее. А можно поискать в сети примеры кода для сравнения.

Запросите у Яндекса статьи по фразе “Python синтаксис функции”, а в них поищите код, похожий на вызов format и сравните. Вот одна из первых статей в поисковой выдаче:

Уверен, теперь вы нашли ошибку. Победа!

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Источник

Visual novel syntax error

426 уникальных посетителей
2 добавили в избранное

Итак суть проблемы проста — игра предназначена для определенной языковой среды. А потому некоторые славянские или европейские языковые настройки ей совсем не по нраву. Но решить эту проблему и начать играть в эту жутко обрезанную демо-версию по цене оригинала просто:

— Заходим в меню «Пуск»

— Открываем «Панель управления»

— Переходим по ярлыку «Язык и региональные стандарты»

— Заходим во вкладку «Дополнительно»

— И в разделе «Язык программ не поддерживающих Юникод» нажимаем » Изменить язык системы».

— Теперь из выпадающего окошка нам следует сменить с «русский» на «японский» язык.

*Не волнуйтесь! Данная операция не полечет за собой тотальную смену языка системы! При перезапуске вас будет ждать все та же система и программы, поддерживающие Юникод, с тем же языком, на котором они были до всех этих манипуляций!*

— Перезагружаем компьютер, как и предлагается.

— Профит! Запускайте игру и теперь никаких проблем не возникнет!

(кроме убожества урезанных прон-сцен и вырезанных CG, но это уже совсем другая история. )

Играйте в игру и не парьтесь больше о возможных конфликтах языка системы! Так же проделанные вами действия решают не только проблему с этой игрой, но и конфликты с многими фанатскими модами или самодельными эроге на базе RPG Maker и многих других гейм-мэйкеров.

Источник

Lemma Soft Forums

Supporting creators of visual novels and story-based games since 2003.

Visit our new games list, blog aggregator, IRC channel, and Discord.
NaNoRenO ends when April begins .
Activation problem? Email PyTom.

  • Unanswered topics
  • Active topics
  • Search
  • Members
  • The team

SyntaxError: invalid syntax

SyntaxError: invalid syntax

#1 Post by Night130 » Sun Apr 22, 2018 10:16 am

I’m not sure what I’m doing wrong. I’ve looked up different answers and none of them are working. I’m trying to make it so if you go on a date with Cindy, the player will say a different line in the future.

Here is the traceback:

Re: SyntaxError: invalid syntax

#2 Post by kivik » Sun Apr 22, 2018 10:32 am

Note:
You can do «if variable:» for quick variable checks — if the variable is boolean (True or False) then it’ll be evaluated the same as «if variable == True». This is true for most modern programming languages, though I’m old enough to have learnt QBasic and it confused the hell out of me when I was told I could shorten it.

You can get more advanced than that with variables, such as strings to see whether they’re empty or not (if string_var: would return True if string_var is not empty; False if string_var is «»). There’re standard conventions in most programming languages, but always make sure to read up on the language’s way of evaluating these statements

Re: SyntaxError: invalid syntax

#3 Post by Night130 » Sun Apr 22, 2018 10:58 am

Re: SyntaxError: invalid syntax

#4 Post by kivik » Sun Apr 22, 2018 1:07 pm

Источник

Lemma Soft Forums

Supporting creators of visual novels and story-based games since 2003.

Visit our new games list, blog aggregator, IRC channel, and Discord.
NaNoRenO ends when April begins .
Activation problem? Email PyTom.

  • Unanswered topics
  • Active topics
  • Search
  • Members
  • The team

Invalid Syntax Error [SOLVED]

Invalid Syntax Error [SOLVED]

#1 Post by RayDizzle » Tue Sep 15, 2015 10:44 pm

Re: Invalid Syntax Error

#2 Post by trooper6 » Tue Sep 15, 2015 10:49 pm

So. what is happening here?

Why are those defaults indented? Why is the line with the $ not indented? Why is alex not defined with default?

I would imagine that the code should look more like:

Re: Invalid Syntax Error

#3 Post by RayDizzle » Tue Sep 15, 2015 10:56 pm

So it seems that there’s something wrong with the jump? I’m totally stumped.

P.S. Thanks for helping out (I’m terrible at this stuff as you can see)

Re: Invalid Syntax Error

#4 Post by trooper6 » Wed Sep 16, 2015 12:01 am

I’m not sure why you’d get that error. Perhaps post the code around line 1782? Including some lines before and some lines afterwards.

I took the code you provided and put it into a project and didn’t get any errors. Of course I did take the initial declaration of variables and put it outside of a label like you are supposed to, and I simplified some of your if statements. But it is working.

So. what is happening in your script?

Источник

Что означает ошибка SyntaxError: invalid syntax

Когда Python не может разобраться в ваших командах

Ситуация: программист взял в работу математический проект — ему нужно написать код, который будет считать функции и выводить результаты. В задании написано:

«Пусть у нас есть функция f(x,y) = xy, которая перемножает два аргумента и возвращает полученное значение».

Программист садится и пишет код:

Но при выполнении такого кода компьютер выдаёт ошибку:

File «main.py», line 13
result = x y
^
❌ SyntaxError: invalid syntax

Почему так происходит: в каждом языке программирования есть свой синтаксис — правила написания и оформления команд. В Python тоже есть свой синтаксис, по которому для умножения нельзя просто поставить рядом две переменных, как в математике. Интерпретатор находит первую переменную и думает, что ему сейчас объяснят, что с ней делать. Но вместо этого он сразу находит вторую переменную. Интерпретатор не знает, как именно нужно их обработать, потому что у него нет правила «Если две переменные стоят рядом, их нужно перемножить». Поэтому интерпретатор останавливается и говорит, что у него лапки.

Что делать с ошибкой SyntaxError: invalid syntax

В нашем случае достаточно поставить звёздочку (знак умножения в Python) между переменными — это оператор умножения, который Python знает:

В общем случае найти источник ошибки SyntaxError: invalid syntax можно так:

  1. Проверьте, не идут ли у вас две команды на одной строке друг за другом.
  2. Найдите в справочнике описание команды, которую вы хотите выполнить. Возможно, где-то опечатка.
  3. Проверьте, не пропущена ли команда на месте ошибки.

Практика

Попробуйте найти ошибки в этих фрагментах кода:

Источник

SyntaxError — это ошибка, которая легко может ввести в ступор начинающего программиста. Стоит забыть одну запятую или не там поставить кавычку и Python наотрез откажется запускать программу. Что ещё хуже, по выводу в консоль сложно сообразить в чём дело. Выглядят сообщения страшно и непонятно. Что с этим делать — не ясно. Вот неполный список того, что можно встретить:

  • SyntaxError: invalid syntax
  • SyntaxError: EOL while scanning string literal
  • SyntaxError: unexpected EOF while parsing

Эта статья о том, как справиться с синтаксической ошибкой SyntaxError. Дочитайте её до конца и получите безотказный простой алгоритм действий, что поможет вам в трудную минуту — ваш спасательный круг.

Работать будем с программой, которая выводит на экран список учеников. Её код выглядит немного громоздко и, возможно, непривычно. Если не всё написанное вам понятно, то не отчаивайтесь, чтению статьи это не помешает.


students = [
    ['Егор', 'Кузьмин'],
    ['Денис', 'Давыдов'],
]

for first_name, last_name in students:
    label = 'Имя ученика: {first_name} {last_name}'.format(
        first_name = first_name
        last_name = last_name
    )

    print(label)

Ожидается примерно такой результат в консоли:

$ python script.py
Имя ученика: Егор Кузьмин
Имя ученика: Денис Давыдов

Но запуск программы приводит к совсем другому результату. Скрипт сломан:

$ python script.py
  File "script.py", line 9
    last_name = last_name
            ^
SyntaxError: invalid syntax

Ошибки в программе бывают разные и каждой нужен свой особый подход. Первым делом внимательно посмотрите на вывод программы в консоль. На последней строчке написано SyntaxError: invalid syntax. Если эти слова вам не знакомы, то обратитесь за переводом к Яндекс.Переводчику:

SyntaxError: недопустимый синтаксис
SyntaxError: неверный синтаксис

Первое слово SyntaxError Яндекс не понял. Помогите ему и разделите слова пробелом:

Syntax Error: invalid syntax
Синтаксическая ошибка: неверный синтаксис

Теория. Синтаксические ошибки

Программирование — это не магия, а Python — не волшебный шар. Он не умеет предсказывать будущее, у него нет доступа к секретным знаниями, это просто автомат, это программа. Узнайте как она работает, как ищет ошибки в коде, и тогда легко найдете эффективный способ отладки. Вся необходимая теория собрана в этом разделе, дочитайте до конца.

SyntaxError — это синтаксическая ошибка. Она случается очень рано, еще до того, как Python запустит программу. Вот что делает компьютер, когда вы запускаете скрипт командой python script.py:

  1. запускает программу python
  2. python считывает текст из файла script.py
  3. python превращает текст программы в инструкции
  4. python исполняет инструкции

Синтаксическая ошибка SyntaxError возникает на четвёртом этапе в момент, когда Python разбирает текст программы на понятные ему компоненты. Сложные выражения в коде он разбирает на простейшие инструкции. Вот пример кода и инструкции для него:

person = {'name': 'Евгений'}

Инструкции:

  1. создать строку 'Евгений'
  2. создать словарь
  3. в словарь добавить ключ 'name' со значением 'Евгений'
  4. присвоить результат переменной person

SyntaxError случается когда Python не смог разбить сложный код на простые инструкции. Зная это, вы можете вручную разбить код на инструкции, чтобы затем проверить каждую из них по отдельности. Ошибка прячется в одной из инструкций.

1. Найдите поломанное выражение

Этот шаг сэкономит вам кучу сил. Найдите в программе сломанный участок кода. Его вам предстоит разобрать на отдельные инструкции. Посмотрите на вывод программы в консоль:

$ python script.py
  File "script.py", line 9
    last_name = last_name
            ^
SyntaxError: invalid syntax

Вторая строчка сообщает: File "script.py", line 9 — ошибка в файле script.py на девятой строчке. Но эта строка является частью более сложного выражения, посмотрите на него целиком:

label = 'Имя ученика: {first_name} {last_name}'.format(
    first_name = first_name
    last_name = last_name
)

2. Разбейте выражение на инструкции

В прошлых шагах вы узнали что сломан этот фрагмент кода:

label = 'Имя ученика: {first_name} {last_name}'.format(
    first_name = first_name
    last_name = last_name
)

Разберите его на инструкции:

  1. создать строку 'Имя ученика: {first_name} {last_name}'
  2. получить у строки метод format
  3. вызвать функцию с двумя аргументами
  4. результат присвоить переменной label

Так выделил бы инструкции программист, но вот Python сделать так не смог и сломался. Пора выяснить на какой инструкции нашла коса на камень.

Теперь ваша задача переписать код так, чтобы в каждой строке программы исполнялось не более одной инструкции из списка выше. Так вы сможете тестировать их по отдельности и облегчите себе задачу. Так выглядит отделение инструкции по созданию строки:

# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'

label = template.format(
    first_name = first_name
    last_name = last_name
)

Сразу запустите код, проверьте что ошибка осталась на прежнему месте. Приступайте ко второй инструкции:

# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'

# 2. получить у строки метод
format = template.format

label = format(
    first_name = first_name
    last_name = last_name
)

Строка format = template.format создает новую переменную format и кладёт в неё функцию. Да, да, это не ошибка! Python разрешает класть в переменные всё что угодно, в том числе и функции. Новая переменная переменная format теперь работает как обычная функция, и её можно вызвать: format(...).

Снова запустите код. Ошибка появится внутри format. Под сомнением остались две инструкции:

  1. вызвать функцию с двумя аргументами
  2. результат присвоить переменной label

Скорее всего, Python не распознал вызов функции. Проверьте это, избавьтесь от последней инструкции — от создания переменной label:

# 1. создать строку
template = 'Имя ученика: {first_name} {last_name}'

# 2. получить у строки метод
format = template.format

# 3. вызвать функцию
format(
    first_name = first_name
    last_name = last_name
)

Запустите код. Ошибка снова там же — внутри format. Выходит, код вызова функции написан с ошибкой, Python не смог его превратить в инструкцию.

3. Проверьте синтаксис вызова функции

Теперь вы знаете что проблема в коде, вызывающем функцию. Можно помедитировать еще немного над кодом программы, пройтись по нему зорким взглядом еще разок в надежде на лучшее. А можно поискать в сети примеры кода для сравнения.

Запросите у Яндекса статьи по фразе “Python синтаксис функции”, а в них поищите код, похожий на вызов format и сравните. Вот одна из первых статей в поисковой выдаче:

  • Функции в Python

Уверен, теперь вы нашли ошибку. Победа!

Ситуация: программист взял в работу математический проект — ему нужно написать код, который будет считать функции и выводить результаты. В задании написано:

«Пусть у нас есть функция f(x,y) = xy, которая перемножает два аргумента и возвращает полученное значение».

Программист садится и пишет код:

a = 10
b = 15
result = 0
def fun(x,y): 
    return x y
result = fun(a,b)
print(result)

Но при выполнении такого кода компьютер выдаёт ошибку:

File "main.py", line 13
result = x y
^
❌ SyntaxError: invalid syntax

Почему так происходит: в каждом языке программирования есть свой синтаксис — правила написания и оформления команд. В Python тоже есть свой синтаксис, по которому для умножения нельзя просто поставить рядом две переменных, как в математике. Интерпретатор находит первую переменную и думает, что ему сейчас объяснят, что с ней делать. Но вместо этого он сразу находит вторую переменную. Интерпретатор не знает, как именно нужно их обработать, потому что у него нет правила «Если две переменные стоят рядом, их нужно перемножить». Поэтому интерпретатор останавливается и говорит, что у него лапки. 

Что делать с ошибкой SyntaxError: invalid syntax

В нашем случае достаточно поставить звёздочку (знак умножения в Python) между переменными — это оператор умножения, который Python знает:

a = 10
b = 15
result = 0
def fun(x,y): 
    return x * y
result = fun(a,b)
print(result)

В общем случае найти источник ошибки SyntaxError: invalid syntax можно так:

  1. Проверьте, не идут ли у вас две команды на одной строке друг за другом.
  2. Найдите в справочнике описание команды, которую вы хотите выполнить. Возможно, где-то опечатка.
  3. Проверьте, не пропущена ли команда на месте ошибки.

Практика

Попробуйте найти ошибки в этих фрагментах кода:

x = 10 y = 15
def fun(x,y): 
    return x * y
try:  
    a = 100
    b = "PythonRu"
    assert a = b
except AssertionError:  
    print("Исключение AssertionError.")
else:  
    print("Успех, нет ошибок!")

Вёрстка:

Кирилл Климентьев

Когда пишу функцию происходит ошибка invalid syntax, помогите пожалуйста!
Sublime выделяет так:
5ee9c5cac12f5126965563.jpeg

import pygame

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

bg = pygame.image.load('bg.jpg')


class Player(pygame.sprite.Sprite):
    idle = True
    left = False
    right = False

    def __init__(self):
        super.__init__()

        self.image = pygame.image.load('idle.png')
        self.rect = self.image.get_rect()

        self.change_x = 0
        self.change_y = 0

    def update(self):
        self.calc_gravity()

        self.rect.x += self.change_x

        block_hit_list = pygame.sprite.spritecollide(
            self, self.level.platform_list, False)
        for block in block_hit_list:
            if self.change_x > 0:
                self.rect.right = block.rect.left
            elif self.change_x < 0:
                self.rect.left = block.rect.right

        self.rect.y += self.change_y

        block_hit_list = pygame.sprite.spritecollide(
            self, self.level.platform_list, False)
        for block in block_hit_list:
            if self.change_y > 0:
                self.rect.bottom = block.rect.top
            elif self.change_y < 0:
                self.rect.top = block.rect.bottom

    def calc_grav(self):
        if self.change_y == 0:
            self.change_y = 1
        else:
            self.change_y += .95

        if self.rect.y >= SCREEN_HEIGHT - self.rect.height and self.change_y >= 0:
            self.change_y = 0
            self.rect.y = SCREEN_HEIGHT - self.rect.height

    def jump(self):
        self.rect.y += 10
        platform_hit_list = pygame.sprite.spritecollide(
            self, self.level.platform_list, False)
        self.rect.y -= 10

        if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT:
            self.change_y = -16

    def go_left(self):
        self.change_x = -9
        if (not self.left):
            self.image = pygame.image.load('left.png')
            self.idle = False
            self.left = True
            self.right = False

    def go_right(self):
        self.change_x = 9
        if (not self.right):
            self.image = pygame.image.load('left.png')
            self.idle = False
            self.left = False
            self.right = True

    def stop(self):
        self.change_x = 0
        self.image = pygame.image.load('idle.png')
        self.idle = True
        self.left = False
        self.right = False


class Block(pygame.sprite.Sprite):
    def __init__(self, width, height):
        super().__init__()
        self.image = pygame.image.load('block.png')

        self.rect = self.image.get_rect


class Level(object):
    def __init__(self, player):
        self.patforms = pygame.sprite.Group()
        self.player = player

    def update(self):
        self.platform_list.update()

    def draw(self, screen):
        screen.blit(bg, (0, 0))

        self.platform_list.draw(screen)


class Level_01(Level):
        def __init__(self, player):
            Level.__init__(self, player)

            level = [
                [25, 24, 500, 500],
                [25, 24, 200, 400],
                [25, 24, 600, 300],
            ]

            for platform in level:
                block = Platform(platform[0], platform[1])
                block.rect.x = platform[2]
                block.rect.y = platform[3]
                block.player = self.player
                self.platform_list.add(block


def main():
    pygame.init()

    size=[SCREEN_WIDTH, SCREEN_HEIGHT]
    screen=pygame.display.set_mode(size)

    pygame.display.set_caption("Game")

    player=Player()

    level_list=[]
    level_list.append(Level_01(player))

    current_level_no=0
    current_level=level_list[current_level_no]

    active_sprite_list=pygame.sprite.Group()
    player.level=current_level

    player.rect.x=340
    player.rect.y=SCREEN_HEIGHT - player.rect.height
    active_sprite_list.add(player)


    clock=pygame.time.Clock()

    done=False

    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done=True

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    player.go_left()
                if event.key == pygame.K_d:
                    player.go_right()
                if event.key == pygame.K_SPACE:
                    player.jump()

        current_level.draw(screen)
        active_sprite_list.draw(screen)

        clock.tick(25)

        pygame.display.flip()

pygame.quit()

Ошибка:

File "D:VoxelProgrammingProjectsGameScriptsmain.py", line 126
    def main():
    ^
SyntaxError: invalid syntax

stu_dent

0 / 0 / 0

Регистрация: 18.02.2011

Сообщений: 23

1

25.02.2011, 15:54. Показов 9523. Ответов 10

Метки нет (Все метки)


написал вот ету прожку на visual prolog 7.3

Создайте предикат, вычисляющий сумму цифр натурального числа.

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
clauses
    classInfo(className, classVersion).
 
class predicates
   sg : ( integer , integer ) nondeterm anyflow.
   
clauses
    sg (N,M) :- 
          N<10,!.
    sg (N,S) :- 
    sg (N / 10, S1), 
         S = S1 + N% 10.
   
clauses
    run():-
        console::init(),
        N = stdio::read(),
        sg(N,S),
        stdio::write(S),
        succeed(). % place your own code here
end implement main
 
goal
    mainExe::run(main::run).

во время компиляции выдает ошибку main.pro(20,1) error c161: Syntax error: ‘.’ is expected

в чом ошибка???

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

25.02.2011, 15:54

10

2505 / 1479 / 37

Регистрация: 14.09.2009

Сообщений: 2,740

25.02.2011, 16:21

2

Ну Вам же сказано в чем, и даже номер строки указан, Вы в 19й строке точку заккоментили.



1



stu_dent

0 / 0 / 0

Регистрация: 18.02.2011

Сообщений: 23

25.02.2011, 16:45

 [ТС]

3

ЗА ОТВЕТ БЛАГОДАРЕН! ну вот после того как поправил код то начали вылазить другие ошибки…
вот код

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
clauses
    classInfo(className, classVersion).
 
class predicates
   sg : ( integer , integer ) nondeterm anyflow.
   
clauses
    sg (N,M) :- 
          N < 10,!.
    sg (N,S) :- 
    sg (N div 10, S1), 
         S = S1 + N mod 10.
   
clauses
    run():-
        console::init(),
        N = stdio::read();
        sg(N,S),
        stdio::write(S),
        succeed(). % place your own code here
end implement main
 
goal
    mainExe::run(main::run).

вот ошибки:
1.main.pro(16,10) error c603: The flow pattern ‘(o,i)’ does not exist for ‘<‘
2.main.pro(18,8) error c603: The flow pattern ‘(o,i)’ does not exist for ‘div’
3.main.pro(24,9) warning c507: Unused variable: ‘N’
4.main.pro(24,9) warning c507: Unused variable: ‘M’

ПОЖАЛУЙСТА ПОМОГИТЕ ИСПРАВИТЬ!



0



2505 / 1479 / 37

Регистрация: 14.09.2009

Сообщений: 2,740

25.02.2011, 16:57

4

Первая ошибка значит, что первый параметр значиться как выходной, а Вы пытаетесь его с чем-то сравнивать. Надо так писать sg: (integer,integer) procedure (i,o). Вторая ошибка аналогично, а третья и четвертая потому что в первом правиле надо M на N поменять.



1



0 / 0 / 0

Регистрация: 18.02.2011

Сообщений: 23

25.02.2011, 17:11

 [ТС]

5

Цитата
Сообщение от Грымзик
Посмотреть сообщение

Первая ошибка значит, что первый параметр значиться как выходной, а Вы пытаетесь его с чем-то сравнивать. Надо так писать sg: (integer,integer) procedure (i,o). Вторая ошибка аналогично, а третья и четвертая потому что в первом правиле надо M на N поменять.

ОЧЕНЬ БЛАГОДАРЕН ВАМ ЗА ТО ЧТО ВЫ ОТКЛИКНУЛИСЬ! ну все-таки было бы неплохо помочь мне поправить код — ну очень сильно прошу!
ЗАРАНЕЕ БЛАГОДАРЕН!



0



Грымзик

2505 / 1479 / 37

Регистрация: 14.09.2009

Сообщений: 2,740

25.02.2011, 17:17

6

Ой, могли бы и самостоятельно, я же все понятно указала

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
clauses
    classInfo(className, classVersion).
 
class predicates
   sg : ( integer , integer ) procedure (i,o).
   
clauses
        sg (N,N) :- 
              N < 10,!.
        sg (N,S) :- 
        sg (N div 10, S1), 
             S = S1 + N mod 10.
   
clauses
    run():-
        console::init(),
        N = stdio::read(),
        sg(N,S),
        stdio::write(S),
        succeed(). % place your own code here
end implement main



1



stu_dent

0 / 0 / 0

Регистрация: 18.02.2011

Сообщений: 23

25.02.2011, 17:22

 [ТС]

7

Цитата
Сообщение от Грымзик
Посмотреть сообщение

Ой, могли бы и самостоятельно, я же все понятно указала

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
implement main
    open core
 
constants
    className = "main".
    classVersion = "".
 
clauses
    classInfo(className, classVersion).
 
class predicates
   sg : ( integer , integer ) procedure (i,o).
   
clauses
        sg (N,N) :- 
              N < 10,!.
        sg (N,S) :- 
        sg (N div 10, S1), 
             S = S1 + N mod 10.
   
clauses
    run():-
        console::init(),
        N = stdio::read(),
        sg(N,S),
        stdio::write(S),
        succeed(). % place your own code here
end implement main

после того как ВЫ поправили код, я попробовал запустить его — а тут такое, аж целых 28 ошибок!
ПОПРАВЬТЕ КОД ЧТО Б ОН ЗАРАБОТАЛ — НУ ОЧЕНЬ СИЛЬНО ВАС ПРОШУ!



0



2505 / 1479 / 37

Регистрация: 14.09.2009

Сообщений: 2,740

25.02.2011, 17:25

8

А, ну это я просто не все скопировала, добавьте в конце
goal
mainExe::run(main::run).



1



0 / 0 / 0

Регистрация: 18.02.2011

Сообщений: 23

25.02.2011, 17:30

 [ТС]

9

Цитата
Сообщение от Грымзик
Посмотреть сообщение

А, ну это я просто не все скопировала, добавьте в конце
goal
mainExe::run(main::run).

о, прикольно — все заработало…

Уважаемый модератор Грымзик подскажыте как можна с вами связаться? просто еше нужна будет помощь по написанию 8 программ на visual prolog 7.3, не за бесплатно соответственно!
или может мне писать то что смогу а вы на форуме поможыте подправить код до рабочего состояния…



0



2505 / 1479 / 37

Регистрация: 14.09.2009

Сообщений: 2,740

25.02.2011, 18:00

10

Лучше пишите то, что сможете, а мы будем стараться помочь, так как в 7.* я не особо разбираюсь и не могу гарантировать, что напишу.



1



0 / 0 / 0

Регистрация: 18.02.2011

Сообщений: 23

25.02.2011, 18:04

 [ТС]

11

Цитата
Сообщение от Грымзик
Посмотреть сообщение

Лучше пишите то, что сможете, а мы будем стараться помочь, так как в 7.* я не особо разбираюсь и не могу гарантировать, что напишу.

ок! СПАСИБО!



0



Понравилась статья? Поделить с друзьями:
  • Viessmann vitopend 100w ошибка f05
  • Viessmann vitopend 100 ошибка 06 как устранить
  • Viessmann vitopend 100 как сбросить ошибку
  • Viessmann vitopend 050 ошибки
  • Viessmann error f5