Python 二维列表按输入用户名定位修改指定用户信息问题咨询
核心问题原因
你当前代码固定用allUserDetails[0][x]修改字段,索引0永远指向二维列表的第一个用户子列表,所以无论匹配到哪个用户,都会修改第一个用户的信息。
因为你在遍历allUserDetails时,匹配到的子列表已经赋值给变量x,直接修改x内的元素即可,列表是可变类型,修改x会同步修改原二维列表中的对应项。
其他需要修正的逻辑问题
- 匹配到用户处理完成后没有跳出循环,会继续遍历后续剩余用户
- 「用户不存在」的判断逻辑错误,当前会对每个不匹配的用户都输出一次未找到提示
- Q/q退出的判断条件错误,
updateSelection == ("Q", "q")是判断输入等于这个元组,而非判断输入是否是Q/q,需要改用in运算符
修正后的完整代码
allUserDetails = [["John", "Doe", "User", "Sales", "johndoe91", "password"], ["James", "Hill", "Admin", "Administrator", "hill95", "12345678"]] def update_user(): print("\n:: Update User ::") print("-" * 25) print("\nWhich field would you like to update?\n") print("1. First Name") print("2. Last Name") print(allUserDetails) searchUser = input("\nInput username to edit (press 1 to return to Main Menu): ").lower() while searchUser != "1": user_found = False for x in allUserDetails: if x[4] == searchUser: user_found = True print() print(searchUser, "found in the list") update_user() updateSelection = input("\nInput number of field or press Q/q to return to Menu 3: ") if updateSelection == "1": newFirstName = input("Input new First Name: ") # 直接修改匹配到的x子列表的对应字段 x[0] = newFirstName print(allUserDetails) elif updateSelection == "2": newLastName = input("Input new Last Name: ") x[1] = newLastName print(allUserDetails) elif updateSelection in ("Q", "q"): break # 统一判断用户是否存在 if not user_found: print() print(searchUser, "not found") # 重新获取要修改的用户名 searchUser = input("\nInput username to edit (press 1 to return to Main Menu): ").lower()
内容的提问来源于stack exchange,提问作者JDF91
相关产品推荐
相关产品推荐

