Функция, которая принимает Int и список - PullRequest
0 голосов
/ 04 августа 2020

У меня есть приведенный ниже код для карточной игры, он должен удалить N автомобилей из заданного списка карт и вернуть кортеж с 2 списками, первый список - это N объектов из исходного списка, а второй список - остальные карты не извлечены из исходного списка.

lista_cartas = [1,2,3,4,5,6,7,8]
lista_N = []
N = 5
for i in range(N):
    extracto = lista_cartas.pop(0)
    lista_N.append(extracto)
    lista_final = [lista_N, lista_cartas]
print(tuple(lista_final))

([1, 2, 3, 4, 5], [6, 7, 8])

он работает так, как я хочу, но мне нужно преобразовать это в функцию, которая принимает номер N и список в качестве параметров, как я могу этого добиться?

это действительно что-то? или как сделать так, чтобы функция принимала список?

def sacar_cartas(N, lista=[]):
   for i in range(N):
       extracto = lista_cartas.pop(0)
       lista_N.append(extracto)
       lista_final = [lista_N, lista_cartas]
print(tuple(lista_final))

Ответы [ 5 ]

3 голосов
/ 04 августа 2020

Вы можете полностью переработать свое решение, используя фрагменты списка :

lista_cartas = [1,2,3,4,5,6,7,8]

def sacar_cartas(todas_cartas, N):
    return todas_cartas[:N], todas_cartas[N:]

, так что sacar_cartas(lista_cartas, 5) приводит к tuple:

([1, 2, 3, 4, 5], [6, 7, 8])

Обратите внимание, как мы можем избежать явного вызова tuple, вместо этого возвращая значения, разделенные запятыми.

1 голос
/ 04 августа 2020

Немного переработан ваш код, чтобы функция не изменяла переданный список (из-за вызова lista_cartas.copy (). Что касается вашего кода и вопроса, Python функции могут принимать список как переменную, не сообщая это список.

lista_cartas = [1,2,3,4,5,6,7,8]

def sacar_cartas(N, lista_cartas):
    lista_N = []
    lista_ct = lista_cartas.copy()
    for i in range(N):
        extracto = lista_ct.pop(0)
        lista_N.append(extracto)
        lista_final = [lista_N, lista_ct]
    return lista_final    

sacar_cartas(5, lista_cartas)
1 голос
/ 04 августа 2020

простое преобразование:

def sacar_cartas(N, lista):
    lista_N = []
    for i in range(N):
        extracto = lista.pop(0)
        lista_N.append(extracto)
    return tuple([lista_N, lista])
print(sacar_cartas(5, [1,2,3,4,5,6,7,8]))
0 голосов
/ 04 августа 2020

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

lista_cartas = [1,2,3,4,5,6,7,8]
lista_N = []

def sacar_cartas(N, lista_cartas, lista_N):
   for i in range(N):
       extracto = lista_cartas.pop(0)
       lista_N.append(extracto)
       lista_final = [lista_N, lista_cartas]   
   print(tuple(lista_final))

# Call the function for it to work
sacar_cartas(N = 5, lista_cartas, lista_N)

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

0 голосов
/ 04 августа 2020

Python набирается уткой. Вы можете передать список, как и любую другую переменную, без необходимости определять тип:

def function(some_variable):
    for element in some_variable:
        print(element)

function(['1st element', '2nd element', '3rd element'])
# prints:
# 1st element
# 2nd element
# 3rd element

Это делается:

def function(some_variable=[]):

Указывает ли NOT , что эта переменная представляет собой список и не требуется. Вместо этого он сообщает функции, что, если вы не передадите эту переменную, по умолчанию будет установлено значение []

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...