He creado un programa que permite que un usuario ingrese su nombre en un archivo de texto que tengo. El problema es que ahora necesito hacer un ciclo while que permita ingresar múltiples nombres.

Pude obtenerlo con un bucle for, pero específicamente estoy buscando un bucle while. A continuación se muestra mi código sin bucle a partir de ahora.

filename = input ("visitor_log.txt: ");
with open("visitor_log.txt", "w") as f:
    f.write(input("Please write your name:"));

Los resultados reales mantendrían los nombres ingresados como una lista que podría imprimir.

0
thefence2113 10 may. 2019 a las 05:54

4 respuestas

La mejor respuesta

Un ciclo while tiene una condición, y el ciclo continuará ejecutándose mientras la condición sea verdadera.

while some_condition:
    //Do some stuff
    //Change your condition if necessary

Mientras que la condición some_condition se evalúa como True, el código dentro del alcance de su ciclo continuará ejecutándose. Si su condición nunca se vuelve Falsa, entonces su ciclo se ejecutará para siempre.

Lo que debe hacer es decidir la condición que usará para continuar recorriendo el código y luego cambiar esa condición según sea necesario según su entrada. Aquí está mi ejemplo que leerá los nombres hasta que se ingrese la palabra "FIN".

with open("visitor.txt", "a") as f:
    accept_more_visitors = True
    while accept_more_visitors:
        input_value = input("Please write your name, or 'END' if you are done.")
        if input_value == "END":
            break
        f.write(input_value)

Otra diferencia clave es que está abriendo el archivo con la marca "w" que sobrescribirá el archivo. Probablemente desee la bandera "a" que se agregará al final de la misma.

1
YTL 10 may. 2019 a las 03:03

Prueba esto:

filename = input ("visitor_log.txt: ")
with open("visitor_log.txt", "a") as f:
    i=0
    while (i<5):
        f.write(input("Please write your name:"))
        f.write('\n')
        i +=1
0
Manusha Karunathilaka 10 may. 2019 a las 03:14

Esto debería funcionar

names = []
while True:
    name = input ('Enter your name: ')
    names.append(name)
    if input ('Hit enter to add another name, or type done to continue') == 'done':
        break

towrite =''
with open("visitor_log.txt", "w") as f: 
        for name in names:
            towrite+= name + "\n"
         f.write(towrite)

Lo que esto hace es dejar que el usuario ingrese tantos nombres como desee, los agrega a una lista y escribe los nombres en visitor_log.txt.

Los nombres se almacenan en la lista de nombres, por lo que puede recorrer esa lista y hacer lo que quiera con ella.

0
MarsNebulaSoup 10 may. 2019 a las 03:05
# filename = input ("visitor_log.txt: ")

with open("./visitor_log.txt", "w") as f:
    text = ''

    while text != 'exit\n':
        text = raw_input("Please write your name:")
        print(text)
        text = str(text) + "\n"
        f.write(text)

raw_input es mejor input para texto

0
King Stone 10 may. 2019 a las 03:10