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

Как создать переменные в цикле python

  • автор:

Операторы цикла

Цикл for, также называемый циклом с параметром, в языке Питон богат возможностями. В цикле for указывается переменная и множество значений, по которому будет пробегать переменная. Множество значений может быть задано списком, кортежем, строкой или диапазоном.

Вот простейший пример использования цикла, где в качестве множества значений используется кортеж:

i = 1
for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet':
print(i,'-th color of rainbow is ', color, sep = '')
i += 1

В этом примере переменная color последовательно принимает значения ‘red’, ‘orange’ и т.д. В теле цикла выводится сообщение, которое содержит название цвета, то есть значение переменной color, а также номер итерации цикла число, которое сначала равно 1, а потом увеличивается на один (инструкцией i += 1 с каждым проходом цикла.

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

for i in 1, 2, 3, 'one', 'two', 'three': 
print(i)

При первых трех итерациях цикла переменная i будет принимать значение типа int, при последующих трех — типа str.

Обьявление переменных в цикле python

Реально ли сделать механизм по которому, цикл пробегаться по словарю и объявляет переменную с именем ключа и которой присваивается соответствующее значения из этого же словаря. P.S. нужно для написания модуля который предназначен для реализации мультиязычности в программе, т.е. доступ к соответствующему словарю языка который берется из файла json и выводу из него сообщения по ключу(mess_id).

Отслеживать

задан 9 ноя 2017 в 0:08

67 2 2 серебряных знака 5 5 бронзовых знаков

Создание переменных в цикле

Сохранение переменных в цикле
Здравствуйте, собственно вопрос в том, как реализовать следующую задачу. Вводим цифровое.

Создание переменных в цикле
Здравствуйте. Возможно ли сделать как-то так? . for (int i=1; i < 10; i++) < . int a.

Создание переменных в цикле
Подскажите пожалуйста как в теле цикла создать переменные и записать туда данные мне нужно типа.

Создание переменных в цикле
Здравствуйте, меня интересует вопрос — насколько операция создания переменных быстра. есть функция.

Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9

В список переменные сложи. Типа так:

lst = [var1,var2,var3,var4,var5,var6]

И научись уже внятно выражать свои мысли. Экстрасенсов на форуме нет.
1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326
посмотрите пжл, так?

1 2 3 4 5
var1, var2, var3, var4, var5, var6 = [], [], [], [], [], [] lstvar = [var1, var2, var3, var4, var5, var6] print(type(txt_rtf_text)) # for y in lstvar: lstvar[y] = [x for x in txt_rtf_text if x.startswith(';' + str(lstvar[y]))]

ну и ошибка сыпется: индексы списка должны быть целыми числами или срезами, а не списком
что у меня не правильно? спс

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

ЦитатаСообщение от Ципихович Эндрю Посмотреть сообщение

for y in lstvar:
что у вас в y? как вы хотите получить элемент по списку lstvar[y]? где такому учат.
1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ЦитатаСообщение от Semen-Semenich Посмотреть сообщение

что у вас в y?

ЦитатаСообщение от Semen-Semenich Посмотреть сообщение

как вы хотите получить элемент по списку lstvar[y]?

массив = ['а', 12, 3.4, True] print(массив[0])

а хочу получить будущую переменную
Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9

Лучший ответ

Сообщение было отмечено Ципихович Эндрю как решение

Решение

ЦитатаСообщение от Semen-Semenich Посмотреть сообщение

как вы хотите получить элемент по списку lstvar[y]?

Человек хочет раскидать данные по префиксам. Только он зачем-то завязался на именах переменных, ха-ха.

Добавлено через 1 минуту
Вообще начинать писать код надо отсюда:

1 2 3 4
for x in txt_rtf_text: if x.startswith(';var1'): pass elif.

1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ЦитатаСообщение от Рыжий Лис Посмотреть сообщение

а сюда var1 += х так?
Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9

Лучший ответ

Сообщение было отмечено Ципихович Эндрю как решение

Решение

list.append(x)

1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ясно, по количеству строк было 6 стало 12-понятно, жаль что до трёх не сократить))
а по скорости как не в курсе быстрее как было у меня или по предложенному пути?

Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9
А сам как считаешь? Была вычислительная сложность O(N * 6), стала O(N)
1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ЦитатаСообщение от Рыжий Лис Посмотреть сообщение

А сам как считаешь? Была вычислительная сложность O(N * 6), стала O(N)
второе вроде попроще

ЦитатаСообщение от Ципихович Эндрю Посмотреть сообщение

x for x in
тогда я правильно понял, что

ЦитатаСообщение от Ципихович Эндрю Посмотреть сообщение

x for x in

ЦитатаСообщение от Рыжий Лис Посмотреть сообщение

гут, хорошо то есть?
Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9
Нет. Там бы ты написал 6 одинаковых циклов, а тут — один.
1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ЦитатаСообщение от Рыжий Лис Посмотреть сообщение

Там бы ты написал 6 одинаковых циклов, а тут — один.
согласен-спасибо
1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326
Рыжий Лис, подскажите пжл, вроде не отступил от предложенного Вами решения:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
str1, edmn, var1, var2, var3, var4, var5, var6 = [], [], [], [], [], [], [], [] listq = [str1, edmn, var1, var2, var3, var4, var5, var6] for x in list_file_text_splitlines: print(x.startswith(';var')) if x.startswith(';edmn;') == False and x.startswith(';var') == False: listq.append(x) elif x.startswith(';edmn;'): listq.append(x) elif x.startswith(';var1'): listq.append(x) elif x.startswith(';var2'): listq.append(x) elif x.startswith(';var3'): listq.append(x) elif x.startswith(';var4'): listq.append(x) elif x.startswith(';var5'): listq.append(x) elif x.startswith(';var6'): listq.append(x) print(len(list_file_text_splitlines)) print(len(str1)) print(str1)

Цикл 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; > 

Здесь три момента:

  1. Инициализация счётчика.
  2. Условие цикла. Так же как и в цикле while, этот цикл будет повторяться пока это условие истинно.
  3. Обновление счётчика. Как менять счётчик в каждом шаге.

А затем следует тело, код, который должен повторяться. Нам не нужно менять счётчик в теле, потому что он будет меняться, благодаря этому выражению сверху.

Пришло время использовать все эти навороченные знания и написать код! Переходите к тесту и упражнению прямо сейчас!

Дополнение к уроку

Скрытые сложности

Операции декремента и инкремента кажутся мощными механизмами, но их использование привносит ненужную сложность в программы. Код, написанный с их использованием, часто превращается в ребус. Попробуйте ответить, чему равно значение:

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 студентов

Наши выпускники работают в компаниях:

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

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