Отсортировать слова в строке по возрастанию их длины — КиберПедия 

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Отсортировать слова в строке по возрастанию их длины

2022-10-29 41
Отсортировать слова в строке по возрастанию их длины 0.00 из 5.00 0 оценок
Заказать работу

Вводится строка, состоящая из слов, разделенных пробелами. Требуется отсортировать слова в строке так, чтобы наиболее короткие из них были вначале строки, а наиболее длинные в конце.

Алгоритм решения задачи:

1. Преобразуем строку в список слов. Для этого следует воспользоваться методом split().

2. Измерим длину получившегося списка. Это значение показывает количество элементов списка, т.е. количество слов.

3. Используя метод пузырька, отсортируем элементы списка по их длине. Во внутреннем цикле сортировки должны сравниваться не значения элементов, а их длина.

4. Создадим пустую строку. В цикле по элементам списка будем добавлять каждое слово в конец этой новой строки, а также добавлять пробел после каждого слова.

s = input()

l = s.split()

ln = len(l)

for i in range(ln-1):

for j in range(ln-1-i):

   if len(l[j]) > len(l[j+1]):

       l[j],l[j+1] = l[j+1],l[j]

 

s = ''

for i in range(ln):

s += l[i] + ' '

print (s)

Пример работы программы:

ab aaab ba baaaaa a aba

a ab ba aba aaab baaaaa

Функции

В квадратной матрице вычесть последнюю строку из остальных строк

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

В Python нельзя обратиться по индексу к элементу списка, которого еще не существует. Поэтому при заполнении матрицы можно сначала создавать одномерный список-массив (очередную строку матрицы), а затем добавить его в основной список-матрицу. Таким образом, при заполнении двумерного списка также используется метод append(), как и при заполнении одномерного.

В Python в функции передаются "указатели" на списки, а не сами списки. Поэтому в функциях отсутствует оператор return.

import random def make_matrix(m,n):   for i in range(0,n):          a = []          for j in range(0,n):                  a.append(int(random.random() * 100))          m.append(a) def minus_last(m):   l = len(m)   for i in range(0,l-1):          for j in range(0,l):                  m[i][j] = m[i][j] - m[l-1][j] def print_matrix(m):   for i in m:          print (i)   print () arr = [] make_matrix(arr,4) print_matrix(arr) minus_last(arr)print_matrix(arr) [62, 54, 47, 44][84, 84, 64, 83][87, 96, 32, 30][3, 74, 42, 21] [59, -20, 5, 23][81, 10, 22, 62][84, 22, -10, 9][3, 74, 42, 21]

Изменить последовательность слов в строке на обратную

Если дана строка, состоящая из слов, разделенный пробелами, и требуется вывести слова в обратном порядке, то с помощью языка программирования Python данную задачу решить просто, используя встроенные функции-методы:

1. Преобразовать строку в список слов (функция split()).

2. Вызвать метод reverse() для полученного списка.

def revers(s):

s = s.split()

s.reverse()

for i in s:

   print (i, end=' ')

print ()

 

string = input()

revers(string)

Если же требуется решить задачу "классическим" способом, то есть без использования списков, то решение будет выглядеть несколько сложнее.

Извлечь часть строки можно с помощью операции взятия среза. Поскольку слова надо извлекать и выводить на экран, начиная с конца, то и строку уместно "просматривать" с конца.

Для обозначения начала среза введем переменную start, конца - end. Начальными значениями этих переменных будет индекс последнего символа в строке.

Просматривая строку с конца, будем на каждой итерации цикла уменьшать на 1 значение start. Тем самым будем двигаться к началу строки. При этом будем проверять, если очередной символ - это пробел, то надо вывести на экран срез от start до end, после чего присвоить end новое значение равное текущему start.

Несмотря на то, что алгоритм достаточно прост, есть несколько нюансов, которые должны быть учтены:

  • Срез должен извлекаться не от start, а от start+1, т.к. текущий символ пробел, а извлечь надо слово после него.
  • Если извлекается первое слово с конца, то срез надо брать не до end, а до конца строки. Иначе последний символ будет опущен.
  • Когда извлекается последнее слово с конца (т.е. первое с начала), то надо извлекать не от start+1, а от start, т.к. перед ним пробела может и не быть. Кроме того из-за отсутствия пробела перед ним это слово вообще не будет выведено, поэтому случай, когда start становится равным 0, следует обработать отдельно.

def revers(s):

start = end = len(s)-1

while start >= 0:

   if s[start] == ' ':

       if end == len(s)-1:

           print (s[start+1:], end=' ')

       else:

           print (s[start+1:end], end=' ')

       end = start

   elif start == 0:

       print (s[start:end])

   start -= 1

 

string = input()

revers(string)

Пример выполнения:

one two three four   

four three two one 

Наименьшее общее кратное

Найти наименьшее общее кратное (НОК) пар чисел по формуле НОК = ab / НОД(a,b), где a и b - это натуральные числа, НОД - наибольший общий делитель.

Из условия задачи ясно, чтобы найти НОК, надо сначала найти НОД. Последний можно вычислить, постепенно находя остаток от деления большего числа из пары на меньшее и присваивая остаток переменной, связанной с большим числом. В какой-то момент значение одной из переменных станет равным 0. Когда это произойдет, другая будет содержать НОД. Если неизвестно, какая именно переменная содержит НОД, то можно просто сложить значения обоих переменных.

В коде ниже используется функция для нахождения НОК, которая принимает два числа и возвращает найденное наименьшее общее кратное.

В основной ветке программы функция вызывается в цикле, который завершается, если то, что было введено, нельзя преобразовать к целому. В этом случае генерируется исключение (ошибка) и поток выполнения переходит к ветке except.

def lcm(a,b): m = a*b while a!= 0 and b!= 0:   if a > b:       a %= b   else:       b %= a return m // (a+b) while 1: try:   x = int(input('a='))   y = int(input('b='))   print ('НОК:',lcm(x,y)) except:   break

Пример выполнения:

a=67b=54НОК: 3618a=78b=87НОК: 2262a=28b=33НОК: 924a=13b=14НОК: 182a=85b=45НОК: 765a=50b=120НОК: 600a=t

Поделиться с друзьями:

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.