主頁 > 後端開發 > Python 自動化測驗的配置層實作方式對標與落地

Python 自動化測驗的配置層實作方式對標與落地

2023-06-17 07:24:35 後端開發

Python中什么是組態檔,組態檔如何使用,有哪些支持的組態檔等內容,話不多說,讓我們一起看看吧~

1 什么是組態檔?

組態檔是用于配置計算機程式的引數和初始化設定的檔案,如果沒有這些配置程式可能無法運行或是影響運行(運行速度、便捷性等),使用組態檔的好處在于,部分內容以及環境運行時只需要修改組態檔的引數內容,而無需去代碼里查找并修改,提高便捷性、提高可維護性,

2 組態檔有哪幾種?

配置主要有四種形式:

  1. 第一種是YAML、JSON、XML、TOML、INI、Linux系統中的.bashrc一類,主要應用于軟體測驗領域,在軟體測驗的領域行業中,大多數公司采用最新的YAML形式來作為組態檔,例如資料庫地址、用例資料等內容的存放,而少部分公司仍然采用舊的INI配置形式
  2. 第二種是excel表格的形式,在excel表格中會有固定的title代表每個欄位列的含義,有多列,以此來進行配置,多用于游戲領域中,在游戲行業大量使用excel表格的形式,已經是一個常態了,
  3. 第三種是py檔案,py檔案對于一個純Python專案而言是非常方便的,它不需要做資料的讀取操作,只需要進行匯入即可,不好的點在于,沒有YAML這一類靈活,YAML組態檔無論是Python、Java等語言,都是支持的,且資料型別支持很多,而py的組態檔,就只能用作于python,有一定的局限性,
  4. 第四種是txt文本格式,通過讀取的方式來識別到txt文本內容,通常而言是測開或者測驗工程師制作的簡便工具,供給業務層面的測驗人員進行使用,降低了YAML這種配置的理解難度,也避免了打開excel的緩慢,用輕量級txt來代替是一個不錯的選擇,

2.1 ini

python3自帶的ini
.ini 檔案是Initialization File的縮寫,即初始化檔案,是windows的系統組態檔所采用的存盤格式,統管windows的各項配置

2.1.1 ini檔案的定義

.ini 檔案通常由節(Section)、鍵(key)和值(value)組成,具體形式如下:

db.ini
[mysql]
host = 127.0.0.1
port = 3306
user = root
password = 123456
database = test

2.1.2 python讀取ini檔案

使用python內置的 configparser 標準庫進行決議ini檔案,
read() 讀取檔案內容 items() 獲取指定節的所有鍵值對

# -*- coding: utf-8 -*-
'''
 * @Author       : wxy
 * @Date         : 2022-08-24 11:11:06
 * @Description  : 讀取ini檔案
 * @LastEditTime : 2022-08-24 11:11:06
'''
from configparser import ConfigParser
from pprint import pprint
import pymysql


# ini檔案路徑
ini_file = './db.ini'
# 讀取ini的節(Section)
db_name = 'mysql'

# configparser實體化
text = ConfigParser()

# 讀取ini檔案內容
text.read(ini_file)

# text.items()回傳list,元素為tuple,元組格式為 key,value
db_tuple = text.items(db_name)
print(db_tuple)

# 將元組轉換成dict
db_dict = dict(text.items(db_name))
print(db_dict)

2.2 json

JSON(JavaScript Object Notation,) 是一種輕量級的資料交換格式,

2.2.1 json檔案的定義

簡單的json示例

  {
        "mysql": {
            "host": "127.0.0.1",
            "port": 3306,
            "user": "root",
            "password": "123456",
            "database": "test"
        }
    }

2.2.2 python讀取json檔案

load() 從json檔案中讀取json格式資料
loads() 將字串型別資料轉化為json格式資料
dump() 將json格式資料保存到檔案
dumps() 將json格式資料保存為字串型別

# -*- coding: utf-8 -*-
'''
 * @Author       : wxy
 * @Date         : 2022-8-24 11:39:44
 * @Description  : 讀取json檔案
 * @LastEditTime : 2022-8-24 11:39:44
'''

import json
from pprint import pprint
import pymysql

json_file = "./db.json"
db_name = "mysql"
web = "web"

with open(json_file) as f:
    cfg = json.load(f)[db_name]
    print(cfg)

with open(json_file) as f:
    cfg = json.load(f)[web]
    print(cfg['user'])

2.3 toml

TOML 是 Github 聯合創始人 Tom Preston-Werner 所提出的一種組態檔格式,是一種旨在成為一個小規模、易于使用的語意化的組態檔格式,它被設計為可以無二義性的轉換為一個哈希表,

2.3.1 定義toml檔案

語法:
TOML的語法廣泛地由key = “value”、[節名]、#注釋構成,
支持以下資料型別:字串、整形、浮點型、布爾型、日期時間、陣列和圖表,

 # db.toml
[mysql]
    [mysql.config]
    host     = "127.0.0.1"
    user     = "root"
    port     = 3306
    password = "123456"
    database = "test"

    [mysql.parameters]
    pool_size = 5
    charset   = "utf8"

    [mysql.fields]
    course_cols = ["cno", "cname", "ccredit", "cdept"]

2.3.2 python讀取toml檔案

使用外部庫 toml 決議toml檔案

# -*- coding: utf-8 -*-
'''
 * @Description  : 讀取toml檔案
 * @LastEditTime : 2022-08-14 11:31:07
'''
import toml
from pprint import pprint
import pymysql

toml_file = "./db.toml"

cfg = toml.load(toml_file)['mysql']

pprint(cfg)

2.4 yaml

YAML(YAML Ain’t a Markup Language”, YAML不是一種標記語言) 格式是目前較為流行的一種組態檔,它早在 2001 由一個名為 Clark Evans 的人提出;同時它也是目前被廣泛使用的組態檔型別,

2.4.1 定義yaml檔案

# db.yaml
mysql:
  config:
    host: "127.0.0.1"
    port: 3306
    user: "root"
    password: ""
    database: "stu_sys"

  parameters:
    pool_size: 5
    charset: "utf8"

  fileds:
    course_cols:
      - cno
      - cname
      - ccredit
      - cdept

2.4.2 python讀取yaml檔案

使用外部庫 pyyaml 決議toml檔案,

# -*- coding: utf-8 -*-
'''
 * @Author       : wxy
 * @Date         : 2022-8-24 11:34:37
 * @Description  : 讀取yaml檔案
 * @LastEditTime : 2022-8-24 11:34:37
'''
import yaml
from pprint import pprint
import pymysql

yaml_file = "./db.yaml"

with open(yaml_file, 'r') as f:
    cfg = yaml.safe_load(f)

print(cfg)

2.5 Python xlrd 讀取 操作Excel

python Excel庫對比

本次主要關注python xlrd讀取 操作excel

2.5.1 xlrd模塊介紹

1.什么是xlrd模塊?
python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫,

2.為什么使用xlrd模塊?
在UI自動化或者介面自動化中資料維護是一個核心,所以此模塊非常實用,
xlrd模塊可以用于讀取Excel的資料,速度非常快,推薦使用!
官方檔案:https://xlrd.readthedocs.io/en/latest/

2.5.2 安裝xlrd模塊

到python官網下載http://pypi.python.org/pypi/xlrd 模塊安裝,前提是已經安裝了python 環境,
或者在cmd視窗 pip install xlrd
最新的xlrd不支持Excel xlsx檔案的讀取,所以需要安裝舊版本 pip install xlrd==1.2.0

2.5.3 使用介紹

1.常用單元格的資料型別

  • empty(空的)
  • string(text)
  • number
  • date
  • boolean
  • error
  • blank(空白表格)

2.匯入模塊

import xlrd

3.打開Excel檔案讀取資料

data = https://www.cnblogs.com/jingdongkeji/p/xlrd.open_workbook(filename)#檔案名以及路徑,如果路徑或者檔案名有中文給前面加一個 r

4.常用的函式
excel中最重要的方法就是book和sheet的操作

  • 獲取book(excel檔案)中一個作業表
table = data.sheets()[0]             #通過索引順序獲取
table = data.sheet_by_index(sheet_indx)  #通過索引順序獲取
table = data.sheet_by_name(sheet_name)  #通過名稱獲取

# 以上三個函式都會回傳一個xlrd.sheet.Sheet()物件

names = data.sheet_names()        #回傳book中所有作業表的名字
data.sheet_loaded(sheet_name or indx)    # 檢查某個sheet是否匯入完畢

  • 行的操作
nrows = table.nrows
    # 獲取該sheet中的行數,注,這里table.nrows后面不帶().
table.row(rowx)
    # 回傳由該行中所有的單元格物件組成的串列,這與tabel.raw()方法并沒有區別,
table.row_slice(rowx)
    # 回傳由該行中所有的單元格物件組成的串列
table.row_types(rowx, start_colx=0, end_colx=None)
    # 回傳由該行中所有單元格的資料型別組成的串列;    
    # 回傳值為邏輯值串列,若型別為empy則為0,否則為1
table.row_values(rowx, start_colx=0, end_colx=None)
    # 回傳由該行中所有單元格的資料組成的串列
table.row_len(rowx)
    # 回傳該行的有效單元格長度,即這一行有多少個資料

  • 列(colnum)的操作
ncols = table.ncols
    # 獲取串列的有效列數
table.col(colx, start_rowx=0, end_rowx=None)
    # 回傳由該列中所有的單元格物件組成的串列
table.col_slice(colx, start_rowx=0, end_rowx=None)
    # 回傳由該列中所有的單元格物件組成的串列
table.col_types(colx, start_rowx=0, end_rowx=None)
    # 回傳由該列中所有單元格的資料型別組成的串列
table.col_values(colx, start_rowx=0, end_rowx=None)
    # 回傳由該列中所有單元格的資料組成的串列

  • 單元格的操作
table.cell(rowx,colx)
    # 回傳單元格物件
table.cell_type(rowx,colx)
    # 回傳對應位置單元格中的資料型別
table.cell_value(rowx,colx)
    # 回傳對應位置單元格中的資料

2.5.4 實戰訓練

使用xlrd模塊進行讀取:

import xlrd

xlsx = xlrd.open_workbook('./3_1 xlrd 讀取 操作練習.xlsx')

# 通過sheet名查找:xlsx.sheet_by_name("sheet1")
# 通過索引查找:xlsx.sheet_by_index(3)
table = xlsx.sheet_by_index(0)

# 獲取單個表格值 (2,1)表示獲取第3行第2列單元格的值
value = https://www.cnblogs.com/jingdongkeji/p/table.cell_value(2, 1)
print("第3行2列值為",value)

# 獲取表格行數
nrows = table.nrows
print("表格一共有",nrows,"行")

# 獲取第4列所有值(串列生成式)
name_list = [str(table.cell_value(i, 3)) for i in range(1, nrows)]
print("第4列所有的值:",name_list)

2.6 Python xlwt 寫入 操作Excel(僅限xls格式!)

xlwt可以用于寫入新的Excel表格或者在原表格基礎上進行修改,速度也很快,推薦使用!
官方檔案:https://xlwt.readthedocs.io/en/latest/

2.6.1 pip安裝xlwt

pip install xlwt

2.6.2 使用xlwt創建新表格并寫入

撰寫xlwt新表格寫入程式:

# 3.2.2 使用xlwt創建新表格并寫入
def fun3_2_2():
    # 創建新的workbook(其實就是創建新的excel)
    workbook = xlwt.Workbook(encoding= 'ascii')

    # 創建新的sheet表
    worksheet = workbook.add_sheet("My new Sheet")

    # 往表格寫入內容
    worksheet.write(0,0, "內容1")
    worksheet.write(2,1, "內容2")

    # 保存
    workbook.save("新創建的表格.xls")

2.6.3 xlwt 設定字體格式

程式示例:

# 3.2.3 xlwt設定字體格式
def fun3_2_3():
    # 創建新的workbook(其實就是創建新的excel)
    workbook = xlwt.Workbook(encoding= 'ascii')

    # 創建新的sheet表
    worksheet = workbook.add_sheet("My new Sheet")

    # 初始化樣式
    style = xlwt.XFStyle()

    # 創建字體樣式
    font = xlwt.Font()
    font.name = 'Times New Roman'   #字體
    font.bold = True                #加粗
    font.underline = True           #下劃線
    font.italic = True              #斜體

    # 設定樣式
    style.font = font
    # 往表格寫入內容
    worksheet.write(0,0, "內容1")
    worksheet.write(2,1, "內容2",style)
    # 保存
    workbook.save("新創建的表格.xls")
    # 設定列寬
    worksheet.col(0).width = 256*20
     # 設定行高
    style = xlwt.easyxf('font:height 360;')  # 18pt,型別小初的字號
    row = worksheet.row(0)
    row.set_style(style)
     # 合并 第1行到第2行 的 第0列到第3列
    worksheet.write_merge(1, 2, 0, 3, 'Merge Test')
      # 設定邊框樣式
    borders = xlwt.Borders()  # Create Borders
    borders.left = xlwt.Borders.DASHED
    borders.right = xlwt.Borders.DASHED
    borders.top = xlwt.Borders.DASHED
    borders.bottom = xlwt.Borders.DASHED
    borders.left_colour = 0x40
    borders.right_colour = 0x40
    borders.top_colour = 0x40
  borders.bottom_colour = 0x40

2.7 Python xlutils 修改 操作Excel

xlutils可用于拷貝原excel或者在原excel基礎上進行修改,并保存;
官方檔案:https://xlutils.readthedocs.io/en/latest/

2.7.1 pip安裝xlutils

pip install xlutils

2.7.2 xlutils拷貝源檔案(需配合xlrd使用)

程式示例:

# 3.3.2 拷貝源檔案
def fun3_3_2():
    workbook = xlrd.open_workbook('3_3 xlutils 修改操作練習.xlsx')  # 打開作業簿
    new_workbook = copy(workbook)  # 將xlrd物件拷貝轉化為xlwt物件
    new_workbook.save("new_test.xls")  # 保存作業簿

2.7.3 xlutils 讀取 寫入 (也就是修改)Excel 表格資訊

程式示例:

# 3.3.3 xlutils讀取 寫入 Excel 表格資訊
def fun3_3_3():
    # file_path:檔案路徑,包含檔案的全名稱
    # formatting_info=True:保留Excel的原格式(使用與xlsx檔案)
    workbook = xlrd.open_workbook('3_3 xlutils 修改操作練習.xlsx')

    new_workbook = copy(workbook)  # 將xlrd物件拷貝轉化為xlwt物件

    # 讀取表格資訊
    sheet = workbook.sheet_by_index(0)
    col2 = sheet.col_values(1)  # 取出第二列
    cel_value = https://www.cnblogs.com/jingdongkeji/p/sheet.cell_value(1, 1)
    print(col2)
    print(cel_value)

    # 寫入表格資訊
    write_save = new_workbook.get_sheet(0)
    write_save.write(0, 0,"xlutils寫入!")

    new_workbook.save("new_test.xls")  # 保存作業簿

2.8 Python xlwings 讀取 寫入 修改 操作Excel

2.8.1 pip安裝xlwings

pip install xlwings

2.8.2 基本操作

引入庫
import xlwings as xw
(1)打開已存在的Excel檔案

# 匯入xlwings模塊
import xlwings as xw

# 打開Excel程式,默認設定:程式可見,只打開不新建作業薄,螢屏更新關閉
app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False

# 檔案位置:filepath,打開test檔案,然后保存,關閉,結束程式
filepath=r'g:\Python Scripts\test.xlsx'
wb=app.books.open(filepath)
wb.save()
wb.close()
app.quit()

(2)新建Excel檔案,命名為test.xlsx,并保存在D盤

import xlwings as xw

app=xw.App(visible=True,add_book=False)
wb=app.books.add()
wb.save(r'd:\test.xlsx')
wb.close()
app.quit()

(3) xlwings 讀寫 Excel
新建test.xlsx,在sheet1的第一個單元格輸入 “人生” ,然后保存關閉,退出Excel程式,

def fun3_4_4():
    # 新建Excle 默認設定:程式可見,只打開不新建作業薄,螢屏更新關閉
    app = xw.App(visible=True, add_book=False)
    app.display_alerts = False
    app.screen_updating = False

    # 打開已存在的Excel檔案
    wb=app.books.open('./3_4 xlwings 修改操作練習.xlsx')

    # 獲取sheet物件
    print(wb.sheets)
    sheet = wb.sheets[0]
    # sheet = wb.sheets["sheet1"]

    # 讀取Excel資訊
    cellB1_value = https://www.cnblogs.com/jingdongkeji/p/sheet.range('B1').value
    print("單元格B1內容為:",cellB1_value)

    # 清除單元格內容和格式
    sheet.range('A1').clear()

    # 寫入單元格
    sheet.range('A1').value = "https://www.cnblogs.com/jingdongkeji/p/xlwings寫入"

    # 保存作業簿
    wb.save('example_3.xlsx')

    # 退出作業簿
    wb.close()

    # 退出Excel
    app.quit()l

2.9 Python openpyxl 讀取 寫入 修改 操作Excel

在openpyxl中,主要用到三個概念:Workbooks,Sheets,Cells,
Workbook就是一個excel作業表;
Sheet是作業表中的一張表頁;
Cell就是簡單的一個格,
openpyxl就是圍繞著這三個概念進行的,不管讀寫都是“三板斧”:打開Workbook,定位Sheet,操作Cell,
官方檔案:https://openpyxl.readthedocs.io/en/stable/
1.安裝
pip install openpyxl
2.打開檔案
(1)新建

from  openpyxl import  Workbook 
# 實體化
wb = Workbook()
# 激活 worksheet
ws = wb.active

(2)打開已有

from openpyxl  import load_workbook

wb = load_workbook('檔案名稱.xlsx')

3.寫入資料

# 方式一:資料可以直接分配到單元格中(可以輸入公式)
ws['A1'] = 42
# 方式二:可以附加行,從第一列開始附加(從最下方空白處,最左開始)(可以輸入多行)
ws.append([1, 2, 3])
# 方式三:Python 型別會被自動轉換
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")

4.創建表(sheet)

# 方式一:插入到最后(default)
ws1 = wb.create_sheet("Mysheet") 
# 方式二:插入到最開始的位置
ws2 = wb.create_sheet("Mysheet", 0)

5.選擇表(sheet)

# sheet 名稱可以作為 key 進行索引
>>> ws3 = wb["New Title"]
>>> ws4 = wb.get_sheet_by_name("New Title")
>>> ws is ws3 is ws4
True

6.查看表名(sheet)

# 顯示所有表名
>>> print(wb.sheetnames)
['Sheet2', 'New Title',  'Sheet1']
# 遍歷所有表
>>> for sheet in  wb:
...     print(sheet.title)

7.保存資料

wb.save('檔案名稱.xlsx')

8.其它
(1)改變sheet標簽按鈕顏色

ws.sheet_properties.tabColor = "1072BA" # 色值為RGB16進制值

(2)獲取最大行,最大列

# 獲得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)

(3)獲取每一行每一列
sheet.rows為生成器, 里面是每一行的資料,每一行又由一個tuple包裹,
sheet.columns類似,不過里面是每個tuple是每一列的單元格,

# 因為按行,所以回傳A1, B1, C1這樣的順序
for row in sheet.rows:
    for cell in row:
        print(cell.value)

# A1, A2, A3這樣的順序
for column in sheet.columns:
    for cell in column:
        print(cell.value)

(4)根據數字得到字母,根據字母得到數字

from openpyxl.utils import get_column_letter, column_index_from_string

# 根據列的數字回傳字母
print(get_column_letter(2))  # B
# 根據字母回傳列的數字
print(column_index_from_string('D'))  # 4

(5)洗掉作業表

# 方式一
wb.remove(sheet)
# 方式二
del wb[sheet]

專案實操—-UI自動化中實踐專案
需求:業務寫入揀貨容器,使用一次不可使用第二次,且腳本中固定讀取固定位置

import openpyxl
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
from openpyxl.utils import get_column_letter, column_index_from_string

# 向sheetobj中的columnname列從start_row開始寫入listdata
def insert_listdata_to_column(sheetobj,listdata,column_name,start_row=3):
    # 根據列名獲取列索引
    colindex = column_index_from_string(column_name)
    print('colindex為{}'.format(colindex))
    # 回圈從開始行數到資料寫入后最后一行
    for rowindex in range(start_row, start_row + len(listdata)):
        # 寫入list數值根據索引取值,從0開始
        val = listdata[rowindex - start_row]
        print('val{}'.format(val))
        print('rowindex{}'.format(rowindex))
        try:
            sheetobj.cell(row = rowindex,column = colindex,value = https://www.cnblogs.com/jingdongkeji/p/val)
        except:
            # 出現非法字符時,可以將字串的非法字符替換掉
            val = ILLEGAL_CHARACTERS_RE.sub(r'',val)
            sheetobj.cell(row = rowindex,column = colindex,value = https://www.cnblogs.com/jingdongkeji/p/val)
    delrow = start_row + len(listdata)
    print('*********{}'.format(delrow))
    sheetobj.delete_rows(delrow)


def del_excel():

    xlsx = xlrd.open_workbook(r'D:\pytest\inbound_data.xlsx')
    table =xlsx.sheet_by_index(2)
    # 獲取第2列所有值
    cel_value =https://www.cnblogs.com/jingdongkeji/p/table.col_values(1)
    cel_value=cel_value[3::]

    wb = openpyxl.load_workbook(r'D:\pytest\inbound_data.xlsx')
    sheet = wb["B2B出庫"]
    print(sheet)
    insert_listdata_to_column(sheet,cel_value,'B',3)
    wb.save(r'D:\pytest\inbound_data.xlsx')

del_excel()

3 總結

在本文中,簡單介紹了幾種組態檔和使用,根據不同的用例,復雜的工具/框架并不總是比簡單的軟體包更好,但無論選擇哪一種,都應始終考慮可讀性,可維護性以及如何盡早地發現錯誤,事實上,可以說組態檔只是另一種型別的代碼,可以根據自己的專案框架來靈活運用啦~

作者:京東物流 王小云

來源:京東云開發者社區

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555329.html

標籤:Python

上一篇:內網環境下批量安裝python庫

下一篇:返回列表

標籤雲
其他(161097) Python(38235) JavaScript(25498) Java(18244) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7254) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4599) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) 功能(1967) HtmlCss(1967) Web開發(1951) C++(1941) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Python 自動化測驗的配置層實作方式對標與落地

    Python中什么是組態檔,組態檔如何使用,有哪些支持的組態檔等內容,話不多說,讓我們一起看看吧~ ## 1 什么是組態檔? 組態檔是用于配置計算機程式的引數和初始化設定的檔案,如果沒有這些配置程式可能無法運行或是影響運行(運行速度、便捷性等),使用組態檔的好處在于,部分內容以及環境運行 ......

    uj5u.com 2023-06-17 07:24:35 more
  • 內網環境下批量安裝python庫

    最近組里安排了新內網,又要配環境。 眾所周知,內網安裝python庫需要先到www.pypi.org找到對應版本的包,然后再下載whl檔案,上傳到內網,再用`pip install "檔案地址"`去安裝。 這樣就會出現一個問題,鬼知道這個包需要的前置依賴是什么,pip會自動檢查前置依賴,然后自動從源 ......

    uj5u.com 2023-06-17 07:24:27 more
  • 如何有效管理爬蟲流量?

    本文分享自天翼云開發者社區《如何有效管理爬蟲流量?》,作者:劉****海 據國際知名金融廣告服務平臺提供商Dianomi的報告《2018 Robot traffic report》的資料,在互聯網上人類流量僅僅占了48.2%,也就是說,一個頁面的10000個點擊里面,大約5100個來自機器人。在航旅 ......

    uj5u.com 2023-06-17 07:24:15 more
  • Python初學者友好丨詳解引數傳遞型別

    摘要: 本文清晰地解釋了Python中的不同引數傳遞型別,并提供了示例代碼來說明每種型別的用法。對于初學者或不清楚Python傳參的讀者們來說是非常有益的,文中提供了足夠的資訊來理解和使用Python中的函式引數傳遞。 本文分享自華為云社區《提升Python函式呼叫靈活性:引數傳遞型別詳解》,作者: ......

    uj5u.com 2023-06-17 07:24:11 more
  • HTTP請求:requests模塊基礎使用必知必會

    http請求是常見的一種網頁協議,我們看到的各種網頁,其實都是發送了http請求得到了服務器的回應,從而將資料庫中復雜的資料以簡單、直觀的方式呈現出來,方便大眾閱讀、使用。而如何發送http請求呢?今天來探討一下使用requests模塊,達到高效、簡單的http請求操作。 ......

    uj5u.com 2023-06-17 07:24:07 more
  • 01. 組建知識星球服務體系

    ## 一、初衷: 因為想要進行各種技術點的訓練和學習,開發中需要使用各種各樣的開源技術框架,苦于沒有基礎服務支撐,所以想要建立一個專門的服務支撐系統,每年購買的云服務器配置底下,安裝一個Jenkins都跑不起來,所以自己購買了一個物理主機,記憶體加裝到`32G`,搭建自己的私人技術知識星球。 搭建一套 ......

    uj5u.com 2023-06-17 07:23:43 more
  • RabbitMQ快速使用代碼手冊

    本篇博客的內容為RabbitMQ在開發程序中的快速上手使用,側重于代碼部分,幾乎沒有相關概念的介紹,相關概念請參考以下csdn博客,兩篇都是我找的精華帖,供大家學習。本篇博客也持續更新~~~ ......

    uj5u.com 2023-06-17 07:23:38 more
  • Servlet重要類及其方法的應用

    # Servlet重要類及其方法的應用 ## Servlet重要類及其方法的應用 ### 1.1 HttpServlet的一些方法介紹 ```java // this.getInitParameter();得到初始化引數 // this.getServletConfig();得到servlet配置就 ......

    uj5u.com 2023-06-17 07:23:32 more
  • springBoot 自動裝配

    1.前言 自動裝配則是 SpringBoot 的核心,自動裝配是如何實作的呢?為什么我們只要引入一個 starter 組件依賴就能實作自動裝配呢,接下來就讓我們一起來探討下 SpringBoot 的自動裝配機制 2.自動裝配原理 提到自動裝配,那么你首先得知道spring的SPI(servicepr ......

    uj5u.com 2023-06-17 07:17:47 more
  • 【QCustomPlot】配置幫助檔案

    ## 說明 使用 QCustomPlot 繪圖庫輔助開發時整理的學習筆記。同系列文章目錄可見 [《繪圖庫 QCustomPlot 學習筆記》目錄](https://www.cnblogs.com/young520/p/17461129.html)。本篇介紹 QCustomPlot 幫助檔案的配置。 ......

    uj5u.com 2023-06-16 08:35:20 more