[{"data":1,"prerenderedAt":1392},["ShallowReactive",2],{"tag-大学旧笔记":3},[4,427,909],{"id":5,"title":6,"body":7,"date":413,"description":414,"draft":415,"extension":416,"meta":417,"navigation":418,"path":419,"seo":420,"stem":421,"summary":422,"tags":423,"__hash__":426},"posts\u002Fposts\u002Funiversity-php-notes.md","大学里学 PHP 记的那几页",{"type":8,"value":9,"toc":404},"minimark",[10,26,31,48,77,82,103,125,128,144,148,262,265,273,276,288,313,340,343,400],[11,12,13],"blockquote",{},[14,15,16,17,21,22,25],"p",{},"这篇是 2021 年 11 月记的。当时散在好几条笔记里，这里并成了一篇，原文照抄，拼错的库名（",[18,19,20],"code",{},"guzzie","、",[18,23,24],{},"amsey UUID","）也留着。",[27,28,30],"h2",{"id":29},"装环境先从扩展开始","装环境，先从扩展开始",[32,33,34,38,41],"ul",{},[35,36,37],"li",{},"装不上很大一部分原因是 php 扩展没启动，mbstring、dom 都要启动。",[35,39,40],{},"指令没响应是没有加 path。",[35,42,43,44,47],{},"php-pdo、php-mysql 这些都要手动装，用 ",[18,45,46],{},"phpenmod"," 来启用：",[49,50,55],"pre",{"className":51,"code":52,"language":53,"meta":54,"style":54},"language-bash shiki shiki-themes github-light github-dark","phpenmod gd\nphpenmod pdo_mysql\n","bash","",[18,56,57,69],{"__ignoreMap":54},[58,59,62,65],"span",{"class":60,"line":61},"line",1,[58,63,46],{"class":64},"sScJk",[58,66,68],{"class":67},"sZZnC"," gd\n",[58,70,72,74],{"class":60,"line":71},2,[58,73,46],{"class":64},[58,75,76],{"class":67}," pdo_mysql\n",[32,78,79],{},[35,80,81],{},"全局指令的 path：",[49,83,85],{"className":51,"code":84,"language":53,"meta":54,"style":54},"export PATH=$PATH:$HOME\u002F.config\u002F.composer\u002Fvendor\u002Fbin\n",[18,86,87],{"__ignoreMap":54},[58,88,89,93,97,100],{"class":60,"line":61},[58,90,92],{"class":91},"szBVR","export",[58,94,96],{"class":95},"sVt8B"," PATH",[58,98,99],{"class":91},"=",[58,101,102],{"class":95},"$PATH:$HOME\u002F.config\u002F.composer\u002Fvendor\u002Fbin\n",[32,104,105,108,118],{},[35,106,107],{},"我也不知道是第几次学了。算了算了再学一遍。",[35,109,110,113,114,117],{},[18,111,112],{},"\"\""," 能插值，",[18,115,116],{},"''"," 不能插。",[35,119,120,121,124],{},"comment 用 ",[18,122,123],{},"\u002F\u002F"," 就好了。别的也支持但是就用这个。",[27,126,127],{"id":127},"composer",[32,129,130,133],{},[35,131,132],{},"getcomposer repository 里头找安装文件。才五百多个星，一个包管理器就这点，这是否",[35,134,135,21,138,21,141],{},[18,136,137],{},"composer require",[18,139,140],{},"composer update",[18,142,143],{},"composer global require",[27,145,147],{"id":146},"从-js-找-php-的对应库","从 JS 找 PHP 的对应库",[149,150,151,164],"table",{},[152,153,154],"thead",{},[155,156,157,161],"tr",{},[158,159,160],"th",{},"在 JS 里用惯的",[158,162,163],{},"PHP 这边的对应",[165,166,167,176,183,191,199,207,214,222,230,238,246,254],"tbody",{},[155,168,169,173],{},[170,171,172],"td",{},"lodash",[170,174,175],{},"radash",[155,177,178,181],{},[170,179,180],{},"axios",[170,182,20],{},[155,184,185,188],{},[170,186,187],{},"dayjs",[170,189,190],{},"carbon",[155,192,193,196],{},[170,194,195],{},"docx",[170,197,198],{},"phpword",[155,200,201,204],{},[170,202,203],{},"nodemailer",[170,205,206],{},"phpmailer",[155,208,209,212],{},[170,210,211],{},"uuid",[170,213,24],{},[155,215,216,219],{},[170,217,218],{},"crypto-js",[170,220,221],{},"builtin",[155,223,224,227],{},[170,225,226],{},"exceljs",[170,228,229],{},"phpspreadsheet",[155,231,232,235],{},[170,233,234],{},"fastq",[170,236,237],{},"symfony messenger \u002F laravel",[155,239,240,243],{},[170,241,242],{},"orm",[170,244,245],{},"doctrine orm \u002F eloquent orm",[155,247,248,251],{},[170,249,250],{},"zod",[170,252,253],{},"symfony validator \u002F respect validateion",[155,255,256,259],{},[170,257,258],{},"validate",[170,260,261],{},"WebGeeker-Validation",[27,263,264],{"id":264},"thinkphp",[32,266,267],{},[35,268,269,272],{},[18,270,271],{},"imagecreate()"," 找不到，要装 php-gd。",[27,274,275],{"id":275},"laravel",[32,277,278,285],{},[35,279,280,281,284],{},"create 之后要 ",[18,282,283],{},"composer install","。",[35,286,287],{},"sanctum：",[49,289,291],{"className":51,"code":290,"language":53,"meta":54,"style":54},"php artisan session:table\nphp artisan migrate\n",[18,292,293,304],{"__ignoreMap":54},[58,294,295,298,301],{"class":60,"line":61},[58,296,297],{"class":64},"php",[58,299,300],{"class":67}," artisan",[58,302,303],{"class":67}," session:table\n",[58,305,306,308,310],{"class":60,"line":71},[58,307,297],{"class":64},[58,309,300],{"class":67},[58,311,312],{"class":67}," migrate\n",[32,314,315,318,327,334],{},[35,316,317],{},"csrf 要放 header 不然 laravel 这头猪不认。",[35,319,320,323,324,284],{},[18,321,322],{},"auth.php"," 里 ",[18,325,326],{},"guards.api.driver = sanctum",[35,328,329,323,331,284],{},[18,330,322],{},[18,332,333],{},"defaults.guard = web",[35,335,336,337,284],{},"User model extends ",[18,338,339],{},"Illuminate\\Foundation\\Auth\\User",[27,341,342],{"id":342},"现在回头看",[32,344,345,367,378,386],{},[35,346,347,348,350,351,354,355,350,357,354,360,350,363,366],{},"库名拼错了一堆：",[18,349,20],{}," 是 ",[18,352,353],{},"guzzle","，",[18,356,24],{},[18,358,359],{},"ramsey\u002Fuuid",[18,361,362],{},"respect validateion",[18,364,365],{},"Respect\\Validation","。当时全靠手打，一个都没查。",[35,368,369,370,373,374,377],{},"「csrf 要放 header」：Laravel 的 ",[18,371,372],{},"api"," 路由本来就不套 CSRF 中间件，我那时候多半是把 API 路由写进了 ",[18,375,376],{},"web"," 组，才一路撞到 419。",[35,379,380,382,383,284],{},[18,381,46],{}," 是 Debian 系才有的一套；换个发行版就得自己去改 ",[18,384,385],{},"php.ini",[35,387,388,389,392,393,395,396,399],{},"thinkphp 那条：装完 ",[18,390,391],{},"php-gd"," 还得确认 ",[18,394,385],{}," 里的 ",[18,397,398],{},"extension=gd"," 没被注释掉，不然一样报找不到函数。",[401,402,403],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":54,"searchDepth":405,"depth":405,"links":406},3,[407,408,409,410,411,412],{"id":29,"depth":71,"text":30},{"id":127,"depth":71,"text":127},{"id":146,"depth":71,"text":147},{"id":264,"depth":71,"text":264},{"id":275,"depth":71,"text":275},{"id":342,"depth":71,"text":342},"2021-11-07","学 PHP 时的几条笔记：扩展得自己开、composer 怎么用、一份 JS 到 PHP 的库对照表，还有 thinkphp 和 laravel 的零碎。",false,"md",{},true,"\u002Fposts\u002Funiversity-php-notes",{"title":6,"description":414},"posts\u002Funiversity-php-notes","从装环境到挑库，按 JS 的习惯找 PHP 的对应物，库名拼错了一堆。",[424,425],"PHP","大学旧笔记","HEXnnKFrYIhvvqu3fsyhQjRhwafbXlOApJFYO67IoIs",{"id":428,"title":429,"body":430,"date":898,"description":899,"draft":415,"extension":416,"meta":900,"navigation":418,"path":901,"seo":902,"stem":903,"summary":904,"tags":905,"__hash__":908},"posts\u002Fposts\u002Funiversity-excel-vba-macro.md","大学时写的第一段宏：比对 Excel 的两列",{"type":8,"value":431,"toc":895},[432,449,452,828,830,892],[11,433,434],{},[14,435,436,437,440,441,444,445,448],{},"这篇是 2020 年 6 月记的，大学里第一次为了一张表去写宏。代码原样贴着：",[18,438,439],{},"MsgBox"," 当调试输出、",[18,442,443],{},"Dim"," 写在循环里、变量名叫 ",[18,446,447],{},"dontknow","，都没动。",[14,450,451],{},"要做的事：选中两列，从第一行往下逐字对齐比较，哪里不一样，就把后面的内容弹出来。",[49,453,457],{"className":454,"code":455,"language":456,"meta":54,"style":54},"language-vb shiki shiki-themes github-light github-dark","Function diffcell(cell1 As Range, cell2 As Range)\n    Dim str1 As String, str2 As String\n    str1 = cell1.Text\n    str2 = cell2.Text\n    Dim i As Integer, j As Integer\n    i = 1\n    j = 1\n    While i \u003C> Len(str1) And j \u003C> Len(str2)\n        If Mid(str1, i, 1) = Mid(str2, j, 1) Then\n            i = i + 1\n            j = j + 1\n        Else\n            Dim afterward1 As String, afterward2 As String\n            afterward1 = Mid(str1, i)\n            afterward2 = Mid(str2, j)\n            Dim foundIdx1 As Integer, foundIdx2 As Integer\n            foundIdx1 = InStr(i, str1, afterward2)\n            foundIdx2 = InStr(j, str2, afterward2)\n            MsgBox Mid(str1, foundIdx1 - i)\n\n            If foundIdx1 \u003C foundIdx2 Then\n                MsgBox Mid(str1, foundIdx1 - i)\n                i = foundIdx1\n            Else\n                MsgBox Mid(str2, foundIdx2 - j)\n                j = foundIdx2\n            End If\n        End If\n    Wend\n    If i \u003C Len(str1) Then\n        MsgBox Mid(str1, i)\n    Else\n        MsgBox Mid(str2, j)\n    End If\nEnd Function\n\nSub test()\n    Dim rng As Range\n    On Error Resume Next\n    Set rng = Selection\n    On Error GoTo 0\n    If rng Is Nothing Then\n        MsgBox \"未选择区域\"\n        Return\n    End If\n    If TypeName(rng) \u003C> \"Range\" Then\n        MsgBox \"选的不是格子\"\n        Return\n    End If\n    If rng.Columns.Count \u003C> 2 Then\n        MsgBox \"选中列数量应为2\"\n        Return\n    End If\n    Dim skipRow As Integer\n    skipRow = 1\n    For i = 1 + skipRow To rng.Rows.Count\n        Dim cell1 As Range, cell2 As Range\n        Set cell1 = rng.Cells(i, 1)\n        Set cell2 = rng.Cells(i, 2)\n        Dim dontknow As Variant\n        dontknow = diffcell(cell1, cell2)\n    Next i\nEnd Sub\n","vb",[18,458,459,464,469,474,480,486,492,498,504,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,671,677,683,689,695,701,707,713,719,724,730,736,741,746,752,758,763,768,774,780,786,792,798,804,810,816,822],{"__ignoreMap":54},[58,460,461],{"class":60,"line":61},[58,462,463],{},"Function diffcell(cell1 As Range, cell2 As Range)\n",[58,465,466],{"class":60,"line":71},[58,467,468],{},"    Dim str1 As String, str2 As String\n",[58,470,471],{"class":60,"line":405},[58,472,473],{},"    str1 = cell1.Text\n",[58,475,477],{"class":60,"line":476},4,[58,478,479],{},"    str2 = cell2.Text\n",[58,481,483],{"class":60,"line":482},5,[58,484,485],{},"    Dim i As Integer, j As Integer\n",[58,487,489],{"class":60,"line":488},6,[58,490,491],{},"    i = 1\n",[58,493,495],{"class":60,"line":494},7,[58,496,497],{},"    j = 1\n",[58,499,501],{"class":60,"line":500},8,[58,502,503],{},"    While i \u003C> Len(str1) And j \u003C> Len(str2)\n",[58,505,507],{"class":60,"line":506},9,[58,508,509],{},"        If Mid(str1, i, 1) = Mid(str2, j, 1) Then\n",[58,511,513],{"class":60,"line":512},10,[58,514,515],{},"            i = i + 1\n",[58,517,519],{"class":60,"line":518},11,[58,520,521],{},"            j = j + 1\n",[58,523,525],{"class":60,"line":524},12,[58,526,527],{},"        Else\n",[58,529,531],{"class":60,"line":530},13,[58,532,533],{},"            Dim afterward1 As String, afterward2 As String\n",[58,535,537],{"class":60,"line":536},14,[58,538,539],{},"            afterward1 = Mid(str1, i)\n",[58,541,543],{"class":60,"line":542},15,[58,544,545],{},"            afterward2 = Mid(str2, j)\n",[58,547,549],{"class":60,"line":548},16,[58,550,551],{},"            Dim foundIdx1 As Integer, foundIdx2 As Integer\n",[58,553,555],{"class":60,"line":554},17,[58,556,557],{},"            foundIdx1 = InStr(i, str1, afterward2)\n",[58,559,561],{"class":60,"line":560},18,[58,562,563],{},"            foundIdx2 = InStr(j, str2, afterward2)\n",[58,565,567],{"class":60,"line":566},19,[58,568,569],{},"            MsgBox Mid(str1, foundIdx1 - i)\n",[58,571,573],{"class":60,"line":572},20,[58,574,575],{"emptyLinePlaceholder":418},"\n",[58,577,579],{"class":60,"line":578},21,[58,580,581],{},"            If foundIdx1 \u003C foundIdx2 Then\n",[58,583,585],{"class":60,"line":584},22,[58,586,587],{},"                MsgBox Mid(str1, foundIdx1 - i)\n",[58,589,591],{"class":60,"line":590},23,[58,592,593],{},"                i = foundIdx1\n",[58,595,597],{"class":60,"line":596},24,[58,598,599],{},"            Else\n",[58,601,603],{"class":60,"line":602},25,[58,604,605],{},"                MsgBox Mid(str2, foundIdx2 - j)\n",[58,607,609],{"class":60,"line":608},26,[58,610,611],{},"                j = foundIdx2\n",[58,613,615],{"class":60,"line":614},27,[58,616,617],{},"            End If\n",[58,619,621],{"class":60,"line":620},28,[58,622,623],{},"        End If\n",[58,625,627],{"class":60,"line":626},29,[58,628,629],{},"    Wend\n",[58,631,633],{"class":60,"line":632},30,[58,634,635],{},"    If i \u003C Len(str1) Then\n",[58,637,639],{"class":60,"line":638},31,[58,640,641],{},"        MsgBox Mid(str1, i)\n",[58,643,645],{"class":60,"line":644},32,[58,646,647],{},"    Else\n",[58,649,651],{"class":60,"line":650},33,[58,652,653],{},"        MsgBox Mid(str2, j)\n",[58,655,657],{"class":60,"line":656},34,[58,658,659],{},"    End If\n",[58,661,663],{"class":60,"line":662},35,[58,664,665],{},"End Function\n",[58,667,669],{"class":60,"line":668},36,[58,670,575],{"emptyLinePlaceholder":418},[58,672,674],{"class":60,"line":673},37,[58,675,676],{},"Sub test()\n",[58,678,680],{"class":60,"line":679},38,[58,681,682],{},"    Dim rng As Range\n",[58,684,686],{"class":60,"line":685},39,[58,687,688],{},"    On Error Resume Next\n",[58,690,692],{"class":60,"line":691},40,[58,693,694],{},"    Set rng = Selection\n",[58,696,698],{"class":60,"line":697},41,[58,699,700],{},"    On Error GoTo 0\n",[58,702,704],{"class":60,"line":703},42,[58,705,706],{},"    If rng Is Nothing Then\n",[58,708,710],{"class":60,"line":709},43,[58,711,712],{},"        MsgBox \"未选择区域\"\n",[58,714,716],{"class":60,"line":715},44,[58,717,718],{},"        Return\n",[58,720,722],{"class":60,"line":721},45,[58,723,659],{},[58,725,727],{"class":60,"line":726},46,[58,728,729],{},"    If TypeName(rng) \u003C> \"Range\" Then\n",[58,731,733],{"class":60,"line":732},47,[58,734,735],{},"        MsgBox \"选的不是格子\"\n",[58,737,739],{"class":60,"line":738},48,[58,740,718],{},[58,742,744],{"class":60,"line":743},49,[58,745,659],{},[58,747,749],{"class":60,"line":748},50,[58,750,751],{},"    If rng.Columns.Count \u003C> 2 Then\n",[58,753,755],{"class":60,"line":754},51,[58,756,757],{},"        MsgBox \"选中列数量应为2\"\n",[58,759,761],{"class":60,"line":760},52,[58,762,718],{},[58,764,766],{"class":60,"line":765},53,[58,767,659],{},[58,769,771],{"class":60,"line":770},54,[58,772,773],{},"    Dim skipRow As Integer\n",[58,775,777],{"class":60,"line":776},55,[58,778,779],{},"    skipRow = 1\n",[58,781,783],{"class":60,"line":782},56,[58,784,785],{},"    For i = 1 + skipRow To rng.Rows.Count\n",[58,787,789],{"class":60,"line":788},57,[58,790,791],{},"        Dim cell1 As Range, cell2 As Range\n",[58,793,795],{"class":60,"line":794},58,[58,796,797],{},"        Set cell1 = rng.Cells(i, 1)\n",[58,799,801],{"class":60,"line":800},59,[58,802,803],{},"        Set cell2 = rng.Cells(i, 2)\n",[58,805,807],{"class":60,"line":806},60,[58,808,809],{},"        Dim dontknow As Variant\n",[58,811,813],{"class":60,"line":812},61,[58,814,815],{},"        dontknow = diffcell(cell1, cell2)\n",[58,817,819],{"class":60,"line":818},62,[58,820,821],{},"    Next i\n",[58,823,825],{"class":60,"line":824},63,[58,826,827],{},"End Sub\n",[27,829,342],{"id":342},[32,831,832,841,854,863,883],{},[35,833,834,837,838,284],{},[18,835,836],{},"While i \u003C> Len(str1)","：用不等号收尾，最后一个字符永远比不到，得写 ",[18,839,840],{},"\u003C=",[35,842,843,846,847,850,851,284],{},[18,844,845],{},"Mid(str1, foundIdx1 - i)","：",[18,848,849],{},"Mid"," 的第二个参数是起始位置，我当时按长度用了。想取中间一段得写 ",[18,852,853],{},"Mid(str1, i, foundIdx1 - i)",[35,855,856,859,860,862],{},[18,857,858],{},"If"," 之前那句 ",[18,861,439],{}," 跟两个分支里的重复，是调日志时留下的。",[35,864,865,868,869,872,873,875,876,879,880,284],{},[18,866,867],{},"Sub"," 里用 ",[18,870,871],{},"Return"," 提前退出：VBA 的 ",[18,874,871],{}," 是配 ",[18,877,878],{},"GoSub"," 用的，这里应该写 ",[18,881,882],{},"Exit Sub",[35,884,885,888,889,891],{},[18,886,887],{},"diffcell"," 没有返回值，所以 ",[18,890,447],{}," 拿到的一直是空。",[401,893,894],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":54,"searchDepth":405,"depth":405,"links":896},[897],{"id":342,"depth":71,"text":342},"2020-06-13","一个没写完的 Excel VBA 宏：选中两列，逐字比较，不一样的地方用 MsgBox 弹出来。代码原样贴着。",{},"\u002Fposts\u002Funiversity-excel-vba-macro",{"title":429,"description":899},"posts\u002Funiversity-excel-vba-macro","为了一张表第一次写宏，靠 MsgBox 调日志，最后也没收尾。",[906,907,425],"VBA","Excel","HLZgdQkGyIiMWoZBcjFV7oZh57afs6CjfiBLoY5k3OM",{"id":910,"title":911,"body":912,"date":1382,"description":1383,"draft":415,"extension":416,"meta":1384,"navigation":418,"path":1385,"seo":1386,"stem":1387,"summary":1388,"tags":1389,"__hash__":1391},"posts\u002Fposts\u002Funiversity-python-notes.md","开学前的那几页 Python 笔记",{"type":8,"value":913,"toc":1376},[914,919,922,963,967,970,1062,1065,1272,1276,1326,1335,1340,1342,1374],[11,915,916],{},[14,917,918],{},"这篇是 2019 年 8 月记的，上大学前的那个暑假。原文照抄，只调了排版，当时写错的地方一处都没改。",[27,920,921],{"id":921},"语法零碎",[32,923,924,927,930,933,938,941,944,947,950,957,960],{},[35,925,926],{},"（）不可变",[35,928,929],{},"【】可变",[35,931,932],{},"｛｝可变，无序",[35,934,935,936],{},"形式常亮用大写！CONSTANT = ",[58,937],{},[35,939,940],{},"模块变量按规则都应该是常亮，变量放函数或者类里头",[35,942,943],{},"Pycharm好像没有模块常量波浪线标注建议大写功能？",[35,945,946],{},"Range(0,10) 表示1-9",[35,948,949],{},"Print(x,end=’|’)打印完成不换行，以|分隔",[35,951,952,953,956],{},"B = a",[58,954,955],{},"0:len(a):2"," b数组获取a 相当于range(0,len(a),2)",[35,958,959],{},"Break终止循环 contiune跳过这一轮循环",[35,961,962],{},"Len(a) a的字串长度",[27,964,966],{"id":965},"random-模块","random 模块",[14,968,969],{},"用法是从别处抄来的，第一段的作者署名我留在了代码里：",[49,971,975],{"className":972,"code":973,"language":974,"meta":54,"style":54},"language-python shiki shiki-themes github-light github-dark","#!\u002Fusr\u002Fbin\u002Fpython\n\n## -*- coding: UTF-8 -*-\n\nimport random\n\nprint( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数\nprint( random.random() )             # 产生 0 到 1 之间的随机浮点数\nprint( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数，区间可以不是整数\nprint( random.choice('tomorrow') )   # 从序列中随机选取一个元素\nprint( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数\n\na=[1,3,5,6,7]                # 将序列a中的元素顺序打乱\nrandom.shuffle(a)\nprint(a)\n\n# 冷面做的梦\n# 1年前 (2018-05-23)\n","python",[18,976,977,982,986,991,995,1000,1004,1009,1014,1019,1024,1029,1033,1038,1043,1048,1052,1057],{"__ignoreMap":54},[58,978,979],{"class":60,"line":61},[58,980,981],{},"#!\u002Fusr\u002Fbin\u002Fpython\n",[58,983,984],{"class":60,"line":71},[58,985,575],{"emptyLinePlaceholder":418},[58,987,988],{"class":60,"line":405},[58,989,990],{},"## -*- coding: UTF-8 -*-\n",[58,992,993],{"class":60,"line":476},[58,994,575],{"emptyLinePlaceholder":418},[58,996,997],{"class":60,"line":482},[58,998,999],{},"import random\n",[58,1001,1002],{"class":60,"line":488},[58,1003,575],{"emptyLinePlaceholder":418},[58,1005,1006],{"class":60,"line":494},[58,1007,1008],{},"print( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数\n",[58,1010,1011],{"class":60,"line":500},[58,1012,1013],{},"print( random.random() )             # 产生 0 到 1 之间的随机浮点数\n",[58,1015,1016],{"class":60,"line":506},[58,1017,1018],{},"print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数，区间可以不是整数\n",[58,1020,1021],{"class":60,"line":512},[58,1022,1023],{},"print( random.choice('tomorrow') )   # 从序列中随机选取一个元素\n",[58,1025,1026],{"class":60,"line":518},[58,1027,1028],{},"print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数\n",[58,1030,1031],{"class":60,"line":524},[58,1032,575],{"emptyLinePlaceholder":418},[58,1034,1035],{"class":60,"line":530},[58,1036,1037],{},"a=[1,3,5,6,7]                # 将序列a中的元素顺序打乱\n",[58,1039,1040],{"class":60,"line":536},[58,1041,1042],{},"random.shuffle(a)\n",[58,1044,1045],{"class":60,"line":542},[58,1046,1047],{},"print(a)\n",[58,1049,1050],{"class":60,"line":548},[58,1051,575],{"emptyLinePlaceholder":418},[58,1053,1054],{"class":60,"line":554},[58,1055,1056],{},"# 冷面做的梦\n",[58,1058,1059],{"class":60,"line":560},[58,1060,1061],{},"# 1年前 (2018-05-23)\n",[14,1063,1064],{},"第二段：",[49,1066,1068],{"className":972,"code":1067,"language":974,"meta":54,"style":54},"#!\u002Fusr\u002Fbin\u002Fpython\n\n## -*- coding: UTF-8 -*-\n\nimport random\nimport string\n\n#### 随机整数：\n\nprint random.randint(1,50)\n\n#### 随机选取0到100间的偶数：\n\nprint random.randrange(0, 101, 2)\n\n#### 随机浮点数：\n\nprint random.random()\nprint random.uniform(1, 10)\n\n#### 随机字符：\n\nprint random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')\n\n#### 多个字符中生成指定数量的随机字符：\n\nprint random.sample('zyxwvutsrqponmlkjihgfedcba',5)\n\n#### 从a-zA-Z0-9生成指定数量的随机字符：\n\nran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))\nprint ran_str\n\n#### 多个字符中选取指定数量的字符组成新字符串：\n\nprint ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))\n\n#### 随机选取字符串：\n\nprint random.choice(['剪刀', '石头', '布'])\n\n#### 打乱排序\n\nitems = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]\nprint random.shuffle(items)\n",[18,1069,1070,1074,1078,1082,1086,1090,1095,1099,1104,1108,1113,1117,1122,1126,1131,1135,1140,1144,1149,1154,1158,1163,1167,1172,1176,1181,1185,1190,1194,1199,1203,1208,1213,1217,1222,1226,1231,1235,1240,1244,1249,1253,1258,1262,1267],{"__ignoreMap":54},[58,1071,1072],{"class":60,"line":61},[58,1073,981],{},[58,1075,1076],{"class":60,"line":71},[58,1077,575],{"emptyLinePlaceholder":418},[58,1079,1080],{"class":60,"line":405},[58,1081,990],{},[58,1083,1084],{"class":60,"line":476},[58,1085,575],{"emptyLinePlaceholder":418},[58,1087,1088],{"class":60,"line":482},[58,1089,999],{},[58,1091,1092],{"class":60,"line":488},[58,1093,1094],{},"import string\n",[58,1096,1097],{"class":60,"line":494},[58,1098,575],{"emptyLinePlaceholder":418},[58,1100,1101],{"class":60,"line":500},[58,1102,1103],{},"#### 随机整数：\n",[58,1105,1106],{"class":60,"line":506},[58,1107,575],{"emptyLinePlaceholder":418},[58,1109,1110],{"class":60,"line":512},[58,1111,1112],{},"print random.randint(1,50)\n",[58,1114,1115],{"class":60,"line":518},[58,1116,575],{"emptyLinePlaceholder":418},[58,1118,1119],{"class":60,"line":524},[58,1120,1121],{},"#### 随机选取0到100间的偶数：\n",[58,1123,1124],{"class":60,"line":530},[58,1125,575],{"emptyLinePlaceholder":418},[58,1127,1128],{"class":60,"line":536},[58,1129,1130],{},"print random.randrange(0, 101, 2)\n",[58,1132,1133],{"class":60,"line":542},[58,1134,575],{"emptyLinePlaceholder":418},[58,1136,1137],{"class":60,"line":548},[58,1138,1139],{},"#### 随机浮点数：\n",[58,1141,1142],{"class":60,"line":554},[58,1143,575],{"emptyLinePlaceholder":418},[58,1145,1146],{"class":60,"line":560},[58,1147,1148],{},"print random.random()\n",[58,1150,1151],{"class":60,"line":566},[58,1152,1153],{},"print random.uniform(1, 10)\n",[58,1155,1156],{"class":60,"line":572},[58,1157,575],{"emptyLinePlaceholder":418},[58,1159,1160],{"class":60,"line":578},[58,1161,1162],{},"#### 随机字符：\n",[58,1164,1165],{"class":60,"line":584},[58,1166,575],{"emptyLinePlaceholder":418},[58,1168,1169],{"class":60,"line":590},[58,1170,1171],{},"print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')\n",[58,1173,1174],{"class":60,"line":596},[58,1175,575],{"emptyLinePlaceholder":418},[58,1177,1178],{"class":60,"line":602},[58,1179,1180],{},"#### 多个字符中生成指定数量的随机字符：\n",[58,1182,1183],{"class":60,"line":608},[58,1184,575],{"emptyLinePlaceholder":418},[58,1186,1187],{"class":60,"line":614},[58,1188,1189],{},"print random.sample('zyxwvutsrqponmlkjihgfedcba',5)\n",[58,1191,1192],{"class":60,"line":620},[58,1193,575],{"emptyLinePlaceholder":418},[58,1195,1196],{"class":60,"line":626},[58,1197,1198],{},"#### 从a-zA-Z0-9生成指定数量的随机字符：\n",[58,1200,1201],{"class":60,"line":632},[58,1202,575],{"emptyLinePlaceholder":418},[58,1204,1205],{"class":60,"line":638},[58,1206,1207],{},"ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))\n",[58,1209,1210],{"class":60,"line":644},[58,1211,1212],{},"print ran_str\n",[58,1214,1215],{"class":60,"line":650},[58,1216,575],{"emptyLinePlaceholder":418},[58,1218,1219],{"class":60,"line":656},[58,1220,1221],{},"#### 多个字符中选取指定数量的字符组成新字符串：\n",[58,1223,1224],{"class":60,"line":662},[58,1225,575],{"emptyLinePlaceholder":418},[58,1227,1228],{"class":60,"line":668},[58,1229,1230],{},"print ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))\n",[58,1232,1233],{"class":60,"line":673},[58,1234,575],{"emptyLinePlaceholder":418},[58,1236,1237],{"class":60,"line":679},[58,1238,1239],{},"#### 随机选取字符串：\n",[58,1241,1242],{"class":60,"line":685},[58,1243,575],{"emptyLinePlaceholder":418},[58,1245,1246],{"class":60,"line":691},[58,1247,1248],{},"print random.choice(['剪刀', '石头', '布'])\n",[58,1250,1251],{"class":60,"line":697},[58,1252,575],{"emptyLinePlaceholder":418},[58,1254,1255],{"class":60,"line":703},[58,1256,1257],{},"#### 打乱排序\n",[58,1259,1260],{"class":60,"line":709},[58,1261,575],{"emptyLinePlaceholder":418},[58,1263,1264],{"class":60,"line":715},[58,1265,1266],{},"items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]\n",[58,1268,1269],{"class":60,"line":721},[58,1270,1271],{},"print random.shuffle(items)\n",[27,1273,1275],{"id":1274},"模块导入和别的","模块、导入和别的",[32,1277,1278,1281,1284,1287,1290,1293,1296,1299,1302,1305,1308,1311,1314,1317,1320,1323],{},[35,1279,1280],{},".dll是C#里类似模块的 组织结构 动态链接库 .lib静态链接库",[35,1282,1283],{},".jar也是",[35,1285,1286],{},"Pack._init_这个写法是错的，_init_直接用pack表达",[35,1288,1289],{},"Import c7",[35,1291,1292],{},"Print(c7.a)这样能把c7模块的a打印出来",[35,1294,1295],{},"解释型语言在意import print顺序",[35,1297,1298],{},"同级模块不用目录直接名字就好，高级导入次级需要 子报名.模块名",[35,1300,1301],{},".pyc是编译器做的自检码，提升运行效率，可以被反编译，谨防小偷！",[35,1303,1304],{},"Round(a,b) a数字b位四舍五入",[35,1306,1307],{},"Python命令行help()查询函数",[35,1309,1310],{},"Sys.函数能改很多人工限制",[35,1312,1313],{},"循环调用最多3923 3925次",[35,1315,1316],{},"定义立刻执行，声明等着以后执行",[35,1318,1319],{},"_不推荐外部调用；__防止被继承覆盖",[35,1321,1322],{},"__dict__是类内变量",[35,1324,1325],{},"a = list(range(1,5)) list()只接受单个参数，结果：",[49,1327,1329],{"className":972,"code":1328,"language":974,"meta":54,"style":54},"a = [1, 2, 3, 4]\n",[18,1330,1331],{"__ignoreMap":54},[58,1332,1333],{"class":60,"line":61},[58,1334,1328],{},[32,1336,1337],{},[35,1338,1339],{},"序列解包不是并行过程",[27,1341,342],{"id":342},[32,1343,1344,1350,1364,1371],{},[35,1345,1346,1349],{},[18,1347,1348],{},"range(0, 10)"," 是 0 到 9。我那时候写「表示 1-9」，两头都记错了。",[35,1351,1352,1355,1356,1359,1360,1363],{},[18,1353,1354],{},"_init_"," 少了下划线，是 ",[18,1357,1358],{},"__init__","；",[18,1361,1362],{},"pack"," 那句到现在我也没还原出当时想说什么。",[35,1365,1366,1367,1370],{},"第二段 random 的代码是 Python 2 的（",[18,1368,1369],{},"print"," 不带括号），我照着抄下来，没看出来它和第一段的区别。",[35,1372,1373],{},"「循环调用最多 3923 3925 次」这个数，我至今不知道是从哪儿抄的。",[401,1375,894],{},{"title":54,"searchDepth":405,"depth":405,"links":1377},[1378,1379,1380,1381],{"id":921,"depth":71,"text":921},{"id":965,"depth":71,"text":966},{"id":1274,"depth":71,"text":1275},{"id":342,"depth":71,"text":342},"2019-08-15","2019 年 8 月，上大学前的暑假自学 Python 记的几页：列表字典、range 的边界、两段抄来的 random 用法，还有一串当时没弄明白的语法。",{},"\u002Fposts\u002Funiversity-python-notes",{"title":911,"description":1383},"posts\u002Funiversity-python-notes","大学开学前自学 Python 的原始笔记，写错的、想岔的都原样留着。",[1390,425],"Python","2RMQgL_P1ZC-Z9iyl7X5mRdzSo_DoqecOWGExN51P_c",1792556025029]