Есть ли ошибка в этих простых функциях python, которые я создал?

#python

#python

Вопрос:

В настоящее время я тестирую некоторые функции. Что-то кажется неправильным, но я просто не могу понять, что.

Есть 2 списка, список предположений a и список предустановок b . Я хочу проверить, является ли определенный элемент a списка:

  1. Существует в b списке и соответствует b элементу того же индекса (OnPlace)
  2. Вообще не существует в b списке (NonePlace)
  3. Существует в b списке, однако индексы соответствующих элементов не совпадают (не на месте)

Код приведен ниже.

Следует отметить две вещи:

  • Только целые числа от 1 до 6 будут членами обоих списков в программе.
  • Длина списков ограничена 4.

https://hastebin.com/odilafikoy.yaml

 a = [1,4,5,6]
b = [1,6,1,1]

# Guess List is x parameter, index is y parameter

def OnPlace(x,y):
    global b
    if x[y] == b[y]:
        return True

def NonePlace(x,y): 
    global b
    if x[y] != b[1] and x[y] != b[2] and x[y] != b[3] and x[y] != b[0]:
        return True

def OffPlace(x,y):
    global b
    if x[y] != b[y]:
        if y == 0:
          if x[y] == b[1] or x[y] == b[2] or x[y] == b[3]:
             return True
        if y == 1:
           if x[y] == b[0] or x[y] == b[2] or x[y] == b[3]:
              return True
        if y == 2:
           if x[y] == b[1] or x[y] == b[0] or x[y] == b[3]:
             return True
        if y == 3:
           if x[y] == b[0] or x[y] == b[2] or x[y] == b[1]:
              return True
              
              
print(OnPlace(a,0))
print(NonePlace(a,2))
print(OffPlace(a,3))
 

Комментарии:

1. Я в замешательстве, вы просите людей отлаживать ваш код для вас? Возможно, вам будет полезно написать тесты для вашего программного обеспечения и, возможно, вернуться, если у вас возникнет конкретная и решаемая проблема

Ответ №1:

Это можно упростить следующим образом, и будет намного легче понять, что происходит

 a = [1,4,5,6]
b = [1,6,3,1]
#Guess List is x parameter, index is y parameter
def OnPlace(x,y):
    if x[y] == b[y]:
        return True
    return False
def NonePlace(x,y): 
    if x[y] not in b:
        return True
    return False
def OffPlace(x,y):
    if x[y] in b and b.index(x[y]) != y:
        return True
    return False
                          
print(OnPlace(a,1))
print(NonePlace(a,3))
print(OffPlace(a,2))
 

вам не нужно использовать ключевое слово global для доступа к переменным здесь, проверьте это

чтобы узнать больше о функции индексации списков, взгляните на это