Questões Abrangentes de Aplicação do Nível 2 do Python: Gerenciamento do Catálogo de Endereços

A última pergunta do exame Python Nível 2 geralmente é a pergunta final, que é difícil e tem uma pontuação alta. Esta questão é geralmente dividida em 1 a 3 questões, e somente vencendo cada etapa podemos resolvê-la melhor. Ao se deparar com esse tipo de problema, antes de tudo, não tenha medo, são necessários alguns passos para resolvê-lo. Hoje temos uma questão de gerenciamento de catálogo de endereços para explicar:

1. Tópicos

Use dicionários e listas para completar o gerenciamento das agendas dos alunos. A lista é fornecida pelo arquivo address.txt, e cada linha é uma informação do aluno. Os exemplos são os seguintes:

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

Questão 1: Modifique P301-1.py para exibir o menu de funções na tela. O exemplo do menu de funções é o seguinte:

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

Insira a função de seleção de número 1-3 ( requisito: nenhuma entrada de número de ponto flutuante é permitida ): aceite a função de seleção de número de entrada do usuário, se a entrada estiver errada, o usuário deverá reinserir. Se a entrada estiver correta, a instrução de prompt será exibida na tela: 您选择了功能1/2/3. (5 pontos)

Pergunta 2: Modifique P301-2.py Com base no código da pergunta 1, quando o usuário selecionar 1, leia as informações do arquivo do catálogo de endereços e exiba todas as informações. (5 pontos) Um exemplo é o seguinte:

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

Pergunta 3: Modifique P301-3.py  Com base no código da pergunta 2, quando o usuário selecionar 2, deixe o usuário inserir as informações do aluno no teclado, separadas por vírgulas. Escreva as informações no arquivo new_address.txt, o formato do arquivo é o mesmo que address.txt. (10 pontos) O exemplo de conteúdo de new_address.txt é o seguinte:

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

Exemplo 1 :

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

2. Etapas da solução

1. Solução para o Problema 1

Exemplo:

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

Solução: Use o sinalizador para definir uma chave, quando seu valor for 1, significa ligado, e quando for 0, significa desligado.

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

O loop acima é loop while. Quando o sinalizador especificado é 1, o programa continua em loop. Quando o sinalizador é 0, o programa para de executar. Use try...except para capturar exceções e use if para julgar o tamanho de num.

2. Solução do problema 2

Com base na pergunta 1, é adicionada uma função de impressão de todos os catálogos de endereços. Podemos definir uma função chamada display que é chamada quando 1 é inserido. Observe que a função deve ser escrita na frente do loop while, caso contrário ela não pode ser chamada.

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

Código 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 ()

No código oficial, o julgamento if final é escrito fora do loop while, mas deve ser escrito dentro após o teste, conforme mostra a figura a seguir:

3. Solução do Problema 3

Também precisamos definir outra função de inserção, que aceita os caracteres inseridos na tela e os anexa à lista com append e, em seguida, os escreve em new_address.txt com um loop 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()

O código acima usa o código escrito por mim, o seguinte é o 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()

A forma de escrever fo no código oficial deve ser w+, se for w, será reportado um erro caso o arquivo não exista. la.append(l.replace('\n','')) Esta etapa parece inútil. Só preciso adicionar um [\n] ao anexar e, em seguida, usar a gravação para escrever diretamente. A própria nova linha vem com ela mesma, portanto, não há necessidade de descartar.

3. Reflexão pós-escolar

  1. A solução oficial requer uma compreensão profunda de seus princípios, e o algoritmo pode ser ainda mais otimizado e aprimorado com base na compreensão.
  2. Existem muitas maneiras de lidar com \n, como str.strip() pode remover novas linhas, usar print(string,end="\n") para adicionar novas linhas e assim por diante.

Acho que você gosta

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