Всичко, което трябва да знаете

Този урок ще ви научи на всичко за използването на for цикли в Python с примери за код.

В програмирането циклите ви помагат да повторите определен набор от изрази. Ще използвате for цикли за определени итерации, когато:

  • знаете, че ще работите с последователност с краен брой елементи
  • вие виждате броя на повторенията предварително

Този урок ще ви научи на всичко за работата с for цикли в Python. Ще започнете, като научите синтаксиса и прости итерации, като използвате for цикъл. След това ще научите за обработката на аргументи от командния ред, използването на изрази за управление на цикъл и много други.

Да започваме…

Синтаксис на Python за цикъл

Общият синтаксис за използване на цикъла for в Python е както следва:

for item in iterable:
  # do something on item
  statement_1
  statement_2
  .
  .
  .
  statement_n

В горния синтаксис:

  • item е променливата за цикъл.
  • iterable обозначава всеки итерируем на Python като списъци, кортежи и низове.
  • statement_1 до statement_n обозначават изразите в тялото на цикъла.

Забележка: Не забравяйте да добавите двоеточие (:) след името на итерируемия и да отстъпите всички изрази в тялото на цикъла с четири интервала.

Често срещано за циклични конструкции в Python

Когато използвате for цикъл:

  • Можете да получите директен достъп до елементите, като използвате синтаксиса, обсъден в предишния раздел.
  • Можете да използвате for цикъл във връзка с вградени функции на Python като range() и enumerate().

Ще ги разгледаме в този раздел.

Използване на for Loop за достъп до елементи

За да подобрите четливостта, трябва да изберете циклична променлива, показваща какво съдържа списъкът. Например в примера по-долу nums е списък от числа, които използваме num като променлива за цикъл. Забележете как за num in nums: е интуитивен и лесен за четене.

nums = [4,5,9,1,3]
for num in nums:
  print(num)

# Output
4
5
9
1
3

Добавяйки още няколко примера, можете да използвате за плодове във плодове: и за ученик в ученици: когато преминавате съответно през списък с плодове и ученици.

  Как да разрешите или блокирате изскачащи прозорци в Chrome

Използване на for Loop с функцията range().

Когато искате да получите достъп до елемент от списъка чрез неговия индекс, можете да използвате функцията range().

В Python range(start, stop, step) връща обект от диапазон, през който можете да преминете, за да получите индексите: начало, начало + стъпка и т.н., до, но не включително стоп.

for i in range(len(nums)):
  print(nums[i])

# Output
4
5
9
1
3

Можете също да използвате функцията range(), за да генерирате поредица от числа, през които да преминете. В примера по-долу задаваме незадължителния параметър за стъпка на 2. Така получаваме числа от 10 до, но без да включваме 20, на стъпки от 2.

for i in range(10,20,2):
  print(i)

# Output
10
12
14
16
18

Използване на for Loop с функцията enumerate().

Когато искате да преминете през итерируем и да получите достъп до елементите и техните индекси едновременно, можете да използвате функцията enumerate().

Ето един пример.

for idx, num in enumerate(nums):
  print(f"{idx}:{num}")

# Output
0:4
1:5
2:9
3:1
4:3

Как да четете елементи от списъци с помощта на цикъл for в Python

За да преминете през списъци на Python с помощта на цикъл for, можете да използвате общия синтаксис от предишния раздел.

В примера по-долу nums може да се повтаря, а num е променливата за цикъл.

nums = [4,5,9,1,3]
for num in nums:
  print(f"{num} times 3 is {num*3}") # action on each num

# Output
4 times 3 is 12
5 times 3 is 15
9 times 3 is 27
1 times 3 is 3
3 times 3 is 9

Как да преминавате през низове с помощта на цикъл for в Python

Низовете на Python са итерируеми и можете да изпълнявате цикъл, индексиране, нарязване и други.

Забележка: Python няма вграден символен тип данни. Така че можете да третирате знак като низ с дължина едно.

my_string = "Code"
for char in my_string:
  print(char)

# Output
C
o
d
e

Как да преминавате през масиви с помощта на цикъл for в Python

Можете да преминавате през масиви с помощта на цикли и гнездо за цикли.

В кодовия фрагмент по-долу array1 е вложен списък, съдържащ по-малки списъци като свои елементи. Така преминаването през array1 дава всеки ред, както е показано по-долу.

array1 = [[2,3],[7,8]]
for row in array1:
  print(row)

# Output
[2, 3]
[7, 8]

За достъп до отделни елементи във всеки ред можете да използвате друг for цикъл.

array1 = [[2,3],[7,8]]
for row in array1:
  for elt in row:
    print(elt)

В горната кодова клетка:

  • Външният for цикъл ви помага да индексирате в редовете.
  • Вътрешният for цикъл ви позволява да докосвате елементите във всеки ред.

Ето съответния изход.

Output
2
3
7
8

Как да четем аргументи от командния ред с помощта на цикъл for

Като разработчик трябва да се чувствате удобно да изпълнявате скриптове на Python от командния ред и да използвате аргументи на командния ред, за да взаимодействате с вашия скрипт.

Можете да използвате вградените модули на Python, като sys и argparse, за анализиране и четене на аргументи от командния ред.

  Как да експортирате една папка с отметки от всеки браузър

В този раздел ще разгледаме как да използвате sys модула и как да използвате for цикъл – за преминаване през списъка с аргументи на командния ред.

В модула sys sys.argv е списъкът с аргументи на командния ред, които предавате. Така че можете да преминавате през sys.argv точно по начина, по който бихте преминавали през всеки списък на Python.

# main.py

import sys

for arg in sys.argv:
    print(arg)

Вече можете да стартирате програмата от командния ред, както е показано по-долу.

$ python main.py Hello Python3
main.py
Hello
Python3

По подразбиране името на модула е първият аргумент и е на индекс нула в sys.argv.

Ако искате да получите достъп до индексите и съответните аргументи, можете да използвате функцията range().

# main.py

import sys

for i in range(len(sys.argv)):
    print(f"arg{i} is {sys.argv[i]}")

▶️ След това стартирайте отново main.py.

$ python main.py Hello Python3
arg0 is main.py
arg1 is Hello
arg2 is Python3

Да предположим, че искате да анализирате и обработите аргументите, различни от името на модула. Можете да зададете началната стойност на 1, както в клетката с код по-долу.

# main.py

import sys

for i in range(1,len(sys.argv)):
     print(f"arg{i} is {sys.argv[i]}")
$ python main.py Hello Python3
arg1 is Hello
arg2 is Python3

Събирайки всичко заедно, файлът main.py съдържа следния код.

# main.py

import sys

print("nPrinting all command-line arguments...")
for arg in sys.argv:
    print(arg)

print("nPrinting all command-line arguments with index...")
for i in range(len(sys.argv)):
    print(f"arg{i} is {sys.argv[i]}")

print("nPrinting command-line arguments except arg0: module_name...")
for i in range(1,len(sys.argv)):
     print(f"arg{i} is {sys.argv[i]}")

Ето изхода, когато стартирате модула.

$ python main.py Hello Python3

Printing all command-line arguments...
main.py
Hello
Python3

Printing all command-line arguments with index...
arg0 is main.py
arg1 is Hello
arg2 is Python3

Printing command-line arguments except arg0: module_name...
arg1 is Hello
arg2 is Python3

Как да използвате оператора break вътре в цикъла

Подобно на други езици за програмиране, Python също поддържа използването на команди за управление на цикъл break и continue. Тези изрази могат да помогнат за промяна на контролния поток в цикли въз основа на някои условия. Нека видим как да ги използваме в for цикъл.

Командата break the може да се използва за излизане от цикъл, когато определено условие е True.

Искаме да напишем програма, която да прави следното:

  • Фиксирайте k, броя на входовете.
  • Използвайте for цикъл, за да четете въведеното от потребителя – една цифра наведнъж и да сумирате неотрицателните числа (по-големи или равни на нула).
  • Този процес трябва да продължи, докато потребителят въвежда неотрицателни числа.
  • Когато потребителят въведе отрицателно число, излезте от цикъла и отпечатайте сумата.

Ето кода, който изпълнява горната задача.

k= 5
sum = 0
for i in range(k):
  num = int(input("nEnter a number: "))
  if num<0:
    break # exit loop when num < 0
  sum += num

print(sum)

Ако потребителят въведе число, по-малко от нула, контролата преминава от for цикъла към първия оператор след цикъла.

Enter a number: 2

Enter a number: 3

Enter a number: 5

Enter a number: -1
10

Как да използвате оператора continue Inside for Loop

Операторът за продължаване може да се използва за пропускане на определени итерации в зависимост от конкретно условие.

  Как да настроите POP3 или IMAP акаунт в Microsoft Outlook

Нека използваме същите примери в предишния раздел.

  • Прочетете въведеното от потребителя и изчислете сумата на неотрицателните числа.
  • Ако потребителят въведе отрицателно число, пропуснете тази итерация, продължете към следващата итерация и прочетете следващото число.
k = 5
sum = 0
for i in range(k):
  num = int(input("nEnter a number: "))
  if num<0:
    continue
  sum += num

print(sum)

Ето примерен резултат.

Enter a number: 2

Enter a number: 3

Enter a number: 5

Enter a number: -1

Enter a number: 3
13

Четвъртото число е -1, което е отрицателно. Този път обаче цикълът for продължава, докато достигнем определения брой входове и игнорира отрицателните входове. По същество той връща сумата от всички неотрицателни числа от k входните числа.

Можете ли да попаднете на безкраен for цикъл в Python?

Във всички примери и случаи на употреба, които обсъждахме досега, никога не сме се сблъсквали с проблема с безкраен for цикъл. Но можем ли да имаме безкраен for цикъл в Python?

Помислете за следната функция double().

def double(x = 1):
  return x*2
  • Когато извикате функцията double(), без да посочите стойността на x, се използва стойността по подразбиране 1.
  • Когато посочите стойност за x в извикването на функцията, тази стойност се използва.
double()
# Returns: 2

double(20)
# Returns: 40

В Python функцията iter() връща обект на итератор. Можете да използвате next(iter-obj), за да преминете през последователността и да получите достъп до следващите елементи.

– Помислете за извикващ се обект и стойност, sentinel.

– iter(callable-object, sentinel) може да се използва за извършване на итерация, докато върнатата стойност от callable-object стане равна на sentinel.

Виждате ли защо можем да имаме безкраен for цикъл в този случай?

Е, имате извикващ се обект и стойност на стража. Ако върнатата стойност от извиквания никога не е равна на стража, тогава цикълът продължава вечно!

Нека използваме горната функция double като извикваема и зададем стойността на сентинела на 0.

Забележка: Споменете името на функцията double, а не извикването на функцията double().

Тъй като върнатата стойност от функцията double винаги е 2 и никога не е равна на 0, имаме безкраен цикъл!

▶️ Опитайте да стартирате следната клетка с код. Това е безкраен for цикъл и ще трябва да спрете принудително програмата.

for _ in iter(double,0):
  print("Running...")

Python For Loops: Практически въпроси

#1. Използвайте for цикъл, за да отпечатате всички четни числа в диапазона от 0 до 20.

Съвет: Използвайте функцията range() с правилната стойност на стъпката.

#2. Отпечатайте всички четни числа от 20 до 0.

Съвет: Използвайте отрицателна стойност за параметъра стъпка във функцията range().

#3. Създайте триизмерен масив NumPy.

Съвет: Използвайте for цикъл и вложени for цикли, ако е необходимо, за достъп до редовете и отделните записи в масива.

Обобщавайки

Ето обобщение на това, което сте научили в този урок.

  • Синтаксисът за използване на цикъла for на Python заедно с функциите range() и enumerate().
  • Използване на цикли for за преминаване през списъци, масиви и низове и четене в аргументите на командния ред
  • Използване на оператори за контрол на цикъл: break за излизане от цикъла и оператор continue за пропускане на определени итерации – въз основа на условия – вътре в циклите for
  • Разбиране на възможността за безкрайни for цикли в Python

След това научете как да използвате метода split() в Python.