鱼C论坛

 找回密码
 立即注册
查看: 1378|回复: 7

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

[复制链接]
发表于 2022-3-18 14:44:38 | 显示全部楼层 |阅读模式

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

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

x
微信截图_20220318144237.png


我在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
最佳答案
2022-3-18 14:55:14
hunter魔术师 发表于 2022-3-18 14:53
不行,不是空格的问题,我加了没有变化。是这两个变量字体下面有背景色,正常来说没有的。


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

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

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

至多两个都没有赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-18 14:50:52 | 显示全部楼层
你在 == 两边加上空格就不会有那个波浪线了,

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

不符合 pep8 的规范就会有那个警告
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 14:53:53 | 显示全部楼层
isdkz 发表于 2022-3-18 14:50
你在 == 两边加上空格就不会有那个波浪线了,

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

不行,不是空格的问题,我加了没有变化。是这两个变量字体下面有背景色,正常来说没有的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 14:54:34 | 显示全部楼层
isdkz 发表于 2022-3-18 14:50
你在 == 两边加上空格就不会有那个波浪线了,

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

然而也运行不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-18 14:55:14 | 显示全部楼层    本楼为最佳答案   
hunter魔术师 发表于 2022-3-18 14:53
不行,不是空格的问题,我加了没有变化。是这两个变量字体下面有背景色,正常来说没有的。


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

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

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

至多两个都没有赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-3-18 16:11:30 | 显示全部楼层
isdkz 发表于 2022-3-18 16:08
因为答案在前面有给 id 和 name 赋初始值,

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

我知道了,感谢大神指点~!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 17:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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