Как задать пользовательский ввод списка чисел?

Пример пользовательского ввода списка чисел, разделенных пробелами:

numbers = list(map(int, input("Введите числа через пробел: ").split()))

Пояснения:

  • input("Введите числа через пробел: ") - Получает строку ввода от пользователя.
  • .split() - Разбивает строку на список строк по пробелам.
  • map(int, ...) - Применяет функцию int к каждому элементу списка строк, преобразуя их в целые числа.
  • list(...) - Преобразует результат map в список.

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

  1. Ввод чисел, разделенных пробелами:

    Этот метод предполагает, что пользователь вводит числа, разделенные пробелами, а затем программа преобразует строку в список чисел.

    
    def get_list_from_space_separated_input():
      """Получает список чисел, разделенных пробелами, от пользователя."""
      try:
        input_string = input("Введите числа, разделенные пробелами: ")
        numbers = [int(x) for x in input_string.split()]
        return numbers
      except ValueError:
        print("Ошибка: Введены некорректные данные. Пожалуйста, введите только числа, разделенные пробелами.")
        return None # Или можно повторить запрос ввода
    
    # Пример использования:
    my_list = get_list_from_space_separated_input()
    if my_list:
      print("Введенный список:", my_list)
    

    Объяснение:

    • input() получает строку ввода от пользователя.
    • input_string.split() разделяет строку на список подстрок, используя пробел в качестве разделителя.
    • [int(x) for x in ...] использует генератор списка для преобразования каждой подстроки в целое число.
    • try...except блок обрабатывает исключение ValueError, которое возникает, если пользователь ввел что-то, что нельзя преобразовать в число.
  2. Ввод чисел, разделенных запятыми:

    Аналогично предыдущему, но используется запятая в качестве разделителя.

    
    def get_list_from_comma_separated_input():
      """Получает список чисел, разделенных запятыми, от пользователя."""
      try:
        input_string = input("Введите числа, разделенные запятыми: ")
        numbers = [int(x.strip()) for x in input_string.split(',')] # .strip() для удаления лишних пробелов
        return numbers
      except ValueError:
        print("Ошибка: Введены некорректные данные. Пожалуйста, введите только числа, разделенные запятыми.")
        return None
    
    # Пример использования:
    my_list = get_list_from_comma_separated_input()
    if my_list:
      print("Введенный список:", my_list)
    

    Важно: Добавлен .strip() для удаления возможных пробелов вокруг чисел.

  3. Ввод каждого числа на отдельной строке:

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

    
    def get_list_from_newline_separated_input():
      """Получает список чисел, каждое число на новой строке."""
      numbers = []
      print("Введите числа, каждое на новой строке.  Введите 'done' для завершения.")
      while True:
        input_string = input()
        if input_string.lower() == 'done':
          break
        try:
          number = int(input_string)
          numbers.append(number)
        except ValueError:
          print("Ошибка: Введите целое число или 'done'.")
    
      return numbers
    
    # Пример использования:
    my_list = get_list_from_newline_separated_input()
    print("Введенный список:", my_list)
    

    Объяснение:

    • while True создает бесконечный цикл, пока пользователь не введет 'done'.
    • input_string.lower() == 'done' преобразует ввод в нижний регистр для сравнения без учета регистра.
  4. Ввод с указанием количества чисел:

    Сначала запрашивается количество чисел, а затем запрашиваются сами числа.

    
    def get_list_with_count():
        """Получает список чисел, с предварительным указанием количества."""
        try:
            count = int(input("Введите количество чисел в списке: "))
            if count <= 0:
                print("Количество чисел должно быть больше 0.")
                return None
    
            numbers = []
            for i in range(count):
                while True: # Ensure we get a valid number for each iteration
                    try:
                        num = int(input(f"Введите число {i+1}: "))
                        numbers.append(num)
                        break # Exit inner loop if valid number is entered
                    except ValueError:
                        print("Ошибка: Пожалуйста, введите целое число.")
    
            return numbers
        except ValueError:
            print("Ошибка: Введите целое число для количества чисел.")
            return None
    
    # Пример использования:
    my_list = get_list_with_count()
    if my_list:
        print("Введенный список:", my_list)
    

    Объяснение:

    • Сначала запрашивается количество чисел.
    • В цикле for запрашиваются числа по одному.
    • Внутренний цикл while True гарантирует, что будет введено валидное целое число для каждой позиции в списке.

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

0