5 / 0 / 0
Регистрация: 20.09.2019
Сообщений: 24
1

А возможно ли вывести значение переменной за пределы цикла?

22.09.2019, 21:28. Показов 10820. Ответов 9
Метки нет (Все метки)

Имеется простейший код. В котором я провожу однотипные вычисления при помощи цикла for. С полученными значениями я хочу проводить дальнейшие вычисления. Все вычисления будут проходить за пределами цикла и никак иначе. Как вынесли полученные значения за пределы?


Python
1
2
3
4
5
6
n=100
def izm(n):
    for i in range(1,n):
        g=5/i + i**2
        print(g)
izm(n)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2019, 21:28
Ответы с готовыми решениями:

Как вывести значение переменной из цикла for
int num = int.Parse(Console.ReadLine()); int power = int.Parse(Console.ReadLine()); ...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в цикле while в строке x:=x div 10; выдает ошибку "Нельзя изменять значение переменной...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в строке If i=k Then i:=i+1; выдает ошибку "Нельзя изменять значение переменной цикла...

Нельзя изменять значение переменной цикла внутри этого цикла
function factorial(x:integer):integer; begin var i,var1:integer; for i:=1 to x do begin...

9
59 / 84 / 16
Регистрация: 25.03.2019
Сообщений: 235
22.09.2019, 21:38 2
Цитата Сообщение от Удалов Павел Посмотреть сообщение
Как вынесли полученные значения за пределы?
Функцию создайте и ее из цикла вызывайте.
1
5 / 0 / 0
Регистрация: 20.09.2019
Сообщений: 24
22.09.2019, 21:58  [ТС] 3
Это понятно. Но мне нужно чтобы было так. В цикле ведутся расчеты. За пределами цикла я полученные значения вставляю в другой цикл (именно в другой, ибо это связано с расчетами). Чтобы выглядело примерно так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
n=100
def izm(n):
    for i in range(1,n):
        g=i*5+10**i
        print(g)
            
izm(n)
 
def izm2():
    for i in range(len(g)):
        h=600+700*i+1000*(i**2)
        print(h)
izm2()
0
3417 / 2525 / 968
Регистрация: 21.03.2016
Сообщений: 6,536
22.09.2019, 22:07 4
Лучший ответ Сообщение было отмечено Удалов Павел как решение

Решение

соберите в список

Добавлено через 8 минут
Цитата Сообщение от Удалов Павел Посмотреть сообщение
Чтобы выглядело примерно так
так не получиться переменная g видна только в функции def izm(n) и является числом так что len() к ней не применима

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def izm(n):
    for i in range(1,n):
        g=i*5+10**i
        print('izm -',g)
        izm2(g)
        
 
def izm2(x):
    for i in range(x):
        h=600+700*i+1000*(i**2)
        print('izm2 -',h)
 
 
n=3
izm(n)
1
Автоматизируй это!
Эксперт Python
5535 / 3572 / 1019
Регистрация: 30.03.2015
Сообщений: 10,890
Записей в блоге: 29
22.09.2019, 22:10 5
Удалов Павел, можно еще генератором передавать, я написал бы пример, но не понимаю чего ты делаешь
Цитата Сообщение от Удалов Павел Посмотреть сообщение
for i in range(len(g))
g - это вроде как число, а ты len для него пишешь...

упрощенно
Python
1
2
3
4
5
6
7
8
9
10
def izm(n):
    for i in range(1,n):
        yield i+n
        
             
def izm2():
    for i in izm(3):
        h=600+i
        print(h)
izm2()
1
5 / 0 / 0
Регистрация: 20.09.2019
Сообщений: 24
23.09.2019, 00:34  [ТС] 6
Спасибо за помощь)
0
Эксперт Python
4569 / 1992 / 357
Регистрация: 17.03.2012
Сообщений: 9,983
Записей в блоге: 5
23.09.2019, 12:00 7
Удалов Павел, простейший вариант - это, как уже сказали выше, с помощью генератора.
Но более универсально - передавать в ваш цикл некий "приемник" для значения. Примерно так:
Python
1
2
3
4
5
6
7
8
9
# izm1:
for i in range(...):
   value = ...
   receiver.process(value)  # receiver занимается вторым измерением, тип Izm2
 
 
class Izm2(object):
   def process(value):
       ... что-то делаем с пришедшим значением
При этом Izm2 тоже можно сделать генератором для простого случая. См. generator.send.
0
5 / 0 / 0
Регистрация: 20.09.2019
Сообщений: 24
23.09.2019, 16:35  [ТС] 8
Суть в том, что у меня есть однотипные вычисления, в которых я преобразую исходные данные. Далее эти данные нужно использовать как аргументы для других функций. Причем аргументы берутся сразу из нескольких изначальных функций. Поэтому я и хочу извлечь полученные значения за пределы функций(если это возможно), дабы упростить себе работу в дальнейшем.
P.S. данные действия прийдётся делать на протяжении всей программы.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
n=5
fr=(0,20,50,70,100)
Tkip=(28,70,120,170,204)
p15=0.845
alfa=(0.0018293-0.0013233*p15)/(1-(0.0013233*5))
p20=p15-(5*alfa)
Tzaz=-13
beta=0.65+(0.09*p20)
H=0.13-(0.0011*Tzaz)
 
 
def izm(n, fr, Tkip):
    Tcrlist=[]
    frvollist=[]
    for i in range(1, n):
        Tcr=((Tkip[i-1]+Tkip[i])/2)
        print('%d-я средняя температура=%f' % (i+1,(Tcr)))
        Tcrlist.append(Tcr)
        
    print(Tcrlist)
    
    for i in range(1, n):
        frvol=((fr[i]-fr[i-1])/100)
        print('%d-я объемная доля=%f' % (i+1,frvol))
        frvollist.append(frvol)
    print(frvollist)
    molar(Tcrlist)
def molar(x):
    for i in range(0,n):
        M=(60+0.3*x[i]+0.001*(x[i]**2))
        print('молярная масса фракции='+str(M))
    for i in range(0,n):
        p=beta*((x[i]/100)**H)
        print('плотность фракции='+str(p))
    #vol(M,p,frvol) 
def vol(x,y):    #в данную функцию нужно передать результаты функции izm(frvol) и функции molar(p)
    for i in range(1,n):
        mass=(frvol[i]/p[i])/(sum(frvol[i]/p[i]))
        print(mass)
    moll(mass, M)
def moll(x):  #в данную функцию нужно передать результат функции vol(mass) и функции molar(M) 
    for i in range(1,n):
        mol=((mass[i])/(M[i]))/(sum(mass[i])/(M[i]))
 
izm(n,fr,Tkip)
Возможно провести все расчеты используя функцию в функции. Но дело в том что код планируется быть очень длинным и это крайне сильно загромоздит все. Если конечно извлечь нельзя то буду уже делать так как знаю
0
Эксперт Python
4569 / 1992 / 357
Регистрация: 17.03.2012
Сообщений: 9,983
Записей в блоге: 5
23.09.2019, 16:58 9
Лучший ответ Сообщение было отмечено Удалов Павел как решение

Решение

Удалов Павел,

Возможно провести все расчеты используя функцию в функции. Но дело в том что код планируется быть очень длинным и это крайне сильно загромоздит все.
Это не загромоздит, а упорядочит. Если вы думаете, что сможете разобраться с кучей глобальных переменных, когда "код будет очень длинный" - то зря. (Зато без функций, ага )

В общем, я вам ответил, а дальше - поступайте, как знаете. Если вы лучше меня знаете, как писать длинный код, то что ж я могу поделать, не спорить же мне с вами.
1
3417 / 2525 / 968
Регистрация: 21.03.2016
Сообщений: 6,536
23.09.2019, 17:42 10
Лучший ответ Сообщение было отмечено Удалов Павел как решение

Решение

ну не обязательно в функцию передавать функцию. можно результат присвоить переменной а ее потом подавать в функцию
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def fun_1(a,b):
    a *= 2
    b += a
    return a,b
 
def fun_2(a,b):
    return a*b
 
 
a,b = 3,5
param_a,param_b = fun_1(a,b)
param_3 = fun_2(param_a,param_b)
print(param_3)
главное не запутаться и не переопределить данные.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2019, 17:42
Помогаю со студенческими работами здесь

Вывести переменную за пределы цикла
Мне нужно из цикла foreach вывести переменную vivod foreach (string nsame in brrrcs) ...

Передать значение переменной за пределы функции
привет. _root.knop.onRelease = function () { var a = "alibaba"; trace(a); } trace(a); ...

Вывести результат переменной за пределы функции
Нужно вывести результат переменных за пределы функции для использования их в основном коде. У меня...

Паскаль выдает Ошибку "Нельзя изменять значение переменной цикла внутри этого цикла"
Здравствуйте, мне задали задание в колледже написать программу 3 разными способами While do,Repeat...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru