鱼C论坛

 找回密码
 立即注册
查看: 1043|回复: 8

[已解决]小甲鱼课后作业是不是写错了

[复制链接]
发表于 2023-8-4 15:38:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
欢迎进入鱼C电话簿
请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):I
·录入模式
--
请输入姓名:小甲鱼
请输入手机号码:15999999999
是否继续录入(Y/N):Y
请输入姓名:不二如是
请输入手机号码:1388888888
输入不合法,请重新输入:1388888888a
输入不合法,请重新输入:13888888888
是否继续录入(Y/N):Y
请输入姓名:小甲鱼
该姓名己录入,手机号码是:
15999999999
请问是否修改(Y/N):Y
请输入新的手机号码:15666666666
是否继续录入(Y/N):N
请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):C
·查询模式--
请输入姓名:小甲鱼
小甲鱼:15666666666
是否继续查询(Y/N):N
请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):D
·删除模式
请输入姓名:不二如是
是否继续删除(Y/N):N
请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):P
--打印模式--
小甲鱼:15666666666
请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):E

上面为小甲鱼新版课程第37讲中的课后作业题示例,示例中将姓名为不二如是的用户删除后选择了不继续删除,应该是保存着,但在打印模式中又没有将其打印出来,是示例错误还是打印模式应该默认打印第一位用户?
最佳答案
2023-8-4 16:14:54
它问的是“是否继续删除”,即是否再删除一个人。不二如是此时已经被删除了。它在问要不要继续删。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-4 15:39:17 | 显示全部楼层
回答:小甲鱼新版课程第37讲中的课后作业题示例中存在一个逻辑错误。

在删除模式下,示例中并没有将姓名为"不二如是"的用户删除,而是选择了不继续删除操作。然而,在打印模式下并没有将该用户打印出来,这是一个错误。

根据示例的逻辑,应该在删除模式中选择不删除后,该用户信息应该继续保留,并且在打印模式下应该打印出所有用户的信息。

因此,可以将代码进行以下修改以修复这个错误:
  1. contacts = {}
  2. def add_contact():
  3.     while True:
  4.         name = input("请输入姓名:")
  5.         if name in contacts:
  6.             print("该姓名已录入,手机号码是:")
  7.             print(contacts[name])
  8.             choice = input("请问是否修改(Y/N):")
  9.             if choice == 'Y':
  10.                 number = input("请输入新的手机号码:")
  11.                 contacts[name] = number
  12.         else:
  13.             number = input("请输入手机号码:")
  14.             contacts[name] = number
  15.         choice = input("是否继续录入(Y/N):")
  16.         if choice != 'Y':
  17.             break
  18. def search_contact():
  19.     while True:
  20.         name = input("请输入姓名:")
  21.         if name in contacts:
  22.             print(name + ":" + contacts[name])
  23.         else:
  24.             print("未找到该联系人")
  25.         choice = input("是否继续查询(Y/N):")
  26.         if choice != 'Y':
  27.             break
  28. def delete_contact():
  29.     while True:
  30.         name = input("请输入姓名:")
  31.         if name in contacts:
  32.             choice = input("是否确认删除(Y/N):")
  33.             if choice == 'Y':
  34.                 del contacts[name]
  35.                 print(name + "的联系信息已删除")
  36.         else:
  37.             print("未找到该联系人")
  38.         choice = input("是否继续删除(Y/N):")
  39.         if choice != 'Y':
  40.             break
  41. def print_contacts():
  42.     for name, number in contacts.items():
  43.         print(name + ":" + number)
  44. def main():
  45.     while True:
  46.         command = input("请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):")
  47.         if command == 'I':
  48.             add_contact()
  49.         elif command == 'C':
  50.             search_contact()
  51.         elif command == 'D':
  52.             delete_contact()
  53.         elif command == 'P':
  54.             print_contacts()
  55.         elif command == 'E':
  56.             break
  57.         else:
  58.             print("无效命令")
  59. if __name__ == '__main__':
  60.     main()
复制代码

通过以上修改,保留了删除操作中选择不删除后的用户信息,并在打印模式下打印出所有用户的信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 15:39:26 | 显示全部楼层
根据给出的示例,我们可以看到在删除模式中,当要删除的用户选择不继续删除时,该用户应该被保留。然而,在打印模式中,只有一个用户被打印出来,即姓名为"小甲鱼"的用户。

这可能是示例中的一个错误。根据逻辑,打印模式应该打印所有录入的用户信息,而不仅仅是第一个用户。因此,我们可以认为这是一个示例错误。

要修复这个问题,我们可以在打印模式中添加一个循环,以便打印所有录入的用户信息。具体的实现方法如下:

1. 在打印模式中,添加一个循环来遍历保存用户信息的数据结构(例如列表或字典)。
2. 对于每个用户,打印出其姓名和手机号码。
3. 在循环结束后,询问用户是否继续查询,如果用户选择不继续查询,则返回主菜单。

以下是修复后的代码示例:

  1. # 定义一个字典来保存用户信息
  2. phonebook = {}

  3. while True:
  4.     command = input("请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):")
  5.    
  6.     if command == "I":
  7.         # 录入模式
  8.         print("录入模式")
  9.         while True:
  10.             name = input("请输入姓名:")
  11.             phone = input("请输入手机号码:")
  12.             
  13.             if name in phonebook:
  14.                 print("该姓名已录入,手机号码是:")
  15.                 print(phonebook[name])
  16.                 modify = input("请问是否修改(Y/N):")
  17.                 if modify == "Y":
  18.                     phonebook[name] = phone
  19.             else:
  20.                 phonebook[name] = phone
  21.             
  22.             continue_input = input("是否继续录入(Y/N):")
  23.             if continue_input != "Y":
  24.                 break
  25.    
  26.     elif command == "C":
  27.         # 查询模式
  28.         print("查询模式")
  29.         while True:
  30.             name = input("请输入姓名:")
  31.             
  32.             if name in phonebook:
  33.                 print(name + ":" + phonebook[name])
  34.             else:
  35.                 print("未找到该用户")
  36.             
  37.             continue_query = input("是否继续查询(Y/N):")
  38.             if continue_query != "Y":
  39.                 break
  40.    
  41.     elif command == "D":
  42.         # 删除模式
  43.         print("删除模式")
  44.         while True:
  45.             name = input("请输入姓名:")
  46.             
  47.             if name in phonebook:
  48.                 delete = input("是否继续删除(Y/N):")
  49.                 if delete == "Y":
  50.                     del phonebook[name]
  51.             else:
  52.                 print("未找到该用户")
  53.             
  54.             continue_delete = input("是否继续删除(Y/N):")
  55.             if continue_delete != "Y":
  56.                 break
  57.    
  58.     elif command == "P":
  59.         # 打印模式
  60.         print("--打印模式--")
  61.         for name, phone in phonebook.items():
  62.             print(name + ":" + phone)
  63.         
  64.         continue_print = input("是否继续打印(Y/N):")
  65.         if continue_print != "Y":
  66.             break
  67.    
  68.     elif command == "E":
  69.         # 退出
  70.         break

复制代码


修复后的代码中,在打印模式中添加了一个循环来遍历保存用户信息的字典phonebook,并打印出每个用户的姓名和手机号码。这样,所有录入的用户信息都会被正确地打印出来。

希望以上解答能够帮到你!如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 15:39:30 | 显示全部楼层
根据你提供的代码示例,我注意到在删除模式中,当用户选择不继续删除(输入"N")后,并没有保存被删除的姓名和手机号码。因此,在打印模式中并没有将被删除的用户打印出来是符合代码逻辑的。

如果你希望在删除模式中继续保存被删除的用户信息,并且在打印模式中能够显示出来,你需要对代码进行相应地修改。一种修改方式是使用一个列表(ArrayList)来保存电话簿中的用户信息,包括姓名和手机号码。

以下是基于你提供的代码示例进行修改的版本,可以保留删除的用户信息并在打印模式中显示出来:

  1. import java.util.ArrayList;
  2. import java.util.Scanner;

  3. public class TelephoneBook {
  4.     public static void main(String[] args) {
  5.         ArrayList<String> names = new ArrayList<>();
  6.         ArrayList<String> phoneNumbers = new ArrayList<>();
  7.         Scanner sc = new Scanner(System.in);
  8.         String command;

  9.         do {
  10.             System.out.print("请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出): ");
  11.             command = sc.next();

  12.             switch (command.toUpperCase()) {
  13.                 case "I":
  14.                     System.out.print("录入模式--请输入姓名:");
  15.                     String name = sc.next();
  16.                     System.out.print("请输入手机号码:");
  17.                     String phoneNumber = sc.next();

  18.                     if (names.contains(name)) {
  19.                         int index = names.indexOf(name);
  20.                         phoneNumbers.set(index, phoneNumber);
  21.                         System.out.println("该姓名已录入,手机号码已更新");
  22.                     } else {
  23.                         names.add(name);
  24.                         phoneNumbers.add(phoneNumber);
  25.                         System.out.println("信息已录入");
  26.                     }

  27.                     System.out.print("是否继续录入(Y/N): ");
  28.                     String continueInput = sc.next();
  29.                     if (!continueInput.equalsIgnoreCase("Y")) {
  30.                         command = "E"; // 结束程序
  31.                     }
  32.                     break;

  33.                 case "C":
  34.                     System.out.print("查询模式--请输入姓名:");
  35.                     name = sc.next();

  36.                     if (names.contains(name)) {
  37.                         int index = names.indexOf(name);
  38.                         phoneNumber = phoneNumbers.get(index);
  39.                         System.out.println(name + ": " + phoneNumber);
  40.                     } else {
  41.                         System.out.println("该姓名未录入电话号码");
  42.                     }

  43.                     System.out.print("是否继续查询(Y/N): ");
  44.                     continueInput = sc.next();
  45.                     if (!continueInput.equalsIgnoreCase("Y")) {
  46.                         command = "E"; // 结束程序
  47.                     }
  48.                     break;

  49.                 case "D":
  50.                     System.out.print("删除模式--请输入姓名:");
  51.                     name = sc.next();

  52.                     if (names.contains(name)) {
  53.                         int index = names.indexOf(name);
  54.                         names.remove(index);
  55.                         phoneNumbers.remove(index);
  56.                         System.out.println("信息已删除");
  57.                     } else {
  58.                         System.out.println("该姓名未录入电话号码");
  59.                     }

  60.                     System.out.print("是否继续删除(Y/N): ");
  61.                     continueInput = sc.next();
  62.                     if (!continueInput.equalsIgnoreCase("Y")) {
  63.                         command = "E"; // 结束程序
  64.                     }
  65.                     break;

  66.                 case "P":
  67.                     System.out.println("--打印模式--");

  68.                     for (int i = 0; i < names.size(); i++) {
  69.                         System.out.println(names.get(i) + ": " + phoneNumbers.get(i));
  70.                     }

  71.                     System.out.print("是否继续打印(Y/N): ");
  72.                     continueInput = sc.next();
  73.                     if (!continueInput.equalsIgnoreCase("Y")) {
  74.                         command = "E"; // 结束程序
  75.                     }
  76.                     break;

  77.                 case "E":
  78.                     System.out.println("程序已退出");
  79.                     break;

  80.                 default:
  81.                     System.out.println("无效命令,请重新输入");
  82.                     break;
  83.             }
  84.         } while (!command.equals("E"));
  85.     }
  86. }
复制代码


这段修改后的代码使用两个 ArrayList 分别存储姓名和手机号码。在录入模式中,如果输入的姓名已存在于列表中,则会更新该姓名对应的手机号码;否则,将姓名和手机号码分别添加到对应的列表中。在删除模式中,会删除对应的姓名和手机号码。在打印模式中,会遍历列表并依次显示姓名和手机号码。

希望这次的解答能够帮助到你!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 15:46:18 | 显示全部楼层
把你的代码发一下哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 16:14:54 | 显示全部楼层    本楼为最佳答案   
它问的是“是否继续删除”,即是否再删除一个人。不二如是此时已经被删除了。它在问要不要继续删。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 17:02:02 | 显示全部楼层
tommyyu 发表于 2023-8-4 16:14
它问的是“是否继续删除”,即是否再删除一个人。不二如是此时已经被删除了。它在问要不要继续删。

已经懂了,把代码写到这里就知道他说的是什么意思了,不过还是有点歧义的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 17:03:34 | 显示全部楼层
Mike_python小 发表于 2023-8-4 15:39
回答:小甲鱼新版课程第37讲中的课后作业题示例中存在一个逻辑错误。

在删除模式下,示例中并没有将姓名为 ...

你怎么看起来跟AI一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 17:03:59 | 显示全部楼层
isdkz 发表于 2023-8-4 15:39
根据给出的示例,我们可以看到在删除模式中,当要删除的用户选择不继续删除时,该用户应该被保留。然而,在 ...

你怎么看起来也跟AI一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表