es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PyCharm 2021.3 problema con pegar entrada multilínea

Tengo un problema de principiante con la consola de Pycharm y la inserción de entradas de varias líneas. Utilizo este código:

def multi_input():
    try:
        while True:
            data=input()
            if not data: break
            yield data
    except KeyboardInterrupt:
        return

ips = list(multi_input())
print(len(ips))   # test

Este código funciona bien en CMD de Windows, cuando pego 300 líneas obtengo una lista con 300 elementos.

Cuando hago lo mismo en la consola de Pycharm, obtengo una lista con 1 elemento. Las líneas individuales se concatenan con \n. ¿Alguien puede explicar esta diferencia? ¿Cómo puedo solucionar este problema?

Entrada:

10.63.134.223
10.130.140.230
10.72.206.50
10.130.210.185
10.63.136.165

Salida al usar la consola de Pycharm:

ips
['10.63.134.223\n10.130.140.230\n10.72.206.50\n10.130.210.185\n10.63.136.165']

Salida al usar CMD de Windows:

['10.63.134.223', '10.130.140.230', '10.72.206.50', '10.130.210.185', '10.63.136.165']
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Explicación del problema de entrada de varias líneas en la consola de Pycharm

    El problema con la consola de Pycharm y al pegar una entrada de varias líneas es que la consola trata todo el texto pegado como una única entrada en lugar de líneas individuales. Por lo tanto, cuando se utiliza la función input(), se lee todo el texto pegado como una única línea con \n utilizado para separar las líneas individuales.

    Solución para el problema de entrada de varias líneas en la consola de Pycharm

    Para solucionar el problema con la consola de Pycharm y al pegar una entrada de varias líneas, se puede modificar la función multi_input() de la siguiente manera:

    def multi_input():
        try:
            while True:
                data = input().rstrip()  # eliminar espacios en blanco al final
                if not data: break
                yield data
        except KeyboardInterrupt:
            return
    

    La adición del método rstrip() elimina cualquier espacio en blanco al final, incluyendo los caracteres \n. Esto asegura que cada línea de entrada se trate como un elemento separado en la lista.

Comments are closed.