Функции

jeyzihno

Новичок
Пользователь
Апр 28, 2020
6
0
1
Здравствуйте!
Возникла сложность при передаче значений из одной функции в другую.
У меня первая функция присваивает значения переменной и мне нужно как-то передать эту переменную с присвоенным значением во вторую функцию, я пробовал несколько способов - выдает ошибку. Может быть есть какие-то еще способы передавать переменные?
Вот для примера
Python:
def one():
    a = 5
    b = 6
    return a, b

def two(a, b):
    c = a + b
    print(c)
two(one())

Ошибка : two() missing 1 required positional argument: 'b'
 

Insomnia78

Пользователь
Пользователь
Май 3, 2020
20
9
3
Здравствуйте!
Возникла сложность при передаче значений из одной функции в другую.
У меня первая функция присваивает значения переменной и мне нужно как-то передать эту переменную с присвоенным значением во вторую функцию, я пробовал несколько способов - выдает ошибку. Может быть есть какие-то еще способы передавать переменные?
Вот для примера
Python:
def one():
    a = 5
    b = 6
    return a, b

def two(a, b):
    c = a + b
    print(c)
two(one())

Ошибка : two() missing 1 required positional argument: 'b'
У тебя one() возвращает два элемента, а ты передаешь один. Тут нужно использовать *args. На мысль натолкнул, думаю, сам поймешь, что дальше ?
 
  • Мне нравится
Реакции: jeyzihno и Vlad_SD

jeyzihno

Новичок
Пользователь
Апр 28, 2020
6
0
1
У тебя one() возвращает два элемента, а ты передаешь один. Тут нужно использовать *args. На мысль натолкнул, думаю, сам поймешь, что дальше ?
Python:
def one():
    a = 5
    b = 6
    return a, b
one()
def two(*args):
    c = a + b
    print(c)
two(a, b)
Ошибка : name 'a' is not defined
Я понимаю, ошибка из-за того, что переменная "a" определена только в функции one
Я нашел несколько видео+почитал статьи насчёт *args и везде примеры с одной функцией, которой предают элементы не из какой-то функции и я не могу понять как поступать если у меня две функции
 

root

Пользователь
Пользователь
Апр 29, 2020
60
14
8
Москва
Как по мне более грамотный вариант, в первой функции return (a, b), а во второй def two(arg):. Чтобы получить a: arg[0], b: arg[1]

Зачем все усложнять :3
 
  • Мне нравится
Реакции: jeyzihno

root

Пользователь
Пользователь
Апр 29, 2020
60
14
8
Москва
Python:
def one():
    a = 5
    b = 6
    return a, b
one()
def two(*args):
    c = a + b
    print(c)
two(a, b)
Ошибка : name 'a' is not defined
Я понимаю, ошибка из-за того, что переменная "a" определена только в функции one
Я нашел несколько видео+почитал статьи насчёт *args и везде примеры с одной функцией, которой предают элементы не из какой-то функции и я не могу понять как поступать если у меня две функции
А в этом случае нужно просто two(one())
 
  • Мне нравится
Реакции: jeyzihno

jeyzihno

Новичок
Пользователь
Апр 28, 2020
6
0
1
А в этом случае нужно просто two(one())
Выдает ошибку : name 'a' is not defined
Ввожу это :
Python:
def one():
    a = 5
    b = 6
    return a, b
one()
def two(*args):
    c = a + b
    print(c)
two(one())

Я только начал изучать питон, так что заранее извиняюсь если я что-то не понял
 

Vlad_SD

Активный пользователь
Пользователь
Апр 7, 2020
91
45
18
Python:
def one():
    a = 5
    b = 6
    return a, b


def two(arg):
    c = arg[0] + arg[1]
    print(c)


two(one())

в данном случае, из def one вернётся кортеж из двух значений с индексами 0 и 1, после того, как ты передал кортеж в функцию def two просто обращаемся по индексу и выводим сумму

можно ещё так попробовать
Python:
def one():
    a = 5
    b = 6
    return a, b


def two(*args):
    c = sum(*args)
    print(c)


two(one())
 
Последнее редактирование:
  • Мне нравится
Реакции: jeyzihno

jeyzihno

Новичок
Пользователь
Апр 28, 2020
6
0
1
Python:
def one():
    a = 5
    b = 6
    return a, b


def two(arg):
    c = arg[0] + arg[1]
    print(c)


two(one())

в данном случае, из def one вернётся кортеж из двух значений с индексами 0 и 1, после того, как ты передал кортеж в функцию def two просто обращаемся по индексу и выводим сумму

можно ещё так попробовать
Python:
def one():
    a = 5
    b = 6
    return a, b


def two(*args):
    c = sum(*args)
    print(c)


two(one())
А если у меня будет 3 и больше функций и мне нужно будет из двух из них в третью передать переменные?
Типо значения из первой функции будут в списке arg, а значения из второй функции???
Вот я попробовал, думал, что значения буду записываться в названный мной список, но выдает ошибку.
Ошибка:'int' object is not subscriptable
Python:
def one():
    a = 5
    b = 6
    return (a, b)
def zero():
    t = 3
    return(t)
zero()
one()
def two(arg,qwe):
    c = arg[0] + arg[1] + qwe[0]
    print(c)
two(one(), zero())
 
Последнее редактирование:

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
А если у меня будет 3 и больше функций и мне нужно будет из двух из них в третью передать переменные?
Типо значения из первой функции будут в списке arg, а значения из второй функции???
Вот я попробовал, думал, что значения буду записываться в названный мной список, но выдает ошибку.
Ошибка:'int' object is not subscriptable
Python:
def one():
    a = 5
    b = 6
    return (a, b)
def zero():
    t = 3
    return(t)
zero()
one()
def two(arg,qwe):
    c = arg[0] + arg[1] + qwe[0]
    print(c)
two(one(), zero())
Ну вы свою ошибку читайте, смотрите строку. Как вы хотите получить первый элемент ЧИСЛА из переменной qwe?
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Просто сделайте так: c = arg[0] + arg[1] + qwe
Получите сумму.
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
+ переводите свои ошибки
+ смотрите строку, где ошибка
 

jeyzihno

Новичок
Пользователь
Апр 28, 2020
6
0
1
+ переводите свои ошибки
+ смотрите строку, где ошибка
Понял, спасибо
Но суть в том, что у меня в другом коде есть 3 функции и из двух функций в третью нужно передать по 3 переменных. Я использовал этот способ и у меня он все равно не передает их(
В функции findmin я передаю переменные в функцию s/
Выдает ошибку: "s() missing 3 required positional arguments: 'b', 'f', and 'g"', но я не понимаю почему не работает
Мне просто нужно передать переменные((
Python:
import random
array = []

def main():#Заполняет массив.
    for i in range(0, 10):
        array.append([])
        for j in range(1, 11):
            array[i].append(random.randint(0, 11))


def pr():# Печатает массив.
    for i in array:
        print(i)
    print()

def findmax():#Находит максимальное число.
    a = 0
    for i in array:
        for j in i:
            if j > a:
                a = j
                c = array[array.index(i)].index(j)  # Индекс максимального числа
                d = array.index(i)  # Индекс максимального число
    return(a, c, d)


def findmin():#Находит минимальное число.
    b = 11
    for i in array:
        for j in i:
            if j < b:
                b = j
                f = array[array.index(i)].index(j)  # Индекс минимального числа
                g = array.index(i)  # Индекс минимального числа
    return(b, f, g)




def s(arg, b, f, g):# Складывает элементы.
    z = 0
    if g < arg[2]:
        for i in range(f, 10):
            z += array[g][i]
        for i in range(0, arg[1]+1):
            z += array[arg[2]][i]
        for i in array:
            for j in i:
                if array.index(i) in range(g+1, arg[2]):
                    z += j
    if g > arg[2]:
        for i in range(arg[1], 10):
            z += array[arg[2]][i]
        for i in range(0, f+1):
            z += array[g][i]
        for i in array:
            for j in i:
                if array.index(i) in range(arg[2]+1, g):
                    z += j
    if (g == arg[2]) and (arg[1] > f):
        for i in range(f, arg[1]+1):
            z += array[arg[2]][i]
    if (g == arg[2]) and (arg[1] < f):
        for i in range(arg[1], f+1):
            z += array[arg[2]][i]
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Вы не прислали, строку вызова функции s.
 

jeyzihno

Новичок
Пользователь
Апр 28, 2020
6
0
1
Вы не прислали, строку вызова функции s.
Python:
import random
array = []

def main():#Заполняет массив.
    for i in range(0, 10):
        array.append([])
        for j in range(1, 11):
            array[i].append(random.randint(0, 11))


def pr():# Печатает массив.
    for i in array:
        print(i)
    print()

def findmax():#Находит максимальное число.
    a = 0
    for i in array:
        for j in i:
            if j > a:
                a = j
                c = array[array.index(i)].index(j)  # Индекс максимального числа
                d = array.index(i)  # Индекс максимального число
    return(a, c, d)


def findmin():#Находит минимальное число.
    b = 11
    for i in array:
        for j in i:
            if j < b:
                b = j
                f = array[array.index(i)].index(j)  # Индекс минимального числа
                g = array.index(i)  # Индекс минимального числа
    return(b, f, g)




def s(arg, b, f, g):# Складывает элементы.
    z = 0
    if g < arg[2]:
        for i in range(f, 10):
            z += array[g][i]
        for i in range(0, arg[1]+1):
            z += array[arg[2]][i]
        for i in array:
            for j in i:
                if array.index(i) in range(g+1, arg[2]):
                    z += j
    if g > arg[2]:
        for i in range(arg[1], 10):
            z += array[arg[2]][i]
        for i in range(0, f+1):
            z += array[g][i]
        for i in array:
            for j in i:
                if array.index(i) in range(arg[2]+1, g):
                    z += j
    if (g == arg[2]) and (arg[1] > f):
        for i in range(f, arg[1]+1):
            z += array[arg[2]][i]
    if (g == arg[2]) and (arg[1] < f):
        for i in range(arg[1], f+1):
            z += array[arg[2]][i]




main()
pr()
findmax()
findmin()
s(findmax())
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Почему не работает? Я вам объясню. Вы передаёте в качестве arg кортеж из переменных b, f и g. А где аргументы b, f и g?
 

Форум IT Специалистов