鱼C论坛

 找回密码
 立即注册
查看: 1439|回复: 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讲中的课后作业题示例中存在一个逻辑错误。

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

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

因此,可以将代码进行以下修改以修复这个错误:
contacts = {}def add_contact():    while True:        name = input("请输入姓名:")        if name in contacts:            print("该姓名已录入,手机号码是:")            print(contacts[name])            choice = input("请问是否修改(Y/N):")            if choice == 'Y':                number = input("请输入新的手机号码:")                contacts[name] = number        else:            number = input("请输入手机号码:")            contacts[name] = number        choice = input("是否继续录入(Y/N):")        if choice != 'Y':            breakdef search_contact():    while True:        name = input("请输入姓名:")        if name in contacts:            print(name + ":" + contacts[name])        else:            print("未找到该联系人")        choice = input("是否继续查询(Y/N):")        if choice != 'Y':            breakdef delete_contact():    while True:        name = input("请输入姓名:")        if name in contacts:            choice = input("是否确认删除(Y/N):")            if choice == 'Y':                del contacts[name]                print(name + "的联系信息已删除")        else:            print("未找到该联系人")        choice = input("是否继续删除(Y/N):")        if choice != 'Y':            breakdef print_contacts():    for name, number in contacts.items():        print(name + ":" + number)def main():    while True:        command = input("请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):")        if command == 'I':            add_contact()        elif command == 'C':            search_contact()        elif command == 'D':            delete_contact()        elif command == 'P':            print_contacts()        elif command == 'E':            break        else:            print("无效命令")if __name__ == '__main__':    main()
通过以上修改,保留了删除操作中选择不删除后的用户信息,并在打印模式下打印出所有用户的信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

以下是修复后的代码示例:
# 定义一个字典来保存用户信息
phonebook = {}

while True:
    command = input("请输入命令(I:录入/C:查询/D:删除/P:打印/E:退出):")
    
    if command == "I":
        # 录入模式
        print("录入模式")
        while True:
            name = input("请输入姓名:")
            phone = input("请输入手机号码:")
            
            if name in phonebook:
                print("该姓名已录入,手机号码是:")
                print(phonebook[name])
                modify = input("请问是否修改(Y/N):")
                if modify == "Y":
                    phonebook[name] = phone
            else:
                phonebook[name] = phone
            
            continue_input = input("是否继续录入(Y/N):")
            if continue_input != "Y":
                break
    
    elif command == "C":
        # 查询模式
        print("查询模式")
        while True:
            name = input("请输入姓名:")
            
            if name in phonebook:
                print(name + ":" + phonebook[name])
            else:
                print("未找到该用户")
            
            continue_query = input("是否继续查询(Y/N):")
            if continue_query != "Y":
                break
    
    elif command == "D":
        # 删除模式
        print("删除模式")
        while True:
            name = input("请输入姓名:")
            
            if name in phonebook:
                delete = input("是否继续删除(Y/N):")
                if delete == "Y":
                    del phonebook[name]
            else:
                print("未找到该用户")
            
            continue_delete = input("是否继续删除(Y/N):")
            if continue_delete != "Y":
                break
    
    elif command == "P":
        # 打印模式
        print("--打印模式--")
        for name, phone in phonebook.items():
            print(name + ":" + phone)
        
        continue_print = input("是否继续打印(Y/N):")
        if continue_print != "Y":
            break
    
    elif command == "E":
        # 退出
        break

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

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

使用道具 举报

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                default:
                    System.out.println("无效命令,请重新输入");
                    break;
            }
        } while (!command.equals("E"));
    }
}

这段修改后的代码使用两个 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-9-22 04:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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