Python代码无法持续显示更新后用户信息的问题求助
问题:Python代码更新后信息无法持久显示
我编写的Python代码在更新用户信息后,后续输出会变回旧值。比如把名字改成CID后,再修改中间名时,输出里的名字又变回了Cid。我希望更新后的信息能在后续操作中持续显示。
示例运行场景
Enter First name: Cid Enter Middle name: RAZOR Enter Last name: Kamisato Enter number of subjects: 1 Please enter this valid subjects: ['CC1', 'CC2', 'CC3', 'CC4', 'CC5'] Please enter the subject: cc1 **** This is your info ***** First name is: Cid Middle name is: RAZOR Last name is: Kamisato Your Selected Subjects are: ['cc1'] Do you want to change anything?(Y/N): y 1. Change First name 2. Change Middle name 3. Change Last name 4. Change number of subjects & change the subjects 5. Exit What do you want to change?: 1 Enter First name: CID ****** This is your updated info ******* First name is: CID Middle name is: RAZOR Last name is: Kamisato Number of subjects: 1 Your Selected Subjects are: ['cc1'] Do you want to change anything?(Y/N): y 1. Change First name 2. Change Middle name 3. Change Last name 4. Change number of subjects & change the subjects 5. Exit What do you want to change?: 2 Enter Middle name: razor ****** This is your updated info ******* This is your first name: Cid Middle name is: razor Last name is: Kamisato Number of subjects: 1 Your Selected Subjects are: ['cc1'] Do you want to change anything?(Y/N):
原代码
F_name = [] M_name = [] L_name = [] o_sub = [] no_sub = [] subjects = ['CC1', 'CC2', 'CC3', 'CC4', 'CC5'] name = input('Enter First name: ') F_name.append(name) mid_name = input('Enter Middle name: ') M_name.append(mid_name) last_name = input('Enter Last name: ') L_name.append(last_name) n_sub = int(input('Enter number of subjects: ')) if n_sub <= 5: print(f'Please enter this valid subjects: {subjects}') no_sub.append(n_sub) else: print('INVALID INPUT!!!') print('MAX IS 5!!!') exit() for i in range(n_sub): sub = input('Please enter the subject: ') if sub.upper() in subjects: o_sub.append(sub) else: print('INVALID INPUT') break print('**** This is your info *****') print(f'First name is: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Your Selected Subjects are: {o_sub}') while True: choice = input('Do you want to change anything?(Y/N): ') if choice.casefold() == 'y': print('1. Change First name') print('2. Change Middle name') print('3. Change Last name') print('4. Change number of subjects & change the subjects ') print('5. Exit') else: print('------THANK YOU FOR USING ME------!!!') exit() option1 = input('What do you want to change?: ') if option1 == '1': cf_name = str(input('Enter First name: ')) F_name.clear() F_name.append(cf_name) print('****** This is your updated info *******') print(f'First name is: {cf_name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {o_sub}') elif option1 == '2': cm_name = input('Enter Middle name: ') M_name.clear() M_name.append(cm_name) print('****** This is your updated info *******') print(f'This is your first name: {name}') print(f'Middle name is: {cm_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {o_sub}') elif option1 == '3': cl_name = input('Enter Last name: ') L_name.clear() L_name.append(cl_name) print('****** This is your updated info *******') print(f'This is your first name: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {cl_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {o_sub}') elif option1 == '4': no_sub.clear() o_sub.clear() var = int(input('Enter the number of subjects: ')) no_sub.append(var) if var <= 5: for i in range(var): sub1 = input('Please enter the subject: ') if sub1.upper() in subjects: o_sub.append(sub1) else: print('INVALID INPUT') break print('****** This is your updated info *******') print(f'This is your first name: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {var}') print(f'Your Selected Subjects are: {o_sub}') else: print('INVALID INPUT') print('MAX IS 5!!') exit() elif option1 == '5': print('====== THANK YOU FOR USING ME ======') exit()
问题原因
你用name、mid_name、last_name、n_sub这些变量存储初始信息,同时又用F_name、M_name等列表做备份,但更新信息时只修改了列表,没有同步更新对应的变量。后续打印时,还是直接使用旧的变量值,导致之前的更新没有被保留。
比如修改名字后,你更新了F_name列表,但修改中间名时打印的name还是最初的Cid,而不是更新后的CID。
修复方案
直接更新存储信息的变量(每个信息都是单个值,用列表完全没必要,反而增加复杂度),每次修改后同步更新对应的变量,打印时始终使用这些变量:
# 去掉不必要的列表,直接用变量存储信息 subjects = ['CC1', 'CC2', 'CC3', 'CC4', 'CC5'] name = input('Enter First name: ') mid_name = input('Enter Middle name: ') last_name = input('Enter Last name: ') n_sub = int(input('Enter number of subjects: ')) if n_sub <= 5: print(f'Please enter this valid subjects: {subjects}') else: print('INVALID INPUT!!!') print('MAX IS 5!!!') exit() selected_subjects = [] for i in range(n_sub): sub = input('Please enter the subject: ') if sub.upper() in subjects: selected_subjects.append(sub) else: print('INVALID INPUT') break print('**** This is your info *****') print(f'First name is: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Your Selected Subjects are: {selected_subjects}') while True: choice = input('Do you want to change anything?(Y/N): ') if choice.casefold() == 'y': print('1. Change First name') print('2. Change Middle name') print('3. Change Last name') print('4. Change number of subjects & change the subjects ') print('5. Exit') else: print('------THANK YOU FOR USING ME------!!!') exit() option1 = input('What do you want to change?: ') if option1 == '1': name = input('Enter First name: ') # 直接更新name变量 print('****** This is your updated info *******') print(f'First name is: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {selected_subjects}') elif option1 == '2': mid_name = input('Enter Middle name: ') # 直接更新mid_name变量 print('****** This is your updated info *******') print(f'First name is: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {selected_subjects}') elif option1 == '3': last_name = input('Enter Last name: ') # 直接更新last_name变量 print('****** This is your updated info *******') print(f'First name is: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {selected_subjects}') elif option1 == '4': selected_subjects.clear() n_sub = int(input('Enter the number of subjects: ')) # 更新n_sub变量 if n_sub <= 5: for i in range(n_sub): sub1 = input('Please enter the subject: ') if sub1.upper() in subjects: selected_subjects.append(sub1) else: print('INVALID INPUT') break print('****** This is your updated info *******') print(f'First name is: {name}') print(f'Middle name is: {mid_name}') print(f'Last name is: {last_name}') print(f'Number of subjects: {n_sub}') print(f'Your Selected Subjects are: {selected_subjects}') else: print('INVALID INPUT') print('MAX IS 5!!') exit() elif option1 == '5': print('====== THANK YOU FOR USING ME ======') exit()
关键修改点
- 移除了所有不必要的列表(
F_name、M_name等),直接用变量存储用户信息,减少冗余 - 修改信息时直接更新对应的变量(比如
name = input(...)),确保变量始终保存最新值 - 统一打印逻辑,所有输出都使用这些变量,保证每次显示的都是最新信息
内容的提问来源于stack exchange,提问作者razorGold
相关产品推荐
相关产品推荐

