Python: имя функции не определено

По сути, я работаю над проектом AI, и я пытаюсь создать цикл, который делает это, пока одна координата <= другой координате, и я определил функцию, но когда я пытаюсь ее вызвать, у нее есть эта ошибка

Traceback (most recent call last):

File "not important", line 66, in

A()

NameError: name 'A' is not defined

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

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

import pygame as pg
import math
import time
import random


#starts pygame/create window
pg.init()
screen = pg.display.set_mode((800,600))
pg.display.set_caption("AI ALG")
clock = pg.time.Clock()

#Presets
KillerX = 50
KillerY = 50
EnemyX = 375
EnemyY = 275
gray = (255,255,255)
font = pg.font.Font(None, 32)
TICKSPASSED = 0
font_color = (100, 200, 150)
killertexture = pg.Surface((25,25))
killertexture.fill((0, 255, 0))
enemytexture = pg.Surface((25,25))
enemytexture.fill((255, 0, 0))
startAI = False





#main loop
runing = True
while runing:



    ticktxt = font.render(str(TICKSPASSED), True, font_color)
    activetxt = font.render(str(startAI), True, font_color)
    COO1 = font.render(str(KillerX), True, font_color)
    clock.tick(60)
    keys = pg.key.get_pressed()
    #events
    if keys[pg.K_SPACE]:
        startAI = True
        TICKSPASSED += 1
        


    for event in pg.event.get():

        #if event.type == pg.QUIT:
            #runing = False

        if event.type == pg.QUIT:
            runing = False

    #update
    #render
    screen.fill(gray)
    screen.blit(ticktxt, ((8,8), (8,8)))
    screen.blit(activetxt, ((730,8), (792,8)))
    screen.blit(COO1, ((730,8), (792,8)))
    screen.blit(killertexture, (KillerX,KillerY))
    screen.blit(enemytexture, (EnemyX,EnemyY))
    A()
    pg.display.flip()


def A():
    if not KillerX <= EnemyX:
        KillerX =- .5

pg.quit()

Любая помощь была бы потрясающей, спасибо

также извините, если мой код запутан :)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
71
2

Ответы 2

Вы должны определить A до того, как на него будет ссылаться. Переместите определение A перед циклом while, в котором вызывается A, и ошибка исчезнет.

Обратите внимание, что вы также должны либо объявить KillerX и EnemyX как глобальные переменные в функции A, либо сделать их параметрами для A и заставить A возвращать измененный KillerX.

Код, который вы выполняете, является встроенным, а не функцией, поэтому он запускается, как только он встречается в файле, то есть до того, как он увидит определение функции A. Вы можете переместить определение A до точки, прежде чем на него будет сделана ссылка, или вы можете поместить свой основной код в функцию, которую вы вызываете в конце файла. Просто нужно увидеть определение A, прежде чем пытаться его вызвать.

Другие вопросы по теме