hunter魔术师 发表于 2022-3-18 14:44:38

条件判断中的变量有背景色,如何解决




我在pycharm中定义这个函数,为啥在xnu1和xnu2这里会出现问题呢,我检查了半天就是没看出啥毛病,我在这个函数外面也没有定义xnu这个变量呀,而且这个变量我改了很多个名字,都出现这种错误,请问如何解决??

def search():
    while True:
      num=int(input('按学号查找请输入1,按姓名查找请输入2'))
      if num==1:
            xnu1=int(input('请输入学号:'))
      elif num==2:
            xnu2=input('请输入学生姓名:')
      with open(filename,'r',encoding='utf-8') as rfile:
            stu1=rfile.readlines()
            for i in stu1:
                dic=dict(eval(i))
                if xnu1==dic['学号'] or xnu2==dic['姓名']:
                  t='{:^6}\t\t{:^8}\t\t{:^10}\t\t{:^8}\t\t{:^4}'
                  print(t.format(dic['学号'],dic['姓名'],dic['英语'],dic['python'],dic['Java']))
                else:
                  xx=input('没有查找到您输入的学号信息!!继续请按Y,退出请按N')
                  if xx=='n' or xx=='N':
                        break
                  else:
                        continue

isdkz 发表于 2022-3-18 14:50:52

你在 == 两边加上空格就不会有那个波浪线了,

之所以会有那个是因为 pychram 默认开启了 pep8 代码检查,

不符合 pep8 的规范就会有那个警告

hunter魔术师 发表于 2022-3-18 14:53:53

isdkz 发表于 2022-3-18 14:50
你在 == 两边加上空格就不会有那个波浪线了,

之所以会有那个是因为 pychram 默认开启了 pep8 代码检查 ...

不行,不是空格的问题,我加了没有变化。是这两个变量字体下面有背景色,正常来说没有的。

hunter魔术师 发表于 2022-3-18 14:54:34

isdkz 发表于 2022-3-18 14:50
你在 == 两边加上空格就不会有那个波浪线了,

之所以会有那个是因为 pychram 默认开启了 pep8 代码检查 ...

然而也运行不了

isdkz 发表于 2022-3-18 14:55:14

hunter魔术师 发表于 2022-3-18 14:53
不行,不是空格的问题,我加了没有变化。是这两个变量字体下面有背景色,正常来说没有的。

你的 xnu1 和 xnu2 的赋值 放在 if... elif ...里面,

满足 if 之后,elif 肯定不会执行,

也就是说 xnu1 和 xnu2 至少有一个不会被赋值,

至多两个都没有赋值

hunter魔术师 发表于 2022-3-18 16:05:28

isdkz 发表于 2022-3-18 14:55
你的 xnu1 和 xnu2 的赋值 放在 if... elif ...里面,

满足 if 之后,elif 肯定不会执行,


def search():
    while True:
      num=int(input('按学号查找请输入1,按姓名查找请输入2'))
      if num == 1:
            ids = int(input('请输入学号:'))
      elif num == 2:
            names = input('请输入学生姓名:')
      else:
            print('您输入的不正确')
            search()
      with open(filename, 'r', encoding='utf-8') as rfile:
            stu1 = rfile.readlines()
            for i in stu1:
                dic = dict(eval(i))
                if dic['学号'] == ids:
                  t = '{:^6}\t\t{:^8}\t\t{:^10}\t\t{:^8}\t\t{:^4}'
                  print(t.format(dic['学号'], dic['姓名'], dic['英语'], dic['python'], dic['Java']))
                elif names !="":
                  if dic['姓名'] == names:
                        t = '{:^6}\t\t{:^8}\t\t{:^10}\t\t{:^8}\t\t{:^4}'
                        print(t.format(dic['学号'], dic['姓名'], dic['英语'], dic['python'], dic['Java']))
                else:
                  xx = input('没有查找到您输入的学号信息!!继续请按Y,退出请按N')
                  if xx == 'n' or xx == 'N':
                        break
                  else:
                        continue
            else:
                print('您查找的学号不存在,请核实后再试')
                break


我把代码稍微改了一下,还是不行,可是我看公布的答案和我这差不多,怎么它那个就行了
答案如下:
def search():
    student_query=[]                  #保存查询结果的学生列表
    while True:
      id=''
      name=''
      if os.path.exists(filename):                        #判断文件是否存在
            mode=input('按ID查找请输入1,按姓名查询请输入2:')
            if mode=='1':
                id=input('请输入学生ID:')
            elif mode=='2':
                name=input('请输入学生姓名:')
            else:
                print('您的输入有误,请重新输入!!!')
                search()                                       #重新查询
            with open(filename,'r',encoding='utf-8') as rfile:   #打开文件
                student=rfile.readlines()                        #读取文件中全部内容
                for item in student:
                  d=dict(eval(item))                           #字符串转字典
                                                      #判断是否按ID查询
                  if d['id']==id:
                            student_query.append(d)            #将找到的学生信息保存到列表中

                  if d['name']==name:                   #判断是否按姓名查询
                            student_query.append(d)            #将找到的学生信息保存到列表中
            show_student(student_query)                      #显示查询结果
            student_query.clear()                            #清空列表
            answer=input('是否继续查询?y/n\n')
            if answer=='y':
               continue
            else:
               break
      else:
            print('暂未保存学生信息!!!')
            return

isdkz 发表于 2022-3-18 16:08:10

hunter魔术师 发表于 2022-3-18 16:05
def search():
    while True:
      num=int(input('按学号查找请输入1,按姓名查找请输入2'))


因为答案在前面有给 id 和 name 赋初始值,

所以即使条件语句没有执行,id 和 name 也不会出现 NameError

hunter魔术师 发表于 2022-3-18 16:11:30

isdkz 发表于 2022-3-18 16:08
因为答案在前面有给 id 和 name 赋初始值,

所以即使条件语句没有执行,id 和 name 也不会出现 NameEr ...

我知道了,感谢大神指点~!!!{:5_92:}
页: [1]
查看完整版本: 条件判断中的变量有背景色,如何解决