Този урок ще ви научи на всичко за използването на 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
Добавяйки още няколко примера, можете да използвате за плодове във плодове: и за ученик в ученици: когато преминавате съответно през списък с плодове и ученици.
Използване на 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
Операторът за продължаване може да се използва за пропускане на определени итерации в зависимост от конкретно условие.
Нека използваме същите примери в предишния раздел.
- Прочетете въведеното от потребителя и изчислете сумата на неотрицателните числа.
- Ако потребителят въведе отрицателно число, пропуснете тази итерация, продължете към следващата итерация и прочетете следващото число.
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.