Задача на сортировку.

Stanislav

Новичок
Пользователь
Янв 23, 2022
3
0
1
Коллеги, горю с заданием. Прошу оказать содействие в написании кода.

Задача:

Программа должна сделать следующие условия:

  • Попросить пользователя ввести количество чисел для сортировки от 20 до 1000.
  • Ввод числа необходимо оформить в виде функции nask, которая имеет следующие параметры (аргументы функции nask):
  • amin, минимальное количество точек, которое может ввести пользователь. Если аргумент функции не указан, значение по умолчанию равно 20.
  • Проверить, что аргумент функции amin больше 20. Если меньше 20, то установить его равным 20.
  • amax, максимальное количество точек, которое может ввести пользователь. Если аргумент функции не указан, значение по умолчанию равно 1000.
  • Проверить, что аргумент функции amax меньше 1000. Если он больше 1000, то установить его равным 1000.
  • Функция nask должна попросить ввести количество точек для сортировки.
  • Получение информации от пользователя:
  • Функция nask должна попросить ввести количество для сортировки, написав минимальное и максимально возможное значение.
  • Проверка ввода пользователя:
  • Если пользователь вводит не целое число, то функция должна попросить пользователя повторить ввод.
  • Если пользователь вводит числа меньше amin, то программа должна сообщить об этом пользователю и повторить ввод.
  • Если пользователь вводит числа больше amax, то программа должна сообщить об этом пользователю и повторить ввод.
  • Функция nask должна вернуть целое число точек для сортировки, которое ввёл пользователь.
  • Сформировать список со случайными целыми числами от 10000 до 99999.
  • Длина списка равна числу, которое мы спросили у пользователя с помощью функции nask.
  • Создать функцию сортировки bub_sort.
  • Выполнить сортировку данного списка методом пузырька с помощью функции bub_sort:
  • Аргументы функции – список, который необходимо отсортировать
  • Функция ничего не возвращает и сортирует список на месте.
  • Программа должна напечатать:
  • Количество чисел в списке.
  • Процессорное время, которое было затрачено на сортировку.
  • Вывод процессорного времени необходимо напечатать в секундах с точностью 3 знака после запятой.
  • Сумму 10 максимальных чисел отсортированного списка.
  • Сумму 10 минимальных чисел отсортированного списка.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 587
459
83
какое содействие?
 

Stanislav

Новичок
Пользователь
Янв 23, 2022
3
0
1
Код:
def nask (amin=20, amax=1000):
    if amin<20:
        amin=20
    if amax>1000:
        amax=1000
        while True:
            numbers=input('Введите количество чисел для сортировки')
            try:
                numbers=int(numbers)
                if numbers<amin:
                    print('Error')
                if numbers>amax:
                    print('Error')
                else:

Пока застопорился на варианте выше. Что делать дальше для выполнения задачи, понимания нет.
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 587
459
83
ну для начала вставить код как код, подробнее тут как задать вопрос
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 587
459
83
Код:
def nask (amin=20, amax=1000):
    if amin<20:
        amin=20
    if amax>1000:
        amax=1000
        while True:
            numbers=input('Введите количество чисел для сортировки')
            try:
                numbers=int(numbers)
                if numbers<amin:
                    print('Error')
                if numbers>amax:
                    print('Error')
                else:

Пока застопорился на варианте выше. Что делать дальше для выполнения задачи, понимания нет.
вы вообще ничего не сделали из задания...

upd
сделал до сортировки пузырьком
Python:
import numpy as np


def nask(amin: int = 20, amax: int = 1000) -> int:
    number = 0
    if amin < 20:
        amin = 20
    if amax > 1000:
        amax = 1000
    while 1:
        try:
            number = int(input(f"Введите количество точек для сортировки (минимальное значение {amin}, максимальное - {amax}): "))
        except ValueError:
            print("Не верные данные, повторите ввод.")
            continue
        if number < amin or number > amax:
            print("Не верные данные, повторите ввод.")
            continue
        break
    return number


lst = np.random.randint(10000, 99999, nask())
print(len(lst))
print(lst)
 
Последнее редактирование:

Stanislav

Новичок
Пользователь
Янв 23, 2022
3
0
1
Коллеги, спасибо. Есть работающий вариант, возможно поможет кому - нибудь в будущем.
Код:
import time
from random import randint


#
def main():
    # вызов nask
    num_of_points = nask(10, 55)

    # заполнение массива
    my_list = []
    for i in range(num_of_points):
        my_list.append(randint(10000, 99999))

    # длина массива
    length = len(my_list)

    # запоминаем текущее время в секундах (Epoch)
    start_time = time.time()
    # вызов сортировки пузырьком
    bub_sort(my_list)
    # высчитываем время работы функции bub_sort
    proc_time = (time.time() - start_time)
    # формат вывода времени с 3 знаками после запятой
    proc_time = ('%.3f' % proc_time)

    # вывод всего массива для дебага
    # i = 0
    # for i in range(len(my_list)):
    #     print(my_list[i], end=' ')

    # сумма последних 10 элементов массива - они же и максимальные
    j = 0
    max_sum = 0
    for j in range(length-1, length - 11, -1):
        max_sum = max_sum + int(my_list[j])

    # сумма первых 10 элементов массива - они же минимальные
    k = 0
    min_sum = 0
    for k in range(0, 10):
        min_sum = min_sum + int(my_list[k])

    print('Количество чисел в списке ' + str(length))
    print('Процессорное время, которое было затрачено на сортировку в сек ' + str(proc_time))
    print('Сумма 10 максимальных чисел отсортированного списка ' + str(max_sum))
    print('Сумму 10 минимальных чисел отсортированного списка ' + str(min_sum))


#
def nask(amin=20, amax=1000):
    if amin < 20:
        amin = 20
    if amax > 1000:
        amax = 1000

    while True:
        num_of_points = input('Min: ' + str(amin) + '. Max: ' + str(amax) + '\n')
        try:
            num_of_points = int(num_of_points)
            print('ОК это целое число')
        except ValueError:
            print('не ОК')
        else:
            if num_of_points < amin:
                print('Плохо')
            elif num_of_points > amax:
                print('Плохо')
            else:
                return num_of_points


# сортировка пузырьком
def bub_sort(my_list):
    i = 0
    length = len(my_list)
    while i < length - 1:
        j = 0
        while j < length - 1 - i:
            if my_list[j] > my_list[j + 1]:
                my_list[j], my_list[j + 1] = my_list[j + 1], my_list[j]
            j += 1
        i += 1


main()
 

Форум IT Специалистов