小甲鱼课后作业是不是写错了
欢迎进入鱼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讲中的课后作业题示例,示例中将姓名为不二如是的用户删除后选择了不继续删除,应该是保存着,但在打印模式中又没有将其打印出来,是示例错误还是打印模式应该默认打印第一位用户? 回答:小甲鱼新版课程第37讲中的课后作业题示例中存在一个逻辑错误。
在删除模式下,示例中并没有将姓名为"不二如是"的用户删除,而是选择了不继续删除操作。然而,在打印模式下并没有将该用户打印出来,这是一个错误。
根据示例的逻辑,应该在删除模式中选择不删除后,该用户信息应该继续保留,并且在打印模式下应该打印出所有用户的信息。
因此,可以将代码进行以下修改以修复这个错误:
contacts = {}
def add_contact():
while True:
name = input("请输入姓名:")
if name in contacts:
print("该姓名已录入,手机号码是:")
print(contacts)
choice = input("请问是否修改(Y/N):")
if choice == 'Y':
number = input("请输入新的手机号码:")
contacts = number
else:
number = input("请输入手机号码:")
contacts = number
choice = input("是否继续录入(Y/N):")
if choice != 'Y':
break
def search_contact():
while True:
name = input("请输入姓名:")
if name in contacts:
print(name + ":" + contacts)
else:
print("未找到该联系人")
choice = input("是否继续查询(Y/N):")
if choice != 'Y':
break
def delete_contact():
while True:
name = input("请输入姓名:")
if name in contacts:
choice = input("是否确认删除(Y/N):")
if choice == 'Y':
del contacts
print(name + "的联系信息已删除")
else:
print("未找到该联系人")
choice = input("是否继续删除(Y/N):")
if choice != 'Y':
break
def 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()
通过以上修改,保留了删除操作中选择不删除后的用户信息,并在打印模式下打印出所有用户的信息。 根据给出的示例,我们可以看到在删除模式中,当要删除的用户选择不继续删除时,该用户应该被保留。然而,在打印模式中,只有一个用户被打印出来,即姓名为"小甲鱼"的用户。
这可能是示例中的一个错误。根据逻辑,打印模式应该打印所有录入的用户信息,而不仅仅是第一个用户。因此,我们可以认为这是一个示例错误。
要修复这个问题,我们可以在打印模式中添加一个循环,以便打印所有录入的用户信息。具体的实现方法如下:
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)
modify = input("请问是否修改(Y/N):")
if modify == "Y":
phonebook = phone
else:
phonebook = 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)
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
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,并打印出每个用户的姓名和手机号码。这样,所有录入的用户信息都会被正确地打印出来。
希望以上解答能够帮到你!如果你还有其他问题,请随时提问。 根据你提供的代码示例,我注意到在删除模式中,当用户选择不继续删除(输入"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 分别存储姓名和手机号码。在录入模式中,如果输入的姓名已存在于列表中,则会更新该姓名对应的手机号码;否则,将姓名和手机号码分别添加到对应的列表中。在删除模式中,会删除对应的姓名和手机号码。在打印模式中,会遍历列表并依次显示姓名和手机号码。
希望这次的解答能够帮助到你!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案 把你的代码发一下哦 它问的是“是否继续删除”,即是否再删除一个人。不二如是此时已经被删除了。它在问要不要继续删。 tommyyu 发表于 2023-8-4 16:14
它问的是“是否继续删除”,即是否再删除一个人。不二如是此时已经被删除了。它在问要不要继续删。
已经懂了,把代码写到这里就知道他说的是什么意思了,不过还是有点歧义的意思{:10_266:} Mike_python小 发表于 2023-8-4 15:39
回答:小甲鱼新版课程第37讲中的课后作业题示例中存在一个逻辑错误。
在删除模式下,示例中并没有将姓名为 ...
你怎么看起来跟AI一样{:10_284:} isdkz 发表于 2023-8-4 15:39
根据给出的示例,我们可以看到在删除模式中,当要删除的用户选择不继续删除时,该用户应该被保留。然而,在 ...
你怎么看起来也跟AI一样{:10_284:}
页:
[1]