Как из цикла for получить значение за пределами цикла
Перейти к содержимому

Как из цикла for получить значение за пределами цикла

  • автор:

Как получить значение локальной переменной из цикла?

Casufi

Владимир, интересно следующий вопрос будет почему inputdata = 3 🙂 ?

Casufi

Алексей, Вам нужно книжку почитать, например Фленегана. Для быстрого ответа гуглите области видимости, но без книжки основам ничего не даст

Ответы на вопрос 0

Ваш ответ на вопрос

Войдите, чтобы написать ответ

javascript

  • JavaScript
  • +1 ещё

Выгрузка JS кода в php, но не просто?

  • 1 подписчик
  • 5 часов назад
  • 53 просмотра

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

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

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)

Лучшие ответы ( 3 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Вывести значение переменной за пределы цикла for
import requests from bs4 import BeautifulSoup from requests_html import HTMLSession session =.

Как вывести значение переменной из цикла 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; выдает ошибку "Нельзя изменять значение переменной цикла.

60 / 86 / 16
Регистрация: 25.03.2019
Сообщений: 235

ЦитатаСообщение от Удалов Павел Посмотреть сообщение

Как вынесли полученные значения за пределы?
Функцию создайте и ее из цикла вызывайте.
Регистрация: 20.09.2019
Сообщений: 26

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

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()

4974 / 3210 / 1125
Регистрация: 21.03.2016
Сообщений: 7,940

Лучший ответ

Сообщение было отмечено Удалов Павел как решение

Решение

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

Добавлено через 8 минут

ЦитатаСообщение от Удалов Павел Посмотреть сообщение

Чтобы выглядело примерно так

так не получиться переменная g видна только в функции def izm(n) и является числом так что len() к ней не применима

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)

Автоматизируй это!

Эксперт Python

7540 / 4556 / 1206
Регистрация: 30.03.2015
Сообщений: 13,118
Записей в блоге: 29
Удалов Павел, можно еще генератором передавать, я написал бы пример, но не понимаю чего ты делаешь

ЦитатаСообщение от Удалов Павел Посмотреть сообщение

for i in range(len(g))

g — это вроде как число, а ты len для него пишешь.

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()

Регистрация: 20.09.2019
Сообщений: 26
Спасибо за помощь)

Эксперт Python

4615 / 2036 / 359
Регистрация: 17.03.2012
Сообщений: 10,102
Записей в блоге: 6

Удалов Павел, простейший вариант — это, как уже сказали выше, с помощью генератора.
Но более универсально — передавать в ваш цикл некий «приемник» для значения. Примерно так:

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.
Регистрация: 20.09.2019
Сообщений: 26

Суть в том, что у меня есть однотипные вычисления, в которых я преобразую исходные данные. Далее эти данные нужно использовать как аргументы для других функций. Причем аргументы берутся сразу из нескольких изначальных функций. Поэтому я и хочу извлечь полученные значения за пределы функций(если это возможно), дабы упростить себе работу в дальнейшем.
P.S. данные действия прийдётся делать на протяжении всей программы.

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)

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

Получить переменную за пределами цикла python

Здесь ничего не мешает получить это значение, кроме бесконечного цикла. Остановите его при нужном случае.

a=0 b=1 while True: if a 

Если же проблема более глобальна и пример просто неудачный, то, вероятно, следует смотреть в сторону yield

Отслеживать
ответ дан 8 окт 2018 в 6:32
51.1k 3 3 золотых знака 18 18 серебряных знаков 42 42 бронзовых знака
да, пример вообще корявый получился.
8 окт 2018 в 6:40
Ну так можно прояснить, что имелось в виду. Или yield подошёл?
8 окт 2018 в 8:04
использовал global a
10 дек 2018 в 9:11

Если вы вводите новую переменную внутри цикла, главная её особенность то, что она перезаписывается при итерации:

for w in [1, 2, 3]: print w print w # 1 # 2 # 3 # 3 

Заметьте, что в пространстве переменных после окончания цикла w приняла и сохранила значение 3 для дальнейших команд.

Хорошей практикой является не использование переменных из цикла, а объявление их перед ним с последующим присвоением:

w = None b = 1 for a in [0, 1]: if a < b: w = 4 break print w # 4 

Плюс писать в условие для while просто True мне кажется не true - получается некоторый провал в логике программы - можно использовать обычный цикл или без него. Пример условия if else в одну строку:

a = 0 b = 1 w = 4 if a < b else None print w # 4 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *