Цикл на убывание питон

Синтаксис и возможности цикла for Python

Циклы python — for и while представляют собой операторы языка программирования, то есть операторы итерации, которые позволяют повторять код определенное количество раз.

Синтаксис цикла For

Как уже упоминалось ранее, цикл for в Python является итератором, основанным на цикле. Он проходит по элементам list и tuple, строкам, ключам словаря и другим итерируемым объектам.

В Python цикл начинается с ключевого слова for , за которым следует произвольное имя переменной, которое будет хранить значения следующего объекта последовательности. Общий синтаксис for. in в python выглядит следующим образом:

Элементы «последовательности» перебираются один за другим «переменной» цикла; если быть точным, переменная указывает на элементы. Для каждого элемента выполняется «действие».

Пример простого цикла for в Python:

 
 
>>> languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: . print(x) . C C++ Perl Python >>>

Блок else является особенным; в то время как программист, работающий на Perl знаком с ним, это неизвестная конструкция для программистов, которые работают на C и C++. Семантически он работает точно так же, как и в цикле while .

Он будет выполнен только в том случае, если цикл не был «остановлен» оператором break . Таким образом, он будет выполнен только после того, как все элементы последовательности будут пройдены.

Оператор прерывания в python — break

Если в программе цикл for должен быть прерван оператором break , цикл будет завершен, и поток программы будет продолжен без выполнения действий из else .

Обычно фразы break в pyton связаны с условными операторами.

 
 
edibles = ["отбивные", "пельмени", "яйца", "орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") break print("Отлично, вкусные " + food) else: print("Хорошо, что не было пельменей!") print("Ужин окончен.")

Если мы запустим этот код, получим следующий результат:

Отлично, вкусные отбивные Я не ем пельмени! Ужин окончен.

Удалим «пельмени» из нашего списка еды и получим следующее:

Отлично, вкусные отбивные Отлично, вкусные яйца Отлично, вкусные орехи Хорошо, что не было пельменей! Ужин окончен. 

Оператор пропуска python — continue

Предположим, нам «пельмени» нам нужно просто пропустить и продолжить прием пищи. Тогда нужно использовать оператор continue , для перехода к следующему элементу.

В следующем маленьком скрипте python мы используем continue , чтобы продолжить, итерацию по списку, когда мы сталкиваемся с пельменями.

 
edibles = ["отбивные", "пельмени", "яйца", "орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") continue print("Отлично, вкусные " + food) else: print("Ненавижу пельмени!") print("Ужин окончен.")

Результат будет следующим:

Отлично, вкусные отбивные Я не ем пельмени! Отлично, вкусные яйца Отлично, вкусные орехи Ненавижу пельмени! Ужин окончен.

Итерация по спискам с функцией range()

Если вам нужно получить доступ к индексам списка, не очевидно как использовать цикл for для этой задачи. Мы можем получить доступ ко всем элементам, но индекс элемента остается недоступным. Есть способ получить доступ как к индексу элемента, так и к самому элементу. Для этого используйте функцию range() в сочетании с функцией длины len() :

Источник

Как вывести элементы списка по убыванию

У меня есть код. Генерируется 6 чисел, дальше они сортируются по убыванию. В этом коде есть цикл (самый последний), в этом цикле должны выводиться максимумы. Т.е., должен находиться первый максимум (самая большая цифра) и выводиться, дальше второй - и выводиться, третий и.т.д. Проблема в том, что цикл не работает так, как это мне нужно. Что можно с этим сделать? Помогите, пожалуйста.

import random spisok = [] for i in range(0,5): spisok.append(random.randint(1,3)) maxi = max(spisok) a = sorted(spisok, reverse=True) print('Сгенерированы такие числа: ') print(a) print('В порядке убывания: ') print(a) for i in range(spisok[i-1]): for j in range(spisok[i+1]): if spisok[i] == spisok[j]: print(' максимум: '.format(maxim = spisok[i], cout = i)) continue 

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

2 ответа 2

for num, i in enumerate(a, 1): print(' максимум: '.format(maxim = max(a), cout = num)) a.remove(max(a)) 
Сгенерированы такие числа: [3, 3, 2, 1, 1] В порядке убывания: [3, 3, 2, 1, 1] 1 максимум: 3 2 максимум: 3 3 максимум: 2 

Если нужно все одинаковые цифры убирать, то добавляем еще такой цикл

for num, i in enumerate(a, 1): print(' максимум: '.format(maxim = max(a), cout = num)) m = max(a) while m in a: a.remove(m) 
[3, 3, 2, 1, 1] 1 максимум: 3 2 максимум: 2 # - не считает вторую тройку еще раз 

Первая часть это генерация и сортировка:

import random nums = [random.randint(1, 3) for i in range(5)] print('Сгенерированы такие числа: ') print(nums) sorted_nums = sorted(nums, reverse=True) print('В порядке убывания: ') print(sorted_nums) 

1. Через groupby . Метод groupby сгруппирует подряд идущие элементы в последовательности:

from itertools import groupby . for i, (num, _) in enumerate(groupby(sorted_nums), 1): print(' максимум: '.format(i=i, maxim=num)) 

2. Через цикл. Первый элемент выводим и запоминаем, а в цикле начинаем со второго элемента с проверкой предыдущего:

i = 1 last_num = sorted_nums[0] print(' максимум: '.format(i=i, maxim=last_num)) for j in range(1, len(sorted_nums)): num = sorted_nums[j] if num != last_num: i += 1 print(' максимум: '.format(i=i, maxim=num)) last_num = num 

3. Через множество. Это множество удалит дубликаты, но потребуется создание новой коллекции, поэтому может быть затратным:

sorted_nums = sorted(set(sorted_nums), reverse=True) for i, num in enumerate(sorted_nums, 1): print(' максимум: '.format(i=i, maxim=num)) 

Конечно, тут лучше всего nums в множество помещать, т.е. не делать лишней предварительной сортировки:

nums = [random.randint(1, 3) for i in range(5)] . sorted_nums = sorted(set(nums), reverse=True) 

Источник

Читайте также:  Different class types in java
Оцените статью