TypeError: inter() missing 1 required positional argument: 'x2

when writing the code I encountered such a problem that any variable that is in this line
def inter(x1,db1, y1, y2, db2,x2 ):

is the cause of the error
TypeError: inter() missing 1 required positional argument: 'x2'

Why are you writing in English on a Russian forum?
:confusedparrot:

Show the full code or the part where you are caling this function.

Most likely you are not passing enough parameters.

For example

def multiply(x, y):
    return x * y

result = multiply(2)
# instead of
# result = multiply(2, 3)

Простите не знал
Я новичёк :grinning:

Вот полный код


import pygame

def inter(x1,db1, y1, y2, db2,x2 ):
    if x1 > x2-db1 and x1 < x2+db2 and y1 > y2-db1 and y1 < y2+db2:
        return 1
    else:
        return 0
pygame.init()
window= pygame.display.set_mode((400, 400))
screen = pygame.Surface((400, 400))
player= pygame. Surface((40, 40))
zet = pygame.Surface((40, 40))
arrow = pygame.Surface((20, 40))
strike = ("a_y")
count=0
myfont = pygame.font.SysFont('monospace', 15)
db2=('db1')

a_x = 1000
a_y = 1000

x_z = 0
y_z = 0

x_p=0
y_p=360

right = True

done = False
while done == False:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            done = True
        if e.type == pygame. KEYDOWN and e.key== pygame.K_s:
            y_p += 5
        if e.type == pygame.KEYDOWN and e.key == pygame.K_w:
            y_p -= 5
        if e.type == pygame.KEYDOWN and e.key == pygame.K_a:
            x_p -= 5
        if e.type == pygame.KEYDOWN and e.key == pygame.K_d:
            x_p += 5
        if e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE:
            if strike == False:
                strike = True
                a_x = x_p
                a_y = y_p - 40

    if strike:
           a_y -= 0.5
    if a_y < 0:
            strike = False
            a_y = 1000
            a_x = 1000
 
    if inter(a_x,a_y,x_z,y_z,db2):
        count += 1

    if right:
        x_z += 1
        if x_z > 400:
            x_z -= 1
            right = False
    else:
        x_z -= 1
        if x_z < 0:
            x_z += 1
            right = True
    string = myfont.render('Очков: '+str(count), 0,(255,0,0))
    screen.fill((0,255,0))
    screen.blit(string, (0, 50))
    screen.blit(arrow, (a_x, a_y))
    screen.blit(zet, (x_z, y_z))
    screen.blit(player, (x_p, y_p))
    window.blit(screen, (0, 0))
    pygame.display.update()
pygame.quit()

принимает 6 параметров:

  1. x1
  2. db1
  3. y1
  4. y2
  5. db2
  6. x2

передается 5 параметров:

  1. a_x
  2. a_y
  3. x_z
  4. y_z
  5. db2

Большое спасибо, но теперь выдает
NameError: name ‘db1’ is not defined

когда я сделал так
db2=(‘db1’)
db1=(‘db2’)
выдало
TypeError: unsupported operand type(s) for -: ‘str’ and ‘float’

Так функция явно с числами что-то делает

зачем строки передавать?)

хороший вопрос

Может это будет странный вопрос для тебя, но что вы имели ввиду под фразой
“зачем строки передавать”
просто все что я находил по этой теме-это оператор “print”

'db2' это строка, а не число. Функция делает какие-то арифметические операции с числами. Нет смысла передавать ей не число.

то есть надо просто “преобразовать” из ‘str’ в ‘int’?

Ну значение db2 чот не очень похоже на число. Числа это что-нибудь типа 0, 1, 2, 3, 42, 100500, -100500, … :slight_smile:

Надо разобраться какая задача и что тут происходить должно.

я пишу по образцам, поэтому я и сам не особо понимаю

по задумке это должны быть величины персонажей