Как вывести значение локальной переменной из цикла? с++
Есть данный фрагмент кода. Если среди оценок есть «2», то выводит данные об ученике. Задача: сделать так, чтобы при отсутствии таковых учеников выводилось соответствующее сообщение. Проблема: не знание/ не понимание. Что пробовал: пытался добавить счетчик в цикл ( if (k == 0) cout «Таких учеников нет» ), но как вы знаете значение локальных переменных после цикла не сохраняется и соответственно k=0 всегда вне цикла. Пытался также как-то записать значения счетчика в глобальную переменную через указатели, но ничего не вышло. Гуглить — тоже не получилось.
void vivod() < cout > >
Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
Как получить локальную переменную из цикла for?
Всем привет, вопрос как мне кажется достаточно простой, но я не могу понять как достать переменную «r» из цикла for ?
for ip in list: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip)
- Вопрос задан более года назад
- 403 просмотра
1 комментарий
Простой 1 комментарий
Что значит «достать»?
Решения вопроса 1
Levmuhin1 @Levmuhin1 Автор вопроса
Сам задал , сам решил 🙂
i = [] for ip in list: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) i.append(r) print(i)
Ответ написан более года назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 2
Александр @shabelski89
result = [re.findall(r"ftp://\d+.\d+.\d+.\d+.\d.\d+", ip) for ip in list] print(result)
Ответ написан более года назад
Нравится 1 1 комментарий
Levmuhin1 @Levmuhin1 Автор вопроса
Что значит достать? Что ты хочешь с ней сделать? Напечатать? Сохранить куда-то?
На каждой итерации цикла for твоя переменная r будет перезаписываться, и когда цикл завершится то в r будет значение записанное на последнем цикле.
1-ый способ, печатать значение r на каждой итерации.
for ip in ip_adresses: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) print(r)
2-ой способ, сохранить все в список и распечатать.
result = [] for ip in ip_adresses: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) result.append(r) print(result)
3-ий способ, создание генератора и выдача по одному результату за раз.
def f(data): for ip in ip_adresses: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) yield r res = f(my_data) print(next(res)) print(next(res))
Цикл for и изменение переменных — Введение в программирование
Этот урок будет быстрым и простым, так что пристегнитесь.
Вызовем функцию факториала с циклом while:
const factorial = (n) => let counter = 1; let result = 1; while (counter n) result = result * counter; counter = counter + 1; > return result; >
Когда мы работаем с переменными, мы часто поступаем так: меняем их значения, прибавляя к ним сколько-нибудь или умножая их на что-то. Или просто прибавляем или вычитаем единицу.
Как и во многих других языках программирования в JavaScript есть для этого упрощенные формы.
Вместо result = result * counter вы можете сказать result *= counter . Результат будет тот же самый, это просто способ сократить запись. Точно так же вы можете поступить со знаками плюс, минус и остатком от деления:
Добавление единицы к переменной — тоже очень типичная операция, поэтому вместо counter = counter + 1 можно записать counter++ . Так же для минуса — counter = counter — 1 равносильно counter— . Это операторы инкрементирования и декрементирования.
Есть два вида, проще их понять на примере:
// Postfix let a = 3; let b; b = a++; // b = 3, a = 4 // Prefix let a = 3; let b; b = ++a; // b = 4, a = 4
Если вы поставите ++ после имени переменной — это постфиксная нотация — то фактическое сложение произойдёт после того, как значение вернётся. Вот почему b тут 3: оно получает значение перед тем как меняется a .
Если вы поставите ++ перед именем переменной — это префиксная нотация — то фактическое сложение произойдёт перед тем, как значение вернётся. Вот почему b тут 4: оно получает значение после того как меняется a .
Но в конце в обоих случаях a становится 4.
Это обновлённая функция факториала:
const factorial = (n) => let counter = 1; let result = 1; while (counter n) result *= counter; counter++; > return result; >
Здесь не имеет значения, используем мы префикс или постфикс когда инкрементируем counter , потому что значение не хранится больше нигде.
Этот код немного проще и короче. Иметь цикл — этот повторяющийся код — со счётчиком контролирующим повторения — распространённый в программировании приём. Поэтому кроме цикла while существует цикл for. В нем есть встроенные счетчики.
Это та же функция факториала, но с циклом for вместо цикла while:
const factorial = (n) => let result = 1; for (let counter = 1; counter n; counter++) result *= counter; > return result; >
Здесь три момента:
- Инициализация счётчика.
- Условие цикла. Так же как и в цикле while, этот цикл будет повторяться пока это условие истинно.
- Обновление счётчика. Как менять счётчик в каждом шаге.
А затем следует тело, код, который должен повторяться. Нам не нужно менять счётчик в теле, потому что он будет меняться, благодаря этому выражению сверху.
Пришло время использовать все эти навороченные знания и написать код! Переходите к тесту и упражнению прямо сейчас!
Дополнение к уроку
Скрытые сложности
Операции декремента и инкремента кажутся мощными механизмами, но их использование привносит ненужную сложность в программы. Код, написанный с их использованием, часто превращается в ребус. Попробуйте ответить, чему равно значение:
let x = 5; let y = 10; console.log(x++ + ++y);
Как видите, этот код заставляет думать, так как кроме арифметических выражений, мы имеем дело с побочными эффектами.
Во многих языках таких операций нет в принципе. Линтеры (программы, проверяющие код на соответствие стандартам) в JS настроены так, чтобы «ругаться» при виде этих операций в коде. Вместо них предлагается делать так:
x += 1; // x = x + 1;
Что гораздо проще и понятнее. Да, не получится записать выражение в одну строку, но сам код будет очевидным и без сюрпризов.
Соответствующее правило в eslint: https://eslint.org/docs/rules/no-plusplus
Switch
Конструкция switch может заменить собой несколько условий if . Вот пример обычного условия с if :
let answer; if (num === 1) answer = "One"; > else if (num === 2) answer = "Two"; > else answer = "Nothing"; >
А вот как его можно переписать с помощью switch :
switch(num) case 1: // if (num === 1) answer = "One"; break; case 2: // if (num === 2) answer = "Two"; break; default: answer = "Nothing"; break; >
break необходим, чтобы выйти из блока switch . Если break отсутствует, то выполнение пойдёт ниже по следующим случаям, игнорируя проверки. break также можно использовать в циклах for для мгновенного выхода из цикла.
Если в примере выше убрать все break ‘и, а num будет равен 1, то выполнятся все строки:
answer = "One"; answer = "Two"; answer = "Nothing";
Так что в итоге answer будет иметь значение «Nothing».
Несколько значений case можно группировать.
switch(num) case 1: // if (num === 1) answer = "One"; break; case 2: // if (num === 2) case 3: // if (num === 3) case 4: // if (num === 4) answer = "Two to four"; break; default: answer = "Nothing"; break; >
Выводы
Операторы инкрементирования и декрементирования:
// Postfix let a = 3; let b; b = a++; // b = 3, a = 4 // Prefix let a = 3; let b; b = ++a; // b = 4, a = 4
const factorial = (n) => let result = 1; // initialization↓ condition↓ update↓ for (let counter = 1; counter n; counter++) result *= counter; > return result; >
Тут следует упомянуть о том, что все 3 выражения в цикле for не обязательны.
Например, в блоке инициализации не требуется определять переменные:
let counter = 1; for (; counter n; counter++) // любой код >
Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервете цикл где-то в теле, а не создадите бесконечный цикл.
for (let counter = 1;; counter++) if (counter n) break; // любой код >
Вы можете пропустить все 3 блока. Снова убедитесь, что используете break, чтоб закончить цикл, а также изменить счётчик так, чтоб условие для break было истинно в нужный момент.
let counter = 1; for (;;) if (counter >= n) break; // любой код counter++; >
Обратите внимание на то, что если внутри тела цикла использовать оператор return , то выполнение цикла будет прервано и функция вернет значение.
// Функция должна посчитать сумму всех чисел от 1 до n const sum = (n) => let result = 0; for (let counter = 1; counter n; counter++) return 10; // return прерывает цикл result += counter; > return result; > sum(5); // 10 sum(20); // 10 sum(50); // 10
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как вывести значение переменной из цикла for
Нужно вывести значение int num ( делаю через int one ) перед последним ее деление на int power. Компилятор говорит : » Использование локальной переменной «one», которой не присвоено значение» . Как можно сделать иначе? помогите(.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
А возможно ли вывести значение переменной за пределы цикла?
Имеется простейший код. В котором я провожу однотипные вычисления при помощи цикла for. С.
Как вычленить значение переменной из цикла?
Вводится текст. Программа показывает подтекст с элемента N до элемента M. N и M вводятся.
Как обнулить значение переменной в конце цикла
Как обнулить значение переменной в конце цикла #include<iostream> #include<math.h> using.
Как очистить значение переменной после цикла?
Задача такая. Создаем приложение TCP/IP. Клиент посылает слово серверу, сервер возвращает его назад.