Preguntas de la aplicación integral de nivel 2 de Python: administración de la libreta de direcciones

La última pregunta en el examen de Python Nivel 2 es generalmente la pregunta final, que es difícil y tiene una puntuación alta. Esta pregunta generalmente se divide en 1 a 3 preguntas, y solo ganando cada paso podemos resolverla mejor. Cuando encuentre este tipo de problema, en primer lugar, no tenga miedo, se necesitan algunos pasos para resolverlo. Hoy tenemos una pregunta sobre la gestión de la libreta de direcciones para explicar:

1. Temas

Utilice diccionarios y listas para completar la gestión de las libretas de direcciones de los estudiantes.La lista está dada por el archivo dirección.txt, y cada línea es la información de un estudiante. Los ejemplos son los siguientes:

学号,姓名,电话号码,地址
101,aa,12345678,Beijing
102,bb,23456781,shanghai
...(略)

Pregunta 1: Modifique P301-1.py para mostrar el menú de funciones en la pantalla.El ejemplo del menú de funciones es el siguiente:

1. 显示所有信息
2. 追加信息
3. 删除信息
请输入数字 1-3 选择功能:

Ingrese la función de selección del número 1-3 ( requisito: no se permite la entrada de números de coma flotante ): acepte la función de selección del número de entrada del usuario, si la entrada es incorrecta, el usuario debe volver a ingresar. Si la entrada es correcta, la instrucción de solicitud se mostrará en la pantalla: 您选择了功能1/2/3. (5 puntos)

Pregunta 2: Modifique P301-2.py Según el código de la pregunta 1, cuando el usuario seleccione 1, lea la información del archivo de la libreta de direcciones y muestre toda la información. (5 puntos) Un ejemplo es el siguiente:

1. 显示所有信息
2. 追加信息
3. 删除信息
请输入数字1-3选择功能:1
101,aa,12345678,Beijing
102,bb,23456781,shanghai
...(略)

Pregunta 3: Modificar P301-3.py  Basado en el código de la pregunta 2, cuando el usuario seleccione 2, permita que el usuario ingrese la información de un estudiante desde el teclado, separada por comas. Escriba la información en el archivo new_address.txt, el formato de archivo es el mismo que address.txt. (10 puntos) El ejemplo de contenido de new_address.txt es el siguiente:

101,aa,12345678,Beijing
102,bb,23456781,shanghai
103,cc,34567,tianj

Ejemplo 1 :

输入: "1"
     "1"
     "2"
     "103,cc,34567,tianj"
输出: 内容输出到 new_address.txt 文件中

2. Pasos de solución

1. Solución al Problema 1

Ejemplo:

menu=["1. 显示所有信息","2. 追加信息","3. 删除信息"]
...
        ch = int(input("请输入数字1-3选择功能:") )
...
print("您选择了功能", ch)

Solución: Use la bandera para definir un interruptor, cuando su valor es 1, significa encendido, y cuando es 0, significa apagado.

menu = ["1.显示所有信息","2.追加信息","3.删除信息"]
flag = 1
while flag:
    for m in menu:
        print(m)
    try:
        num = int(input("请输入数字1-3选择功能:")) #将获取的字符型数字转化为数字
        if num ==1:
            flag = 0
    except:
        flag = 1
        
    if num<1 or num >3:
        flag = 1

Lo anterior se repite mientras. Cuando el indicador especificado es 1, el programa continúa en bucle. Cuando el indicador es 0, el programa deja de ejecutarse. Use try...except para capturar excepciones y use if para juzgar el tamaño de num.

2. Solución al problema 2

Sobre la base de la pregunta 1, se agrega una función de impresión de todas las libretas de direcciones. Podemos definir una función llamada display que se llama cuando se ingresa 1. Tenga en cuenta que la función debe escribirse delante del ciclo while, de lo contrario no se puede llamar.

def display():
    with open("address.txt",'r',encoding='utf-8') as f:
        for fi in f:
            print(fi,end="")

Codigo original:

def display():
    fi = open("address.txt", 'r')
    for line in fi:
        print(line,end="")
    fi.close()
    
menu = ["1. 显示所有信息", "2. 追加信息", "3. 删除信息"]
flag = 1
while flag:
    
    for m in menu:
        print(m)
        flag = 0
    try:
        print("请输入数字1-3选择功能:")
        ch = int(input())
        flag = 0
    except:
        flag = 1
    if flag <1 or flag >3:
        flag = 1
    elif ch == 1:
        display ()

En el código oficial, el juicio if final se escribe fuera del bucle while, pero debe escribirse dentro después de la prueba, como se muestra en la siguiente figura:

3. Solución al Problema 3

También necesitamos definir otra función de inserción, que acepte la entrada de caracteres en la pantalla y los agregue a la lista con agregar, y luego los escriba en new_address.txt con un bucle for.

def display():
    fi = open("address.txt", 'r')
    for line in fi:
        print(line,end="")
    fi.close()

def insertrec(text):
    with open("address.txt",'r',encoding='utf-8') as file:
        newline = file.readlines()
        newline.append(text+"\n")
        with open("new_address.txt","w+",encoding='utf-8') as newfile:
            for line in newline:
                newfile.write(line)    

menu = ["1. 显示所有信息", "2. 追加信息", "3. 删除信息"]
flag = 1
while flag:
    for m in menu:
        print(m)
        flag = 0
    try:
        print("请输入数字1-3选择功能:")
        ch = int(input())
        flag = 0
    except:
        flag = 1
    if flag <1 or flag >3:
        flag = 1
    elif ch == 1:
        display ()
    elif ch == 2:
        insertrec()

El código anterior usa el código escrito por mí mismo, el siguiente es el código oficial:

def insertrec():
   fi = open("address.txt",'r')
   fo = open("new_address.txt",'w')
   la=[]
   for l in fi:
       la.append(l.replace('\n',''))
   print("请输入要插入的信息,以逗号隔开,示例:103, cc, 34567812, tianjing:")
   rec = input()
   la.append(rec)
   for l in la:
       fo.write(l)
       fo.write('\n')
   fi.close()
   fo.close()

La forma de escribir fo en el código oficial debe ser w+, si es w, se informará un error si el archivo no existe. la.append(l.replace('\n','')) Este paso parece inútil. Solo necesito agregar un [\ n] al agregar, y luego usar escribir para escribir directamente. La nueva línea en sí viene sola, por lo que no hay necesidad de tirar.

3. Reflexión post-escolar

  1. La solución oficial requiere una comprensión profunda de sus principios, y el algoritmo se puede optimizar y mejorar aún más sobre la base de la comprensión.
  2. Hay muchas maneras de lidiar con \n, como str.strip() puede eliminar líneas nuevas, usar print(string,end="\n") para agregar líneas nuevas, etc.

Supongo que te gusta

Origin blog.csdn.net/henanlion/article/details/131274206
Recomendado
Clasificación