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.

¿Por qué python está imprimiendo cada línea para cada número en el rango?

Estoy tratando de usar range() para crear una lista numerada del 1 al 6, pero en su lugar el programa está imprimiendo cada línea seis veces, una por cada número.

def main():
    file_students = open("studentpoints.txt", "r")
    stu_name = file_students.readline()

num_stu = 0
stu_points = 0
stu_name = 0

print(f"Student              Points    Grade")
print("-------------------------------------\n")
while stu_name != "":
    stu_name = stu_name.rstrip("\n")        
    stu_points = file_students.readline()  
    stu_points = int(stu_points)
    for x in range(1):                   
        if stu_points < 60:
            print(x, f"{stu_name:15}        {stu_points} F")
        if stu_points > 60:
            print(x, f"{stu_name:15}        {stu_points}")
    num_stu += 1
    stu_name = file_students.readline()
    student_fail = num_stu < 60
file_students.close()
print()
print(f"Number of students processed = {num_stu}")
print(f"Percentage of students passing = 66%")
print(f"Number of students failing =", student_fail)

if name == "main":
    main()

El archivo que se está leyendo contiene:

Johnson Smith
93
Maryanne James
80
Stanton Chase
45
Mildred Morris
90
George Deitz
58
Maisie Kling
79

Muchísimas gracias a cualquiera que pueda ayudar, obviamente no tengo ni idea de lo que estoy haciendo.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una lista numerada del 1 al 6, puedes usar la función range() con los argumentos start y stop. El argumento start especifica el número con el que empieza la secuencia (1 en este caso) y el argumento stop especifica el número con el que termina la secuencia (7 en este caso, ya que es exclusivo).

    Aquí tienes un ejemplo de cómo puedes usar range() para crear una lista numerada del 1 al 6:

    for num in range(1, 7):
        print(num)
    

    Esto producirá la salida:

    1
    2
    3
    4
    5
    6
    

    En el código que proporcionaste, el bucle for sólo itera una vez, usando range(1), lo que significa que sólo va del 0 al 0. Si quieres imprimir el nombre y los puntos de cada estudiante con un número correspondiente, puedes usar la función enumerate() así:

    for num, stu_name in enumerate(file_students):
        stu_points = int(file_students.readline())
        if stu_points < 60:
            print(num + 1, f"{stu_name.strip()}        {stu_points} F")
        else:
            print(num + 1, f"{stu_name.strip()}        {stu_points}")
    

    Esto producirá la salida:

    1 Johnson Smith        93
    2 Maryanne James        80
    3 Stanton Chase        45 F
    4 Mildred Morris        90
    5 George Deitz        58 F
    6 Maisie Kling        79
    

    Ten en cuenta que la función enumerate() comienza la numeración en 0 por defecto, por lo que debes sumar 1 a num para obtener la secuencia deseada del 1 al 6. Además, se utiliza el método strip() para eliminar el carácter de salto de línea al final de cada línea leída del archivo.

Comments are closed.