鱼C论坛

 找回密码
 立即注册
查看: 1252|回复: 4

[已解决]UnboundLocalError: local variable 'input' referenced before assignment

[复制链接]
发表于 2022-2-15 20:04:00 | 显示全部楼层 |阅读模式

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

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

x
不知道哪里的问题
下面是错误 代码

Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/pythonProject/osfolderfile/112343455.py", line 100, in <module>
    main()
  File "C:/Users/Administrator/PycharmProjects/pythonProject/osfolderfile/112343455.py", line 25, in main
    insert()                                    #录入学生信息
  File "C:/Users/Administrator/PycharmProjects/pythonProject/osfolderfile/112343455.py", line 53, in insert
    ffff =input('请输入mtm(如1001):')
UnboundLocalError: local variable 'input' referenced before assignment
  1. """
  2. ---------------------------------
  3. test: rzbbzr
  4. test1: PyCharm
  5. test2: 112343455.py
  6. test3: 2022-02-15 19:49
  7. Pyinstaller -F  112343455.py
  8. py转jupyter %load xxxx.py
  9. pip install -i https://pypi.doubanio.com/simple/ 包名
  10. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +包名
  11. """
  12. filename='student.txt'
  13. def main():
  14.     while True:
  15.         menm()
  16.         choice=int(input("请选择"))
  17.         if choice==0:
  18.             answer=input("您确定要退出系统吗?y/n")
  19.             if answer=='y' or answer=='Y':
  20.                 print("谢谢您的使用!!!")
  21.                 break                                   #退出系统
  22.             else:
  23.                 continue
  24.         elif choice==1:
  25.             insert()                                    #录入学生信息
  26.         elif choice==2:
  27.             search()
  28.         elif choice==3:
  29.             delete()
  30.         elif choice==4:
  31.             modify()
  32.         elif choice==5:
  33.             sort()
  34.         elif choice==6:
  35.             total()
  36.         elif choice==7:
  37.             show()
  38. def menm():
  39.     print("============学生信息管理系统================")
  40.     print("------------功能菜单----------------------")
  41.     print("\t\t\t\t\t\t1.录入学生信息---------------")
  42.     print("\t\t\t\t\t\t2.查找学生信息-----------------")
  43.     print("\t\t\t\t\t\t3.删除学生信息---------------")
  44.     print("\t\t\t\t\t\t4.修改学生信息----------------")
  45.     print("\t\t\t\t\t\t5.排序---------------------")
  46.     print("\t\t\t\t\t\t6.统计学生总人数-------------")
  47.     print("\t\t\t\t\t\t7.显示所以学生信息------------")
  48.     print("\t\t\t\t\t\t0.退出--------------------")
  49.     print('-------------------------------------------------------')
  50. def insert():
  51.     student_list=[]
  52.     while True:
  53.         ffff =input('请输入mtm(如1001):')
  54.         if not ffff:
  55.             break1
  56.         name=input('请输入姓名:')
  57.         if not name:
  58.             break

  59.         try:
  60.             englist=int(input('请输入英语成绩:'))
  61.             python= int(input('请输入python成绩:'))
  62.             java= int(input('请输入java成绩:'))
  63.         except:
  64.             print('输入无效,不是整数类型,请重新输入')
  65.             continue
  66.         #将录入的学生信息保存到字典中
  67.         student={'id':id,'name':name,'english':english,'python':python,'java':java,}
  68.         #将学生信息添加到列表中
  69.         student_list.append(student)
  70.         answer=input=('是否继续添加?y/n\n')
  71.         if answer=='y':
  72.             continue
  73.         else:
  74.             break
  75.         #调用save()函数
  76.         save(student_list)
  77.         print('学生信息录入完毕!!!')
  78. def save(lst):
  79.     try:
  80.         stu_txt=open(filename,'a',encoding='utf-8')
  81.     except:
  82.         stu_txt = open(filename, 'w', encoding='utf-8')
  83.     for item in lst:
  84.         stu_txt.write(str(item)+'\n')
  85.     stu_txt.close()
  86. def search():
  87.     pass
  88. def delete():
  89.     pass
  90. def modify():
  91.     pass
  92. def sort():
  93.     pass
  94. def total():
  95.     pass
  96. def show():
  97.     pass
  98. if __name__ == '__main__':
  99.     main()
复制代码
最佳答案
2022-2-15 20:06:53
本帖最后由 isdkz 于 2022-2-15 21:00 编辑

第71行input后面多了一个等号

=是赋值,导致input成为了一个局部变量,而非内置函数input了,所以你前面用到input函数的时候,解释器就把它当成了局部变量input,局部变量在定义之前使用,自然就报错了


  1. """
  2. ---------------------------------
  3. test: rzbbzr
  4. test1: PyCharm
  5. test2: 112343455.py
  6. test3: 2022-02-15 19:49
  7. Pyinstaller -F  112343455.py
  8. py转jupyter %load xxxx.py
  9. pip install -i https://pypi.doubanio.com/simple/ 包名
  10. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +包名
  11. """
  12. filename='student.txt'
  13. def main():
  14.     while True:
  15.         menm()
  16.         choice=int(input("请选择"))
  17.         if choice==0:
  18.             answer=input("您确定要退出系统吗?y/n")
  19.             if answer=='y' or answer=='Y':
  20.                 print("谢谢您的使用!!!")
  21.                 break                                   #退出系统
  22.             else:
  23.                 continue
  24.         elif choice==1:
  25.             insert()                                    #录入学生信息
  26.         elif choice==2:
  27.             search()
  28.         elif choice==3:
  29.             delete()
  30.         elif choice==4:
  31.             modify()
  32.         elif choice==5:
  33.             sort()
  34.         elif choice==6:
  35.             total()
  36.         elif choice==7:
  37.             show()
  38. def menm():
  39.     print("============学生信息管理系统================")
  40.     print("------------功能菜单----------------------")
  41.     print("\t\t\t\t\t\t1.录入学生信息---------------")
  42.     print("\t\t\t\t\t\t2.查找学生信息-----------------")
  43.     print("\t\t\t\t\t\t3.删除学生信息---------------")
  44.     print("\t\t\t\t\t\t4.修改学生信息----------------")
  45.     print("\t\t\t\t\t\t5.排序---------------------")
  46.     print("\t\t\t\t\t\t6.统计学生总人数-------------")
  47.     print("\t\t\t\t\t\t7.显示所以学生信息------------")
  48.     print("\t\t\t\t\t\t0.退出--------------------")
  49.     print('-------------------------------------------------------')
  50. def insert():
  51.     student_list=[]
  52.     while True:
  53.         ffff =input('请输入mtm(如1001):')
  54.         if not ffff:
  55.             break                                                                                                   # 这里break多了一个1
  56.         name=input('请输入姓名:')
  57.         if not name:
  58.             break

  59.         try:
  60.             english=int(input('请输入英语成绩:'))                                                        # 这里把english写成了englist
  61.             python= int(input('请输入python成绩:'))
  62.             java= int(input('请输入java成绩:'))
  63.         except:
  64.             print('输入无效,不是整数类型,请重新输入')
  65.             continue
  66.         #将录入的学生信息保存到字典中
  67.         student={'id':ffff,'name':name,'english':english,'python':python,'java':java,}                    # 这里id改成ffff,因为你前面定义的变量名是ffff,你这里的id会被当成内置函数id()
  68.         #将学生信息添加到列表中
  69.         student_list.append(student)
  70.         answer=input('是否继续添加?y/n\n')                         # 这里把=去掉
  71.         if answer=='y':
  72.             continue
  73.         else:
  74.             save(student_list)
  75.             print('学生信息录入完毕!!!')
  76.             break
  77.         #调用save()函数
  78.         # save(student_list)                   # 把这两句放到else语句块里面,因为else里面break了,如果不放到else语句块里,这两句将没有执行的机会
  79.         # print('学生信息录入完毕!!!')                             
  80. def save(lst):
  81.     try:
  82.         stu_txt=open(filename,'a',encoding='utf-8')
  83.     except:
  84.         stu_txt = open(filename, 'w', encoding='utf-8')
  85.     for item in lst:
  86.         stu_txt.write(str(item)+'\n')
  87.     stu_txt.close()
  88. def search():
  89.     pass
  90. def delete():
  91.     pass
  92. def modify():
  93.     pass
  94. def sort():
  95.     pass
  96. def total():
  97.     pass
  98. def show():
  99.     pass
  100. if __name__ == '__main__':
  101.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-15 20:06:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-2-15 21:00 编辑

第71行input后面多了一个等号

=是赋值,导致input成为了一个局部变量,而非内置函数input了,所以你前面用到input函数的时候,解释器就把它当成了局部变量input,局部变量在定义之前使用,自然就报错了


  1. """
  2. ---------------------------------
  3. test: rzbbzr
  4. test1: PyCharm
  5. test2: 112343455.py
  6. test3: 2022-02-15 19:49
  7. Pyinstaller -F  112343455.py
  8. py转jupyter %load xxxx.py
  9. pip install -i https://pypi.doubanio.com/simple/ 包名
  10. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +包名
  11. """
  12. filename='student.txt'
  13. def main():
  14.     while True:
  15.         menm()
  16.         choice=int(input("请选择"))
  17.         if choice==0:
  18.             answer=input("您确定要退出系统吗?y/n")
  19.             if answer=='y' or answer=='Y':
  20.                 print("谢谢您的使用!!!")
  21.                 break                                   #退出系统
  22.             else:
  23.                 continue
  24.         elif choice==1:
  25.             insert()                                    #录入学生信息
  26.         elif choice==2:
  27.             search()
  28.         elif choice==3:
  29.             delete()
  30.         elif choice==4:
  31.             modify()
  32.         elif choice==5:
  33.             sort()
  34.         elif choice==6:
  35.             total()
  36.         elif choice==7:
  37.             show()
  38. def menm():
  39.     print("============学生信息管理系统================")
  40.     print("------------功能菜单----------------------")
  41.     print("\t\t\t\t\t\t1.录入学生信息---------------")
  42.     print("\t\t\t\t\t\t2.查找学生信息-----------------")
  43.     print("\t\t\t\t\t\t3.删除学生信息---------------")
  44.     print("\t\t\t\t\t\t4.修改学生信息----------------")
  45.     print("\t\t\t\t\t\t5.排序---------------------")
  46.     print("\t\t\t\t\t\t6.统计学生总人数-------------")
  47.     print("\t\t\t\t\t\t7.显示所以学生信息------------")
  48.     print("\t\t\t\t\t\t0.退出--------------------")
  49.     print('-------------------------------------------------------')
  50. def insert():
  51.     student_list=[]
  52.     while True:
  53.         ffff =input('请输入mtm(如1001):')
  54.         if not ffff:
  55.             break                                                                                                   # 这里break多了一个1
  56.         name=input('请输入姓名:')
  57.         if not name:
  58.             break

  59.         try:
  60.             english=int(input('请输入英语成绩:'))                                                        # 这里把english写成了englist
  61.             python= int(input('请输入python成绩:'))
  62.             java= int(input('请输入java成绩:'))
  63.         except:
  64.             print('输入无效,不是整数类型,请重新输入')
  65.             continue
  66.         #将录入的学生信息保存到字典中
  67.         student={'id':ffff,'name':name,'english':english,'python':python,'java':java,}                    # 这里id改成ffff,因为你前面定义的变量名是ffff,你这里的id会被当成内置函数id()
  68.         #将学生信息添加到列表中
  69.         student_list.append(student)
  70.         answer=input('是否继续添加?y/n\n')                         # 这里把=去掉
  71.         if answer=='y':
  72.             continue
  73.         else:
  74.             save(student_list)
  75.             print('学生信息录入完毕!!!')
  76.             break
  77.         #调用save()函数
  78.         # save(student_list)                   # 把这两句放到else语句块里面,因为else里面break了,如果不放到else语句块里,这两句将没有执行的机会
  79.         # print('学生信息录入完毕!!!')                             
  80. def save(lst):
  81.     try:
  82.         stu_txt=open(filename,'a',encoding='utf-8')
  83.     except:
  84.         stu_txt = open(filename, 'w', encoding='utf-8')
  85.     for item in lst:
  86.         stu_txt.write(str(item)+'\n')
  87.     stu_txt.close()
  88. def search():
  89.     pass
  90. def delete():
  91.     pass
  92. def modify():
  93.     pass
  94. def sort():
  95.     pass
  96. def total():
  97.     pass
  98. def show():
  99.     pass
  100. if __name__ == '__main__':
  101.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-15 20:11:08 | 显示全部楼层
本帖最后由 ckblt 于 2022-2-15 20:16 编辑
  1. """
  2. ---------------------------------
  3. test: rzbbzr
  4. test1: PyCharm
  5. test2: 112343455.py
  6. test3: 2022-02-15 19:49
  7. Pyinstaller -F  112343455.py
  8. py转jupyter %load xxxx.py
  9. pip install -i https://pypi.doubanio.com/simple/ 包名
  10. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +包名
  11. """
  12. filename = "student.txt"


  13. def main():
  14.     while True:
  15.         menm()
  16.         choice = int(input("请选择"))
  17.         if choice == 0:
  18.             answer = input("您确定要退出系统吗?y/n")
  19.             if answer == "y" or answer == "Y":
  20.                 print("谢谢您的使用!!!")
  21.                 break  # 退出系统
  22.             else:
  23.                 continue
  24.         elif choice == 1:
  25.             insert()  # 录入学生信息
  26.         elif choice == 2:
  27.             search()
  28.         elif choice == 3:
  29.             delete()
  30.         elif choice == 4:
  31.             modify()
  32.         elif choice == 5:
  33.             sort()
  34.         elif choice == 6:
  35.             total()
  36.         elif choice == 7:
  37.             show()


  38. def menm():
  39.     print("============学生信息管理系统================")
  40.     print("------------功能菜单----------------------")
  41.     print("\t\t\t\t\t\t1.录入学生信息---------------")
  42.     print("\t\t\t\t\t\t2.查找学生信息-----------------")
  43.     print("\t\t\t\t\t\t3.删除学生信息---------------")
  44.     print("\t\t\t\t\t\t4.修改学生信息----------------")
  45.     print("\t\t\t\t\t\t5.排序---------------------")
  46.     print("\t\t\t\t\t\t6.统计学生总人数-------------")
  47.     print("\t\t\t\t\t\t7.显示所以学生信息------------")
  48.     print("\t\t\t\t\t\t0.退出--------------------")
  49.     print("-------------------------------------------------------")


  50. def insert():
  51.     student_list = []
  52.     while True:
  53.         ffff = input("请输入mtm(如1001):")
  54.         if not ffff:
  55.             break
  56.         name = input("请输入姓名:")
  57.         if not name:
  58.             break

  59.         try:
  60.             english = int(input("请输入英语成绩:"))  # 单词拼写要正确
  61.             python = int(input("请输入python成绩:"))
  62.             java = int(input("请输入java成绩:"))
  63.         except:
  64.             print("输入无效,不是整数类型,请重新输入")
  65.             continue
  66.         # 将录入的学生信息保存到字典中
  67.         student = {
  68.             "id": id,
  69.             "name": name,
  70.             "english": english,
  71.             "python": python,
  72.             "java": java,
  73.         }
  74.         # 将学生信息添加到列表中
  75.         student_list.append(student)
  76.         answer = input("是否继续添加?y/n\n")
  77.         if answer == "y":
  78.             continue
  79.         else:
  80.             break
  81.         # 调用save()函数
  82.         save(student_list)
  83.         print("学生信息录入完毕!!!")


  84. def save(lst):
  85.     try:
  86.         stu_txt = open(filename, "a", encoding="utf-8")
  87.     except:
  88.         stu_txt = open(filename, "w", encoding="utf-8")
  89.     for item in lst:
  90.         stu_txt.write(str(item) + "\n")
  91.     stu_txt.close()


  92. def search():
  93.     pass


  94. def delete():
  95.     pass


  96. def modify():
  97.     pass


  98. def sort():
  99.     pass


  100. def total():
  101.     pass


  102. def show():
  103.     pass


  104. if __name__ == "__main__":
  105.     main()
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
swanseabrian + 1 + 1 谢谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-15 20:48:19 | 显示全部楼层
isdkz 发表于 2022-2-15 20:06
第71行input后面多了一个等号

=是赋值,导致input成为了一个局部变量,而非内置函数input了,所以你前面 ...

为啥提示53行,我去,找半天
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-15 20:53:00 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-15 20:57 编辑
swanseabrian 发表于 2022-2-15 20:48
为啥提示53行,我去,找半天


因为你第71行并不会引发错误,但是你第71行会导致第53行出现错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 05:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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