Python读取项目目录和子目录下的文件

我在functions文件夹下有个py,用来读取config目录里的配置文件,发现 ../config/config.json 报错文件不存在。

咨询了copilot之后,学习了需要用如下写法:

self.config_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'config/config.json')

 

好麻烦。

2021年河南省大学生国家安全知识竞赛一键满分脚本

欢迎

欢迎同学们再次来到紫旭Blog,本次给大家带来的是河南省大学生国家安全知识竞赛一键满分脚本。

警告

基于兴趣免费共享,禁止倒卖,我当然看不到你是不是在倒卖,但是作者在此立下诅咒:倒卖的户口本10天内挨个死。

使用方法

只需要修改最后一行的内容即可,如下所示

guoan.do(学校ID, '学号', '密码')

我会在下面将学校ID列表公布。

源码

注意:52pojie和本站发布的均为同一作者:紫旭网络

# -*- coding: utf-8 -*-

import requests
import random
import json
import time


class GuoAn(object):
    def __init__(self):
        self.s = requests.session()

    def do(self, school_id, student_id, password):
        self.login(school_id, student_id, password)

    def login(self, school_id, student_id, password):
        url = 'http://gjaqzsjs.haedu.cn/Login/auth'
        data = {
            'unit_code': school_id,
            'student_id': student_id,
            'password': password
        }

        result = self.s.post(url=url, data=data)
        result = json.loads(result.text)
        if result['code'] == 2000:
            print(f'{result["data"]["name"]},登录成功!')
            time.sleep(1)
            print(f'{result["data"]["name"]},即将提交答案!')
            time.sleep(1)
            self.submitAnswer()
            # 继续
        else:
            print(f'登录失败,{result["msg"]}')
            exit()

    def submitAnswer(self):
        url = 'http://gjaqzsjs.haedu.cn/Answer/submitAnswer'
        data = f'answer=%5B%7B%22number%22%3A%22383%22%2C%22answer%22%3A%22C%22%7D%2C%7B%22number%22%3A%227%22%2C%22answer%22%3A%22D%22%7D%2C%7B%22number%22%3A%2273%22%2C%22answer%22%3A%22B%22%7D%2C%7B%22number%22%3A%22127%22%2C%22answer%22%3A%22A%22%7D%2C%7B%22number%22%3A%22251%22%2C%22answer%22%3A%22C%22%7D%2C%7B%22number%22%3A%2247%22%2C%22answer%22%3A%22C%22%7D%2C%7B%22number%22%3A%22443%22%2C%22answer%22%3A%22A%22%7D%2C%7B%22number%22%3A%22515%22%2C%22answer%22%3A%22ABCD%22%7D%2C%7B%22number%22%3A%22638%22%2C%22answer%22%3A%22ABC%22%7D%2C%7B%22number%22%3A%22722%22%2C%22answer%22%3A%22BCD%22%7D%2C%7B%22number%22%3A%22609%22%2C%22answer%22%3A%22ABC%22%7D%2C%7B%22number%22%3A%22524%22%2C%22answer%22%3A%22ABCD%22%7D%2C%7B%22number%22%3A%22520%22%2C%22answer%22%3A%22ABCD%22%7D%2C%7B%22number%22%3A%22832%22%2C%22answer%22%3A%22B%22%7D%2C%7B%22number%22%3A%22996%22%2C%22answer%22%3A%22B%22%7D%2C%7B%22number%22%3A%22791%22%2C%22answer%22%3A%22B%22%7D%2C%7B%22number%22%3A%22796%22%2C%22answer%22%3A%22B%22%7D%2C%7B%22number%22%3A%221000%22%2C%22answer%22%3A%22A%22%7D%2C%7B%22number%22%3A%22883%22%2C%22answer%22%3A%22B%22%7D%2C%7B%22number%22%3A%221048%22%2C%22answer%22%3A%22B%22%7D%5D&use_time={random.randint(60, 180)}'
        headers = {
            'Content-Type': 'application/x-www-form-urlencoded'
        }

        result = self.s.post(url=url, data=data, headers=headers)
        # print(result.text)
        result = json.loads(result.text)
        if result['code'] == 4600:
            print(f'答题完成!')
            exit()
        else:
            print(f'答题失败,{result["msg"]}')
            exit()


if __name__ == '__main__':
    guoan = GuoAn()
    guoan.do(7, 'test0006', '123456')

学校ID列表

可以用Ctrl + F查找你的学校,你学校对应的code即为学校ID

[{
"code": "1",
"char": "安阳工学院",
"type": "1",
"type_char": "本科"
}, {
"code": "2",
"char": "安阳师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "3",
"char": "安阳学院",
"type": "1",
"type_char": "本科"
}, {
"code": "4",
"char": "河南财经政法大学",
"type": "1",
"type_char": "本科"
}, {
"code": "5",
"char": "河南财政金融学院",
"type": "1",
"type_char": "本科"
}, {
"code": "6",
"char": "河南城建学院",
"type": "1",
"type_char": "本科"
}, {
"code": "7",
"char": "河南大学",
"type": "1",
"type_char": "本科"
}, {
"code": "8",
"char": "河南工程学院",
"type": "1",
"type_char": "本科"
}, {
"code": "9",
"char": "河南工学院",
"type": "1",
"type_char": "本科"
}, {
"code": "10",
"char": "河南工业大学",
"type": "1",
"type_char": "本科"
}, {
"code": "11",
"char": "河南警察学院",
"type": "1",
"type_char": "本科"
}, {
"code": "12",
"char": "河南开封科技传媒学院",
"type": "1",
"type_char": "本科"
}, {
"code": "13",
"char": "河南科技大学",
"type": "1",
"type_char": "本科"
}, {
"code": "14",
"char": "河南科技学院",
"type": "1",
"type_char": "本科"
}, {
"code": "15",
"char": "河南科技学院新科学院",
"type": "1",
"type_char": "本科"
}, {
"code": "16",
"char": "河南科技职业大学",
"type": "1",
"type_char": "本科"
}, {
"code": "17",
"char": "河南理工大学",
"type": "1",
"type_char": "本科"
}, {
"code": "18",
"char": "河南牧业经济学院",
"type": "1",
"type_char": "本科"
}, {
"code": "19",
"char": "河南农业大学",
"type": "1",
"type_char": "本科"
}, {
"code": "20",
"char": "河南师范大学",
"type": "1",
"type_char": "本科"
}, {
"code": "21",
"char": "河南中医药大学",
"type": "1",
"type_char": "本科"
}, {
"code": "22",
"char": "华北水利水电大学",
"type": "1",
"type_char": "本科"
}, {
"code": "23",
"char": "黄河交通学院",
"type": "1",
"type_char": "本科"
}, {
"code": "24",
"char": "黄河科技学院",
"type": "1",
"type_char": "本科"
}, {
"code": "25",
"char": "黄淮学院",
"type": "1",
"type_char": "本科"
}, {
"code": "26",
"char": "洛阳理工学院",
"type": "1",
"type_char": "本科"
}, {
"code": "27",
"char": "洛阳师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "28",
"char": "南阳理工学院",
"type": "1",
"type_char": "本科"
}, {
"code": "29",
"char": "南阳师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "30",
"char": "平顶山学院",
"type": "1",
"type_char": "本科"
}, {
"code": "31",
"char": "商丘工学院",
"type": "1",
"type_char": "本科"
}, {
"code": "32",
"char": "商丘师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "33",
"char": "商丘学院",
"type": "1",
"type_char": "本科"
}, {
"code": "34",
"char": "新乡学院",
"type": "1",
"type_char": "本科"
}, {
"code": "35",
"char": "新乡医学院",
"type": "1",
"type_char": "本科"
}, {
"code": "36",
"char": "新乡医学院三全学院",
"type": "1",
"type_char": "本科"
}, {
"code": "37",
"char": "信阳农林学院",
"type": "1",
"type_char": "本科"
}, {
"code": "38",
"char": "信阳师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "39",
"char": "信阳学院",
"type": "1",
"type_char": "本科"
}, {
"code": "40",
"char": "许昌学院",
"type": "1",
"type_char": "本科"
}, {
"code": "41",
"char": "郑州财经学院",
"type": "1",
"type_char": "本科"
}, {
"code": "42",
"char": "郑州大学",
"type": "1",
"type_char": "本科"
}, {
"code": "43",
"char": "郑州工程技术学院",
"type": "1",
"type_char": "本科"
}, {
"code": "44",
"char": "郑州工商学院",
"type": "1",
"type_char": "本科"
}, {
"code": "45",
"char": "郑州工业应用技术学院",
"type": "1",
"type_char": "本科"
}, {
"code": "46",
"char": "郑州航空工业管理学院",
"type": "1",
"type_char": "本科"
}, {
"code": "47",
"char": "郑州经贸学院",
"type": "1",
"type_char": "本科"
}, {
"code": "48",
"char": "郑州科技学院",
"type": "1",
"type_char": "本科"
}, {
"code": "49",
"char": "郑州轻工业大学",
"type": "1",
"type_char": "本科"
}, {
"code": "50",
"char": "郑州商学院",
"type": "1",
"type_char": "本科"
}, {
"code": "51",
"char": "郑州升达经贸管理学院",
"type": "1",
"type_char": "本科"
}, {
"code": "52",
"char": "郑州师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "53",
"char": "郑州西亚斯学院",
"type": "1",
"type_char": "本科"
}, {
"code": "54",
"char": "中原工学院",
"type": "1",
"type_char": "本科"
}, {
"code": "55",
"char": "中原科技学院",
"type": "1",
"type_char": "本科"
}, {
"code": "56",
"char": "周口师范学院",
"type": "1",
"type_char": "本科"
}, {
"code": "57",
"char": "安阳幼儿师范高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "58",
"char": "安阳职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "59",
"char": "长垣烹饪职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "60",
"char": "河南测绘职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "61",
"char": "河南地矿职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "62",
"char": "河南对外经济贸易职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "63",
"char": "河南工业和信息化职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "64",
"char": "河南工业贸易职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "65",
"char": "河南工业职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "66",
"char": "河南护理职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "67",
"char": "河南机电职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "68",
"char": "河南检察职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "69",
"char": "河南建筑职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "70",
"char": "河南交通职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "71",
"char": "河南经贸职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "72",
"char": "河南林业职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "73",
"char": "河南农业职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "74",
"char": "河南女子职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "75",
"char": "河南轻工职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "76",
"char": "河南水利与环境职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "77",
"char": "河南司法警官职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "78",
"char": "河南推拿职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "79",
"char": "河南物流职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "80",
"char": "河南信息统计职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "81",
"char": "河南医学高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "82",
"char": "河南艺术职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "83",
"char": "河南应用技术职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "84",
"char": "河南职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "85",
"char": "河南质量工程职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "86",
"char": "鹤壁能源化工职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "87",
"char": "鹤壁汽车工程职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "88",
"char": "鹤壁职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "89",
"char": "黄河水利职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "90",
"char": "济源职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "91",
"char": "焦作大学",
"type": "2",
"type_char": "专科"
}, {
"code": "92",
"char": "焦作工贸职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "93",
"char": "焦作师范高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "94",
"char": "开封大学",
"type": "2",
"type_char": "专科"
}, {
"code": "95",
"char": "开封文化艺术职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "96",
"char": "兰考三农职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "97",
"char": "林州建筑职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "98",
"char": "洛阳科技职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "99",
"char": "洛阳职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "100",
"char": "漯河食品职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "101",
"char": "漯河医学高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "102",
"char": "漯河职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "103",
"char": "南阳科技职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "104",
"char": "南阳农业职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "105",
"char": "南阳医学高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "106",
"char": "南阳职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "107",
"char": "平顶山工业职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "108",
"char": "平顶山职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "109",
"char": "濮阳石油化工职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "110",
"char": "濮阳医学高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "111",
"char": "濮阳职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "112",
"char": "汝州职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "113",
"char": "三门峡社会管理职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "114",
"char": "三门峡职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "115",
"char": "商丘医学高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "116",
"char": "商丘职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "117",
"char": "嵩山少林武术职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "118",
"char": "新乡职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "119",
"char": "信阳航空职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "120",
"char": "信阳涉外职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "121",
"char": "信阳职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "122",
"char": "许昌电气职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "123",
"char": "许昌陶瓷职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "124",
"char": "许昌职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "125",
"char": "永城职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "126",
"char": "郑州财税金融职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "127",
"char": "郑州城市职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "128",
"char": "郑州电力高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "129",
"char": "郑州电力职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "130",
"char": "郑州电子商务职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "131",
"char": "郑州电子信息职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "132",
"char": "郑州工业安全职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "133",
"char": "郑州轨道工程职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "134",
"char": "郑州黄河护理职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "135",
"char": "郑州理工职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "136",
"char": "郑州旅游职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "137",
"char": "郑州商贸旅游职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "138",
"char": "郑州澍青医学高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "139",
"char": "郑州体育职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "140",
"char": "郑州铁路职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "141",
"char": "郑州卫生健康职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "142",
"char": "郑州信息工程职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "143",
"char": "郑州信息科技职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "144",
"char": "郑州亚欧交通职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "145",
"char": "郑州幼儿师范高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "146",
"char": "郑州职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "147",
"char": "周口职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "148",
"char": "驻马店幼儿师范高等专科学校",
"type": "2",
"type_char": "专科"
}, {
"code": "149",
"char": "驻马店职业技术学院",
"type": "2",
"type_char": "专科"
}, {
"code": "150",
"char": "信阳艺术职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "151",
"char": "周口文理职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "152",
"char": "洛阳文化旅游职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "153",
"char": "郑州城建职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "154",
"char": "郑州医药健康职业学院",
"type": "2",
"type_char": "专科"
}, {
"code": "155",
"char": "铁道警察学院",
"type": "2",
"type_char": "专科"
}, {
"code": "156",
"char": "郑州大学体育学院",
"type": "2",
"type_char": "专科"
}]

 

河南宗教知识竞赛加密算法分析(第二篇)

上回说到

请先看第一回:https://blog.zixutech.cn/archives/664

本回

由于官方2天更新了7次,尤其是今天更新了4次,我人直接裂开,官方没有采用我的强加密手段,而是继续乱jb加密,但是更新频次如此之快,我也懒得搞了,本篇文章主要是分享一下期间几次更新的加解密算法,别说还挺有创意的。

算法代码

我已添加了详细的注释供读者们阅读学习,对代码有疑问可以评论提出。

// 宗教答题第2~5次更新的加密函数
        function encrypt(content) {
            // content 是要加密的值,宗教里就是题号 如1000065

            // 随机字符串 + # + 题号,拼接后进行base64编码
            content = window.btoa('1688106372619ddf853ddce845744766#' + content)
            // code是要穿插在上述content里的内容,其内容是用户ID(需经过base64解码)和csmpagerid(不知道这到底是啥)
            let code = window.atob(memberusercode) + csmpagerid;
            // 开始将code穿插进content进行混淆
            for (let i = 0; i < code.length; i++) {
                // 在1 3 5 7 9 ··· 索引位置逐位插入code的内容
                content = content.slice(0, 2 * i + 1) + code.slice(i, i + 1) + content.slice(2 * i + 1);
            }
            // 因为content是经过base64编码的,所以其最后可能会出现=== == =这样的,如果有则替换为特定的字符串,这里是O0O0OO0O0O
            // 如果没有,则直接在后面加上这个O0O0OO0O0O
            if (content.indexOf('===') == -1 && content.indexOf('==') == -1 && content.indexOf('=') == -1) {
                content += 'O0O0OO0O0O';
            } else {
                content = content.replace('===', 'O0O0OO0O0O');
                content = content.replace('==', 'O0O0OO0O0O');
                content = content.replace('=', 'O0O0OO0O0O');
            }
            // 加密完成,返回数据
            // console.log(content)
            return content;
        }

        // 宗教答题第2~5次更新的解密函数
        function decrypt(content) {
            // content 要解密的内容,一般是题号,解密前的样子大概是
            // M1T0A000N6j0I844N3j2c1y4M1T9Y8x8O5W9R8j0N6W1I9xdOcG5Qbx1N8zcIc4dM4z1I045M3j4Q240N7T1IjMTAwMDAwOQO0O0OO0O0O

            // 设计一个新的字符串用来当做解密后的字符串
            let newStr = ''
            // 逐位循环去除混淆
            for (let i = 0; i < content.length; i++) {
                // 42的意思是,用户ID的长度和csmpagerid的长度一共是42位,所以只需要去除42个字符即可
                if (i >= 42) {
                    // 循环次数大于等于42后,直接不再裁剪,而是拼接最后所有字符串
                    newStr += content.slice(2 * i)
                    break
                }
                // 裁剪字符串,把第0 2 4 6 8 10 ··· 位的混淆字符删掉
                newStr += content.slice(2 * i, 2 * i + 1)
            }
            // 将结果进行base64解码,至此解密完成
            newStr = window.atob(newStr)
            // console.log(newStr)
        }

结语

官方更新是好事,但是也请一次更新到位,用最好的技术来应对作弊,或者能给学生们一份题库用来背,也能达到学习的目的。

希望世上再无形式主义!

ElementUI的select组件的option的label slot里的错位问题

标题很拗口,但是就是这个意思。

问题

本问题实际描述是,当使用select组件,并且为option使用了插槽之后,像官方里的那样使用style=”float: right;” 后 导致错位,如下图所示

右边的tag贴顶了,但是返回去看官方文档里的代码,却没有问题。

仔细看官方的例子,官方在插槽里用的是纯文本<span></span>,而el-tag也会自动转为span,但依然是样式错误。

在此省略一系列尝试之后,终于发现解决办法,特此记录,以便自己和其他有相同问题的朋友查阅。

解决

在el-tag的外层加一个空格即可解决问题,注意不是键盘上的space,而是

&nbsp;

此时错位问题完美解决!

从现在起,我是祖国绿色能源的使者

3年的准备和不懈努力,终于在2021圆梦。

博主现已加入国家电网,希望大家都能实现自己的梦想!

python3 sorted的一个坑

简单记录一下。

有段时间没碰python了,国网结束之后现在开新坑,被sorted坑了,特此记录。

有一个字典dict需要排序,但是排序后先是遇到排序无效,后是遍历时报错

遍历代码:

for key, value in params.items():
    if value and not value == '' or value == 0:
        sign += str(key) + '=' + str(value) + '&'

检查后发现,是以下地方出问题

1、sorted需要赋值而不是像dict.sort一样直接就变了。忘了赋值。

2、dict在sorted之后变成了list,需要转回dict,直接dict(sorted_list)即可

唉,好久不写这么简单的代码都忘了,手生了。