Как получить точное количество входов в список от пользователя с помощью list.split () - PullRequest
0 голосов
/ 29 января 2020

Input Description: первая строка содержит количество массивов. Последующие строки содержат размер массива, за которым следуют элементы массива.

Выходные данные Описание: Массив, содержащий отсортированные элементы из k отсортированных массивов

Sample Input :
3
2
98 12
6
1 2 3 8 5 9
1
11
Sample Output :
12 98 1 2 3 5 8 9 11

код, который я пробовал:

n=int(input())
for i in range(n):
  k=int(input())
  for i in range(k):
    l.append(input().split())
 print(*sorted(l))

для первого ввода 2 чисел, мне нужно дать 2 числа для ввода (98,12) с помощью input (). Split (), но так как внутренний l oop дважды исключает, я заканчиваю с вводом дважды

1 Ответ

0 голосов
/ 31 января 2020

Вы хорошо справились с тем, что пытались, но при попытке ввести значения для заполнения списков вы смешали несколько вещей.
Давайте использовать следующий скелет:

number_of_lists = int(input('Enter the number of lists : '))
for list_number in range(1, number_of_lists+1):
    current_list = []
    number_of_values = int(input('Enter the number of values in the list #%d : ' % list_number))
    # Here we enter the values of the current list,
    # and that's where things will differ a bit
    print('The list is : %s' % str(current_list))
    print('The sorted list is: %s' % str(sorted(current_list)))

В зависимости от того, как введены значения в вашем списке, вещи могут немного отличаться:

  • Если они вводятся одно за другим (ie. Вы вводите одно, затем нажмите Enter, затем другое, ...)
  • Если они введены в одну строку, разделенные пробелами, вам не понадобится for l oop, вместо этого вам придется разделить входные данные на пробелы, чтобы заполните свой список.

Случай 1: вы вводите значения одно за другим

В этом случае количество значений, которое вы можете поместить в свой список, равно управляется введенным вами числом, которое используется в for l oop.

number_of_lists = int(input('Enter the number of lists : '))
for list_number in range(1, number_of_lists+1):
    current_list = []
    number_of_values = int(input('Enter the number of values in the list #%d : ' % list_number))
    for value_number in range(number_of_values):
        value = int(input("Enter the value : "))
        current_list.append(value)
    print('The list is : %s' % str(current_list))
    print('The sorted list is: %s' % str(sorted(current_list)))

Случай 2: вы вводите все значения в одной строке, все они разделенный

В этом случае for l oop не требуется, потому что вы получаете все значения в одно и то же время. e, но это требует от вас проверки правильности количества значений.

Несколько стратегий для этого:

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

Первая возможность : Вы просто просите пользователя ввести значения:

all_values = input("Enter all the values : ").split()

Вторая возможность : Вы должны использовать while l oop, в котором вы запрашиваете у пользователя значения до тех пор, пока у вас не будет достаточно:

all_values = []
while len(all_values) != number_of_values:
    all_values = input("Enter all the values : ").split()
    if len(all_values) != number_of_values:
        # Warning message for the user, not required but a good thing
        print("You didn't enter enough values, try again.")

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

all_values = input("Enter all the values : ").split()
if len(all_values) < number_of_values:
    # We don't have enough values... What do we do ?
    # Let's add 0's at the end, this will not change the final order
    while len(all_values) < number_of_values:
        all_values.append(0)
elif len(all_values) > number_of_values:
    # We have too much values... What do we do ?
    # Let's try to remove the last value until we have enough values
    while len(all_values) > number_of_values:
        all_values.pop()

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

current_list = [int(item) for item in all_values]

Вы можете, наконец, отсортировать перечислите и напечатайте его, и voilà !.

Чтобы подвести итог этого случая, используйте t Скелет, который я приведу в верхней части, и используйте одну из трех возможностей для ввода значений в списки.

Заключение Так какой же использовать? Ну, вы, наверное, догадались, я предлагаю вам использовать первый случай, его проще использовать и понять.

Хотя, если вы хотите использовать второй случай, вам все равно нужно выбрать способ управления количество значений, которые вы получаете:

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

Надеюсь, что это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...