鱼C论坛

 找回密码
 立即注册
查看: 1410|回复: 3

[已解决]哥哥姐姐们能解释一下这个flim变量为什么没有被定义吗

[复制链接]
发表于 2024-1-30 16:45:22 | 显示全部楼层 |阅读模式

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

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

x
源码如下,当功能为一时输入电影的各项信息,然后再进入功能二来查找电影,但是报错film变量也就是大字典的前键没被定义这是为什么,顺便问一下如何测试python中的程序节点,本人大一学过c语言可以在vs一点点测试看问题,但是python编译器不知道如何测试
  1. 欢迎进入鱼c影评小程序
  2. 1.数据录入
  3. 2.查询数据
  4. 3.退出程序
  5. 请输入想要的功能(1/2/3)1
  6. 请输入电影名称:z
  7. 请输入上映日期:
  8. 请输入导演名字(多人请用/分隔)知
  9. 请输入演员名字(多人请用/分隔)2
  10. 请输入电影评分:2
  11. 请问是否继续录入:2
  12. 请输入想要的功能(1/2/3)2
  13. 请输入电影名称:z
  14. Traceback (most recent call last):
  15.   File "E:\python\存储电影数据的小程序。.py", line 28, in <module>
  16.     if names in film:#判断一个键是否在字典中,用户输入的电影名字是否与数据库中的名字完全相符
  17. NameError: name 'film' is not defined
  18. >>> film
  19. Traceback (most recent call last):
  20.   File "<pyshell#1>", line 1, in <module>
  21.     film
  22. NameError: name 'film' is not defined
  23. >>>
复制代码
这是报错代码



  1. print('欢迎进入鱼c影评小程序')
  2. print('1.数据录入')
  3. print('2.查询数据')
  4. print('3.退出程序')
  5. '''一个字典的所有项作为这个电影的各种信息,
  6. 然后信息字典作为数据字典的值与与之相应的字典配对'''
  7. database = {}
  8. information_module = ['日期','导演','演员','评分','继续否']
  9. individual_information = []
  10. #informations = information.fromkeys(('日期','导演','演员','评分','','继续否'),1)#对信息字典进行初始化
  11. #fromkeys()是返回一个新的字典,需要一个新的变量来接受
  12. functions = int(input('请输入想要的功能(1/2/3)'))

  13. if functions == 1:
  14.     names = input('请输入电影名称:')
  15.     individual_information.append(input('请输入上映日期:'))
  16.     individual_information.append(input('请输入导演名字(多人请用/分隔)'))
  17.     individual_information.append(input('请输入演员名字(多人请用/分隔)'))
  18.     individual_information.append(input('请输入电影评分:'))
  19.     individual_information.append(input('请问是否继续录入:'))
  20.     flim = dict(zip(information_module,individual_information))
  21.     database[names] = flim
  22.     functions = int(input('请输入想要的功能(1/2/3)'))
  23.     #print(database)

  24. if functions == 2:
  25.     names = input('请输入电影名称:')
  26.     if names in film:#判断一个键是否在字典中,用户输入的电影名字是否与数据库中的名字完全相符
  27.         print('电影名称:',names,
  28.               '上映日期:',films[names]['日期'],
  29.               '导演名单:',films[names]['导演'],
  30.               '演员名单:',films[names]['演员'],
  31.               '当前评分:',films[names]['评分'])
  32.     else:
  33.         for each in list(film.keys()):#从零开始遍历字典键,字典键对象转化成列表
  34.             if names in each:
  35.                 print('电影名称:',each,
  36.               '上映日期:',films[each]['日期'],
  37.               '导演名单:',films[each]['导演'],
  38.               '演员名单:',films[each]['演员'],
  39.               '当前评分:',films[each]['评分'])
  40.                 break
  41.         else:
  42.             print('查无此片!')

  43. if functions == 3:
  44.     None
复制代码

这是源码
最佳答案
2024-1-30 16:46:39
在你的代码中,flim变量在功能为1的部分被定义为一个字典,然后赋值给了database变量。但是在功能为2的部分,你使用了一个没有被定义的变量film来判断电影名称是否存在于字典中。

解决这个问题很简单,你只需要将film改为database即可。修改后的代码如下:

  1. print('欢迎进入鱼c影评小程序')
  2. print('1.数据录入')
  3. print('2.查询数据')
  4. print('3.退出程序')

  5. database = {}
  6. information_module = ['日期', '导演', '演员', '评分', '继续否']
  7. individual_information = []

  8. functions = int(input('请输入想要的功能(1/2/3): '))

  9. if functions == 1:
  10.     names = input('请输入电影名称:')
  11.     individual_information.append(input('请输入上映日期:'))
  12.     individual_information.append(input('请输入导演名字(多人请用/分隔):'))
  13.     individual_information.append(input('请输入演员名字(多人请用/分隔):'))
  14.     individual_information.append(input('请输入电影评分:'))
  15.     individual_information.append(input('请问是否继续录入:'))
  16.     film = dict(zip(information_module, individual_information))
  17.     database[names] = film

  18.     functions = int(input('请输入想要的功能(1/2/3): '))

  19. if functions == 2:
  20.     names = input('请输入电影名称:')
  21.     if names in database:
  22.         film = database[names]
  23.         print('电影名称:', names)
  24.         print('上映日期:', film['日期'])
  25.         print('导演名单:', film['导演'])
  26.         print('演员名单:', film['演员'])
  27.         print('当前评分:', film['评分'])
  28.     else:
  29.         for each in database.keys():
  30.             if names in each:
  31.                 film = database[each]
  32.                 print('电影名称:', each)
  33.                 print('上映日期:', film['日期'])
  34.                 print('导演名单:', film['导演'])
  35.                 print('演员名单:', film['演员'])
  36.                 print('当前评分:', film['评分'])
  37.                 break
  38.         else:
  39.             print('查无此片!')

  40. if functions == 3:
  41.     None
复制代码


至于如何测试Python程序的每个节点,可以使用Python中的调试器来逐行运行代码并查看变量值。常用的调试器有pdb和PyCharm等。你可以在需要进行调试的地方插入断点,然后运行程序时会停在断点处,使用调试器的命令来查看代码执行过程和变量的值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
031716qaaa7t1gxod03e3g.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-30 16:46:39 | 显示全部楼层    本楼为最佳答案   
在你的代码中,flim变量在功能为1的部分被定义为一个字典,然后赋值给了database变量。但是在功能为2的部分,你使用了一个没有被定义的变量film来判断电影名称是否存在于字典中。

解决这个问题很简单,你只需要将film改为database即可。修改后的代码如下:

  1. print('欢迎进入鱼c影评小程序')
  2. print('1.数据录入')
  3. print('2.查询数据')
  4. print('3.退出程序')

  5. database = {}
  6. information_module = ['日期', '导演', '演员', '评分', '继续否']
  7. individual_information = []

  8. functions = int(input('请输入想要的功能(1/2/3): '))

  9. if functions == 1:
  10.     names = input('请输入电影名称:')
  11.     individual_information.append(input('请输入上映日期:'))
  12.     individual_information.append(input('请输入导演名字(多人请用/分隔):'))
  13.     individual_information.append(input('请输入演员名字(多人请用/分隔):'))
  14.     individual_information.append(input('请输入电影评分:'))
  15.     individual_information.append(input('请问是否继续录入:'))
  16.     film = dict(zip(information_module, individual_information))
  17.     database[names] = film

  18.     functions = int(input('请输入想要的功能(1/2/3): '))

  19. if functions == 2:
  20.     names = input('请输入电影名称:')
  21.     if names in database:
  22.         film = database[names]
  23.         print('电影名称:', names)
  24.         print('上映日期:', film['日期'])
  25.         print('导演名单:', film['导演'])
  26.         print('演员名单:', film['演员'])
  27.         print('当前评分:', film['评分'])
  28.     else:
  29.         for each in database.keys():
  30.             if names in each:
  31.                 film = database[each]
  32.                 print('电影名称:', each)
  33.                 print('上映日期:', film['日期'])
  34.                 print('导演名单:', film['导演'])
  35.                 print('演员名单:', film['演员'])
  36.                 print('当前评分:', film['评分'])
  37.                 break
  38.         else:
  39.             print('查无此片!')

  40. if functions == 3:
  41.     None
复制代码


至于如何测试Python程序的每个节点,可以使用Python中的调试器来逐行运行代码并查看变量值。常用的调试器有pdb和PyCharm等。你可以在需要进行调试的地方插入断点,然后运行程序时会停在断点处,使用调试器的命令来查看代码执行过程和变量的值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-30 16:50:27 | 显示全部楼层
你在录入电影信息时创建了一个字典 flim(实际应为film),但在查询数据时却使用了错误的变量名。


你可以把21,22行的flim改为film。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-30 17:04:32 | 显示全部楼层
陶远航 发表于 2024-1-30 16:50
你在录入电影信息时创建了一个字典 flim(实际应为film),但在查询数据时却使用了错误的变量名。

拼写错误,film写成了flim
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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