<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>One Small Step</title>
  
  
  <link href="https://onesmallstep.vip/atom.xml" rel="self"/>
  
  <link href="https://onesmallstep.vip/"/>
  <updated>2021-03-16T03:11:06.260Z</updated>
  <id>https://onesmallstep.vip/</id>
  
  <author>
    <name>Jiyang</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>C++ Primer 笔记 - 第7章 函数</title>
    <link href="https://onesmallstep.vip/2021/03/16/CppPrimerCh7/"/>
    <id>https://onesmallstep.vip/2021/03/16/CppPrimerCh7/</id>
    <published>2021-03-16T03:05:22.000Z</published>
    <updated>2021-03-16T03:11:06.260Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="第7章-函数——C-的编程模块"><a href="#第7章-函数——C-的编程模块" class="headerlink" title="第7章 函数——C++的编程模块"></a>第7章 函数——C++的编程模块</h1><h3 id="定义函数"><a href="#定义函数" class="headerlink" title="定义函数"></a>定义函数</h3><hr><ul><li>可以将函数分成两类：没有返回值的函数和有返回值的函数</li><li>对于有返回值的函数，必须有返回语句</li><li>C++对于返回值的类型有一定限制：不能是数组，但可以是其他任何类型——整数、浮点数、指针、结构体和对象。</li><li>函数的返回值过程：<ul><li>函数通过将返回值复制到指定的CPU寄存器或内存单元中来将值返回。</li><li>调用程序将查看该内存单元。</li></ul></li><li>函数在执行返回语句后结束。如果函数包含多条返回语句，则函数在执行遇到的第一条返回语句后结束</li></ul><h3 id="函数原型和函数调用"><a href="#函数原型和函数调用" class="headerlink" title="函数原型和函数调用"></a>函数原型和函数调用</h3><hr><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">cheers</span><span class="params">(<span class="keyword">int</span> n)</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">cube</span><span class="params">(<span class="keyword">double</span> x)</span></span>;</span><br></pre></td></tr></table></figure><ul><li>原型描述了函数到编译器的接口，也就是说，它将返回值的类型以及参数的类型和数量告诉了编译器。</li><li>原型的功能：<ul><li>编译器正确处理函数的返回值</li><li>编译器检查使用的参数数目是否正确</li><li>编译器检查使用的参数类型是否正确，如果不正确，则转换成正确的类型（如果可能的话）。</li></ul></li><li>仅当有意义时，原型化才会导致类型转换。</li><li>在编译阶段进行的原型话被称为静态类型检查（static type checking）</li></ul><h3 id="函数如何使用指针来处理数组"><a href="#函数如何使用指针来处理数组" class="headerlink" title="函数如何使用指针来处理数组"></a>函数如何使用指针来处理数组</h3><ul><li>C++和C一样，也将数组名视为指针。C++将数组名解释为其第一个元素的地址。</li><li>规则的例外：<ul><li>数组声明使用数组名来标记存储位置</li><li>对数组名使用 <code>sizeof</code> 将得到整个数组的长度（以字节为单位）</li><li>将地址运算符 <code>&amp;</code> 用于数组名时将返回整个数组的地址。</li></ul></li><li>为防止函数无意中修改数组的内容，可在声明形参时使用关键字 <code>const</code><ul><li>这并不意味着原始数组必须是常量，而只是意味着不能在函数中使用数组指针变量来修改这些数据。（如果尝试修改，则编译器会报错）</li></ul></li></ul><h3 id="指针和-const"><a href="#指针和-const" class="headerlink" title="指针和 const"></a>指针和 <code>const</code></h3><ul><li>可以用两种不同的方式将 <code>const</code> 关键字用于指针。<ul><li>让指针指向一个常量对象，这样可以防止使用该指针来修改所指向的值</li><li>将指针本身声明为常量，这样可以防止改变指针指向的位置</li></ul></li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> age = <span class="number">39</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> *pt = &amp;age;</span><br></pre></td></tr></table></figure><ul><li><code>pt</code> 指向一个 <code>const int</code> ，因此不能使用 <code>pt</code> 来修改这个值。</li><li>可以直接通过 <code>age</code> 变量来修改 <code>age</code> 的值，但不能使用 <code>pt</code> 指针来修改它</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">*pt = <span class="number">20</span>; <span class="comment">// INVALID bevause pt points to a const int</span></span><br><span class="line">age = <span class="number">20</span>; <span class="comment">// VALID because age is not declared to be const</span></span><br></pre></td></tr></table></figure><ul><li>不能将 <code>const</code> 变量的地址赋给常规指针</li></ul><hr><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> fload g_earth = <span class="number">9.80</span>;</span><br><span class="line">cosnt <span class="keyword">float</span> * pe = &amp;g_earth; <span class="comment">// VALID</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">float</span> g_moon = <span class="number">1.63</span>;</span><br><span class="line"><span class="keyword">float</span> * pm = &amp;g_moon; <span class="comment">// INVALID</span></span><br></pre></td></tr></table></figure><ul><li>第一种情况：既不能用 <code>g_earth</code> 来修改值 9.80，也不能使用 <code>pe</code> 来修改。C++禁止第二种情况，因为不能用 <code>pm</code> 来修改 <code>g_moon</code></li></ul><hr><ul><li>如果涉及一级间接关系，则将非 <code>const</code> 指针赋值给 <code>const</code> 指针是可以的</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> age = <span class="number">39</span>; <span class="comment">// age++ is a valid operation</span></span><br><span class="line"><span class="keyword">int</span>* pd = &amp;age; <span class="comment">// *pd = 41 is a valid operation</span></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span>* pt = pd; <span class="comment">// *pt = 42 is a invalid operation</span></span><br></pre></td></tr></table></figure><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> **pp2;</span><br><span class="line"><span class="keyword">int</span> *p1;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> n = <span class="number">14</span>;</span><br><span class="line">pp2 = &amp;p1; <span class="comment">// not allowed but suppose it were</span></span><br><span class="line">*pp2 = &amp;n; <span class="comment">// valid, both const, but sets p1 to point at n;</span></span><br><span class="line">*p1 = <span class="number">10</span>; <span class="comment">// valid, but changes const n</span></span><br></pre></td></tr></table></figure><ul><li>仅当只有一层间接关系（如指针指向基本数据类型时），才可以将非 <code>const</code> 地址或指针赋值给 <code>const</code> 指针。</li></ul><hr><ul><li>禁止将常量数组的地址赋给非常量指针意味着不能将数组名作为参数传递给使用非常量形参的函数。</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> cArr = &#123;<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>&#125;;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">sum</span><span class="params">(<span class="keyword">int</span> arr[], <span class="keyword">int</span> n)</span></span></span><br><span class="line">...</span><br><span class="line"><span class="keyword">int</span> j = sum(cArr, <span class="number">4</span>); <span class="comment">// not allowed</span></span><br></pre></td></tr></table></figure><ul><li>禁止将指针参数声明为指向常量数据的指针有两条理由：<ul><li>可以避免由于无意间修改数据而导致编程错误</li><li>使用 <code>const</code> 使得函数能够处理 <code>const</code> 和非 <code>const</code> 实参，否则只能接受非 <code>const</code> 数据。如果条件允许，则应将指针形参声明为指向 <code>const</code> 的指针。</li></ul></li></ul><h2 id="函数和结构"><a href="#函数和结构" class="headerlink" title="函数和结构"></a>函数和结构</h2><ul><li>定义结构体</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">travel_time</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> hours;</span><br><span class="line"><span class="keyword">int</span> mins;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function">travel_time <span class="title">sum</span><span class="params">(travel_time t1, travel_time t2)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">const</span> <span class="keyword">int</span> Mins_per_hr = <span class="number">60</span>;</span><br><span class="line">    travel_time total;</span><br><span class="line"></span><br><span class="line">    total.mins = (t1.mins + t2.mins) % Mins_per_hr;</span><br><span class="line">    total.hours = t1.hours + t2.hours + (t1.mins + t1.mins) % Mins_per_hr;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> total;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其他定义结构体的例子</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">polar</span> &#123;</span></span><br><span class="line"><span class="keyword">double</span> distance;</span><br><span class="line"><span class="keyword">double</span> angle;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">rect</span> &#123;</span></span><br><span class="line"><span class="keyword">double</span> x;</span><br><span class="line"><span class="keyword">double</span> y;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><hr><ul><li>while 循环同时读取两个变量</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">while</span> (<span class="built_in">cin</span> &gt;&gt; rplace.x &gt;&gt; rplace.y) &#123;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; rplace.x &lt;&lt; <span class="string">' '</span> &lt;&lt; rplace.y;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li><code>cin</code> 是 <code>istream</code> 类的一个对象。抽取运算符 <code>&gt;&gt;</code> 被设计成使得 <code>cin &gt;&gt; rplace.x</code> 也是一个 <code>istream</code> 对象。</li></ul><h3 id="传递结构的地址-（结构体指针）"><a href="#传递结构的地址-（结构体指针）" class="headerlink" title="传递结构的地址 （结构体指针）"></a>传递结构的地址 （结构体指针）</h3><hr><ul><li><p>假设要传递结构的地址而不是整个结构以节省时间和空间，则需要修改函数：</p><ul><li><p>调用函数时，将结构的地址 <code>&amp;pplace</code> 而不是结构本省 <code>pplace</code> 传递给函数</p></li><li><p>将形参声明为指向 <code>polar</code> 的指针，即 <code>polar*</code> 类型。由于函数不应该就该结构，因此使用了 <code>const</code> 修饰符</p></li><li><p>形参是指针而不是结构，因此应使用间接成员运算符 <code>-&gt;</code> ，而不是 <code>.</code></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show_polar</span> <span class="params">(<span class="keyword">const</span> polar* pda)</span> </span>&#123;</span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">double</span> Rad2deg = <span class="number">57.29577951</span>;</span><br><span class="line"></span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">"distance = "</span> &lt;&lt; pad-&gt;distance;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">", angle = "</span> &lt;&lt; pad-&gt;angle * Rad2deg;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">" degrees\n"</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">...</span><br><span class="line">show_polar(&amp;pplace);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><p>函数使用的是指针，是的函数能对原始结构进行操作</p></li></ul></li></ul><h3 id="函数和-string-对象"><a href="#函数和-string-对象" class="headerlink" title="函数和 string 对象"></a>函数和 <code>string</code> 对象</h3><hr><ul><li>函数读取 string 对象数组</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> SIZE = <span class="number">5</span>;</span><br><span class="line"><span class="built_in">string</span> <span class="built_in">list</span>[SIZE];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; SIZE; i++) &#123;</span><br><span class="line">getline(<span class="built_in">cin</span>, <span class="built_in">list</span>[i]);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="函数和-array-对象"><a href="#函数和-array-对象" class="headerlink" title="函数和 array 对象"></a>函数和 <code>array</code> 对象</h3><hr><ul><li><code>array</code> 对象的定义</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">std</span>::arrray&lt;<span class="keyword">double</span>, <span class="number">4</span>&gt; expenses;</span><br><span class="line">fill(&amp;expenses, <span class="number">0</span>);</span><br></pre></td></tr></table></figure><h3 id="递归"><a href="#递归" class="headerlink" title="递归"></a>递归</h3><hr><h2 id="函数指针"><a href="#函数指针" class="headerlink" title="函数指针"></a>函数指针</h2><ul><li>与数据项相似，函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。</li><li>可以编写将另一个函数的地址作为参数的函数。这样第一个函数就能找到第二个函数，并运行它。</li></ul><hr><h3 id="声明函数的指针"><a href="#声明函数的指针" class="headerlink" title="声明函数的指针"></a>声明函数的指针</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">pam</span><span class="params">(<span class="keyword">int</span>)</span></span>; <span class="comment">// 函数原型</span></span><br><span class="line"><span class="keyword">double</span> (*pf)(<span class="keyword">int</span>); <span class="comment">// 函数指针 pf, 函数输入为一个 int 数字，输出为一个 double</span></span><br></pre></td></tr></table></figure><p>函数的传递 - 函数的地址与函数的返回值</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">process(think); <span class="comment">// passes address of think() to process()</span></span><br><span class="line">thought(think()); <span class="comment">// passes return value of think() to thought</span></span><br></pre></td></tr></table></figure><p>函数指针的声明和赋值</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">pam</span><span class="params">(<span class="keyword">int</span>)</span></span></span><br><span class="line"><span class="function"><span class="title">double</span> <span class="params">(*pf)</span><span class="params">(<span class="keyword">int</span>)</span></span>;</span><br><span class="line">pf = pam;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">ted</span><span class="params">(<span class="keyword">int</span>)</span></span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">ned</span><span class="params">(<span class="keyword">double</span>)</span></span></span><br><span class="line"><span class="function">pf </span>= ted; <span class="comment">// invalid</span></span><br><span class="line">pf = ned; <span class="comment">// invalid</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">const</span> <span class="keyword">double</span> * <span class="title">f1</span><span class="params">(<span class="keyword">const</span> <span class="keyword">double</span> ar[], <span class="keyword">int</span> n)</span></span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">double</span> * (*p1)(<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>);</span><br><span class="line">p1 = f1;</span><br><span class="line"></span><br><span class="line"><span class="keyword">auto</span> p1 = f1;</span><br></pre></td></tr></table></figure><ul><li>使用指针来调用函数</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">best</span><span class="params">(<span class="keyword">int</span>)</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">estimate</span><span class="params">(<span class="keyword">int</span> lines, <span class="keyword">double</span> (*pf)(<span class="keyword">int</span>))</span> </span>&#123;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; (*pf)(lines) &lt;&lt; <span class="string">" hour(s)\n"</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">esitimate(code, best);</span><br><span class="line">]</span><br></pre></td></tr></table></figure><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">pam</span><span class="params">(<span class="keyword">int</span>)</span></span>;</span><br><span class="line"><span class="keyword">double</span> (*pf)(<span class="keyword">int</span>);</span><br><span class="line">pf = pam;</span><br><span class="line"><span class="keyword">double</span> x = pam(<span class="number">4</span>); <span class="comment">// call pam() using the function name</span></span><br><span class="line"><span class="keyword">double</span> y = (*pf)(<span class="number">5</span>); <span class="comment">// call pam() using the pointer pf</span></span><br></pre></td></tr></table></figure><ul><li>函数指针的数组</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="keyword">double</span> * (*pa[<span class="number">3</span>]) (<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>) = &#123;f1, f2, f3&#125;;</span><br></pre></td></tr></table></figure><ul><li>这里不能使用 <code>auto</code> ，自动类型推断只能用于单值初始化，而不能用于列表初始化</li></ul><h3 id="深入探讨函数指针"><a href="#深入探讨函数指针" class="headerlink" title="深入探讨函数指针"></a>深入探讨函数指针</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">const</span> <span class="keyword">double</span> * <span class="title">f1</span><span class="params">(<span class="keyword">const</span> <span class="keyword">double</span> ar[], <span class="keyword">int</span> n)</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">const</span> <span class="keyword">double</span> * <span class="title">f2</span><span class="params">(<span class="keyword">const</span> <span class="keyword">double</span> [], <span class="keyword">int</span>)</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">const</span> <span class="keyword">double</span> * <span class="title">f3</span><span class="params">(<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>)</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">double</span> * (*p1)(<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>) = f1;</span><br><span class="line"><span class="keyword">auto</span> p2 = f2; <span class="comment">// c++11 automatic type deduction</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; (*p1)(av,<span class="number">3</span>) &lt;&lt; <span class="string">": "</span> &lt;&lt; *(*p1)(av, <span class="number">3</span>) &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; p2(av,<span class="number">3</span>) &lt;&lt; <span class="string">": "</span> &lt;&lt; *p2(av, <span class="number">3</span>) &lt;&lt; <span class="built_in">endl</span>;</span><br></pre></td></tr></table></figure><ul><li><p>这里 <code>p1</code>, <code>p2</code> 都调用了指向的函数。在每条 <code>cout</code> 语句中，前半部分显示存储函数返回值的地址。后半部分为存储在这些地址里的实际返回值。</p></li><li><p>指向函数数组的指针初始化</p></li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="keyword">double</span> * (*pa[<span class="number">3</span>]) (<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>) = &#123;f1, f2, f3&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">auto</span> pc = &amp;pa; <span class="comment">// c++ 11 automatic type deduction</span></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">double</span> *(*(*pd)[<span class="number">3</span>])(<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>) = &amp;pa;</span><br></pre></td></tr></table></figure><h2 id="用-typedef-进行简化"><a href="#用-typedef-进行简化" class="headerlink" title="用 typedef 进行简化"></a>用 <code>typedef</code> 进行简化</h2><hr><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="keyword">double</span> real; <span class="comment">// make real another name for double</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">double</span> *(*p_fun)(<span class="keyword">const</span> <span class="keyword">double</span> *, <span class="keyword">int</span>); <span class="comment">// p_fun now a type name</span></span><br><span class="line">p_fun p1 = f1; <span class="comment">// p1 points to the f1() function</span></span><br><span class="line"></span><br><span class="line">p_fun pa[<span class="number">3</span>] = &#123;f1, f2, f3&#125;;</span><br><span class="line">p_fun (*pd)[<span class="number">3</span>] = &amp;pa;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Cpp" scheme="https://onesmallstep.vip/tags/Cpp/"/>
    
  </entry>
  
  <entry>
    <title>2020，以及新年愿望</title>
    <link href="https://onesmallstep.vip/2021/01/02/2021-New-Year/"/>
    <id>https://onesmallstep.vip/2021/01/02/2021-New-Year/</id>
    <published>2021-01-01T22:28:48.000Z</published>
    <updated>2021-01-01T22:28:48.000Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="2020"><a href="#2020" class="headerlink" title="2020"></a>2020</h2><blockquote><p>活在这珍贵的人间<br>人类像植物一样幸福<br>爱情像雨水一样幸福<br> ——海子</p></blockquote><p>其实说到2020年，我也没有什么想要总结的，因为实在没有什么可以总结的事。因为疫情，每一个人的生活都改变了。生活的唯一目的变成了：活下去。惟愿每一个人都能健康幸福。<br><br>2020年，每一个活在世上的人都是幸运的受难者。<br></p><h2 id="2020目标完成情况"><a href="#2020目标完成情况" class="headerlink" title="2020目标完成情况"></a>2020目标完成情况</h2><ol><li>搭建一个自己的博客，坚持写：基本完成了。</li><li>每周跑步10km：因为疫情，把跑步替换成了跳绳、有氧拳击，基本完成。</li><li>自学日语（2019年断断续续背了一些单词了，希望2020过完可以能到N3或者N2的水平）：没有完成，搁置了。</li><li>至少读24本书，完成阅读任务：读书31本，除了希望读两本英文书的目标只读了1.5本。</li><li>至少看50部电影：完成了。</li><li>自学pr，剪出一个自己满意的vlog（我看悬）：没有完成。</li><li>保证每天的8h睡眠考试周及前一周除外：基本完成。还是有熬夜的时候。</li><li>去一个想去的地方旅行（我看悬）：没有完成。</li><li>有空的时候练练字（不强求）：完成了。</li></ol><hr><ul><li><p>2020 喜欢的书：<br></p><ul><li><a href="https://book.douban.com/subject/1815640/"><strong>《王小波全集：第一卷、第二卷 杂文》王小波</strong></a>：王小波真是一个特别让我觉得相见恨晚的作家。他的杂文尤其出色，我喜欢他幽默的语言、清晰的思路、尖锐的讽刺。王小波的文章告诉了我们：生活中有很多很多美好的事情：平等、自由、博爱、理性、诚实。有很多很多的道理，也许不会出现在课本里，也不会出现在老师的课堂上，甚至有一些人不希望我们知道，但那确实是让人生真正幸福的唯一办法。</li><li><a href="https://book.douban.com/subject/27035190/"><strong>《在水中热爱火焰》 【葡萄牙】安德拉德</strong></a>：一本名字就很美的诗集。爱是人间至苦的一味解药。</li><li><a href="https://book.douban.com/subject/3369600/"><strong>《当我谈跑步时我谈些什么》 【日】村上春树</strong></a>：对于很多事情来说，重要的是坚持这一行为本身，而最后的结果会如何这一点，已经不那么重要了。“我现在认识到，生存的质量并非成绩、数字、名次之类固定的东西，而是含于行动之中的流动性的东西”。</li><li><a href="https://book.douban.com/subject/26363926/"><strong>《何为良好生活：行之于途而应于新》 陈嘉映</strong></a>:一本并不太好读但是内容深刻的哲学书。 书的标题是何为良好生活，但其实这本书也没有给出一个明确的答案，而是给如何思考这个问题给出了一些提示。在我的理解中，良好生活并不是一个固定的、让人效仿的范式，不是一个明确的行为清单，而是我们在人生的前行中逐步努力追求一个未知的、因人而异的美好愿景的过程。</li><li><a href="https://book.douban.com/subject/2033081/"><strong>《身份的焦虑》 【英】阿兰·德波顿</strong></a>：焦虑就像是现代社会对现代人的pua，平等意识告诉我们人与人的都是相似的，你与周围的人处境的差别都是个人努力不同的结果。言下之意就是，如果你觉得自己过得不好，那就是你不够努力（但事实上并不是这样的）。精英崇拜和过度期望使得我们总是给自己应允了很多不切实际的东西，比如说某些成就，某些社会地位，但那些其实并不是我们所需要的。 我觉得焦虑是现代社会的常态，它没有彻底的解药，也不需要解药（适当的焦虑是有益的）。我们要做的，是认识自我，宽容自身的缺陷，找到自己真正需要的东西。</li></ul></li><li><p>2020 喜欢的电影：<br></p><ul><li><a href="https://movie.douban.com/subject/1756073/"><strong>我们俩 / You and Me 马俪文 (2005)</strong></a>：小成本的人情故事。</li><li><a href="https://movie.douban.com/subject/6538866/"><strong>极速车王 / Ford v Ferrarri 詹姆斯·曼高德 (2019)</strong></a>: 激动人心，手掌冒汗。</li><li><a href="https://movie.douban.com/subject/1303021/"><strong>小鞋子 / بچههای آسمان 马基德·马基迪 (1997)</strong></a>: 孩子们的眼睛太会说话了。</li><li><a href="https://movie.douban.com/subject/27202818/"><strong>婚姻故事 / Marriage Story 诺亚·鲍姆巴赫 (2019)</strong></a>: 一个让人难过又绝望的故事：明明两个人都没有什么错，只是因为各自的追求而让婚姻与理想中的生活如此格格不入。其实也可以不离婚的，只不过整个事情从一开始就再也没有回头路了。</li><li><a href="https://movie.douban.com/subject/6722879/"><strong>她 / Her 斯派克·琼斯 (2013)</strong></a>:孤独所创造出来的精神世界就像毒品一样，如果上瘾了，就会沉溺其中，无法自拔。可是当我们从自我安慰的美梦中猛然惊醒，会感到巨大的无力感和空虚感交杂在一起，就好像整个世界都在离我们远去。</li></ul></li><li><p>2020喜欢的电视剧：<br></p><ul><li><a href="https://movie.douban.com/subject/3901388/"><strong>我爱我家 (1993)</strong></a>: 中国最好的情景喜剧。</li></ul></li></ul><hr><h2 id="新年愿望"><a href="#新年愿望" class="headerlink" title="新年愿望"></a>新年愿望</h2><ol><li>坚持写博客，学习笔记以及其他。</li><li>每周5小时高强度的有氧运动，保持体重。</li><li>自学日语</li><li>至少读40本书，完成阅读任务</li><li>至少看50部电影</li><li>领养一只猫</li><li>保证每天晚上11点30分前睡觉</li><li>有空的时候练字和画画（不强求）</li><li>每天写日记</li></ol><h3 id="2020的阅读任务"><a href="#2020的阅读任务" class="headerlink" title="2020的阅读任务"></a>2020的阅读任务</h3><ol><li>至少读5本去年没读过的作者的书</li><li>至少读完2本大部头</li><li>至少读5本想读列表内2015年前标记的书</li><li>至少读2本英文原版书</li><li>至少读4本往年诺奖得主的作品</li></ol><hr>]]></content>
    
    
    <summary type="html">Happy New Year</summary>
    
    
    
    <category term="生活记录" scheme="https://onesmallstep.vip/categories/%E7%94%9F%E6%B4%BB%E8%AE%B0%E5%BD%95/"/>
    
    
    <category term="ToDoList" scheme="https://onesmallstep.vip/tags/ToDoList/"/>
    
    <category term="Record" scheme="https://onesmallstep.vip/tags/Record/"/>
    
  </entry>
  
  <entry>
    <title>愿得年年，常见中秋月</title>
    <link href="https://onesmallstep.vip/2020/10/04/midautmn2020/"/>
    <id>https://onesmallstep.vip/2020/10/04/midautmn2020/</id>
    <published>2020-10-04T15:41:05.000Z</published>
    <updated>2020-10-04T16:01:32.478Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p>阴晴圆缺都休说，且喜人间好时节。好时节，愿得年年，常见中秋月。 </p><p>– <cite>徐有贞《中秋月》</cite></p></blockquote><p><img src="https://s1.ax1x.com/2020/10/04/0JNbxP.md.jpg" alt="0JNbxP.jpg"><br><img src="https://s1.ax1x.com/2020/10/04/0JNTPA.md.jpg" alt="0JNTPA.jpg"><br><img src="https://s1.ax1x.com/2020/10/04/0JNLKf.md.jpg" alt="0JNLKf.jpg"><br><img src="https://s1.ax1x.com/2020/10/05/0JUNid.md.jpg" alt="0JUNid.jpg"></p>]]></content>
    
    
    <summary type="html">此生此夜不长好，明月明年何处看？</summary>
    
    
    
    
    <category term="Record" scheme="https://onesmallstep.vip/tags/Record/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript Basic, JS入门笔记</title>
    <link href="https://onesmallstep.vip/2020/09/29/JavaScript-Basic/"/>
    <id>https://onesmallstep.vip/2020/09/29/JavaScript-Basic/</id>
    <published>2020-09-29T02:01:21.000Z</published>
    <updated>2020-09-29T02:04:55.772Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="JavaScript-Basic"><a href="#JavaScript-Basic" class="headerlink" title="JavaScript Basic"></a>JavaScript Basic</h1><h2 id="Comment-Your-Code"><a href="#Comment-Your-Code" class="headerlink" title="Comment Your Code"></a>Comment Your Code</h2><p>注释的两种方式:</p><ol><li>双斜线的单行注释//</li></ol><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// This is an in-line comment</span></span><br></pre></td></tr></table></figure><ol><li>斜线星号的多行注释</li></ol><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* This is a</span></span><br><span class="line"><span class="comment">multi-line comment */</span></span><br></pre></td></tr></table></figure><h2 id="Declare-JavaScript-Variables"><a href="#Declare-JavaScript-Variables" class="headerlink" title="Declare JavaScript Variables"></a>Declare JavaScript Variables</h2><p>声明变量：<br>JS里一共有7种变量类型：<strong>undefined, null, boolean, string, symbol, number, object</strong><br>在JS中使用 var 来声明变量</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourName</span><br></pre></td></tr></table></figure><h2 id="Storing-Values-with-the-Assignment-Operator"><a href="#Storing-Values-with-the-Assignment-Operator" class="headerlink" title="Storing Values with the Assignment Operator"></a>Storing Values with the Assignment Operator</h2><p>用等号给变量赋值, 赋值运算总是从右往左进行，等号右边的最终计算结果被赋予等号左边的变量</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">myVar = <span class="number">5</span>;</span><br></pre></td></tr></table></figure><h2 id="Initializing-Variables-with-the-Assignment-Operator"><a href="#Initializing-Variables-with-the-Assignment-Operator" class="headerlink" title="Initializing Variables with the Assignment Operator"></a>Initializing Variables with the Assignment Operator</h2><p>在声明变量时，给变量赋值初始化</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myVar = <span class="number">0</span>; <span class="comment">// Creates a new variable called myVar and assigns it an initial value of 0</span></span><br></pre></td></tr></table></figure><h2 id="Understanding-Uninitialized-Variables"><a href="#Understanding-Uninitialized-Variables" class="headerlink" title="Understanding Uninitialized Variables"></a>Understanding Uninitialized Variables</h2><p>当变量被声明时，他的初始值（如果没有手动设置初值）为<em>undefined</em></p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> a;</span><br><span class="line"><span class="keyword">var</span> b;</span><br><span class="line"><span class="keyword">var</span> c;</span><br><span class="line"></span><br><span class="line">a = a + <span class="number">1</span>; <span class="comment">// NaN</span></span><br><span class="line">b = b + <span class="number">5</span>; <span class="comment">// NaN</span></span><br><span class="line">c = c + <span class="string">" String!"</span>; <span class="comment">// undefined String!</span></span><br></pre></td></tr></table></figure><h2 id="Understanding-Case-Sensitivity-in-Variables"><a href="#Understanding-Case-Sensitivity-in-Variables" class="headerlink" title="Understanding Case Sensitivity in Variables"></a>Understanding Case Sensitivity in Variables</h2><p>在设置变量名时，编译器会区别变量名的大小写。所以当有两个变量的变量名字母相同，但大小写不同时，我们就要注意区分其中的区别。一般情况下，我们不推荐用大小写来区分不同的变量（除非有一些默认常量值，用全部的大写字母表示）</p><h2 id="Arithmetic-Operate-Two-Numbers-with-JavaScript"><a href="#Arithmetic-Operate-Two-Numbers-with-JavaScript" class="headerlink" title="Arithmetic Operate Two Numbers with JavaScript"></a>Arithmetic Operate Two Numbers with JavaScript</h2><p>加减乘除四则运算</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> sum = <span class="number">5</span> + <span class="number">10</span>; <span class="comment">// assigned 15</span></span><br><span class="line"><span class="keyword">var</span> sub = <span class="number">10</span> - <span class="number">5</span>; <span class="comment">// assigned 5</span></span><br><span class="line"><span class="keyword">var</span> mult = <span class="number">10</span> * <span class="number">5</span>; <span class="comment">// assigned 50</span></span><br><span class="line"><span class="keyword">var</span> div = <span class="number">10</span> / <span class="number">5</span>; <span class="comment">// assigned 2</span></span><br></pre></td></tr></table></figure><h2 id="Increment-Decrement-a-Number-with-JavaScript"><a href="#Increment-Decrement-a-Number-with-JavaScript" class="headerlink" title="Increment/Decrement a Number with JavaScript"></a>Increment/Decrement a Number with JavaScript</h2><p>自加减1</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">i++; <span class="comment">// i = i + 1;</span></span><br><span class="line">i--; <span class="comment">// i = i - 1;</span></span><br></pre></td></tr></table></figure><h2 id="Create-Decimal-Numbers-with-JavaScript"><a href="#Create-Decimal-Numbers-with-JavaScript" class="headerlink" title="Create Decimal Numbers with JavaScript"></a>Create Decimal Numbers with JavaScript</h2><p>JS的变量可以储存小数，小数通常被当作 <em>floating point numbers</em>,<em>floats</em></p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myDecimal = <span class="number">5.7</span>;</span><br></pre></td></tr></table></figure><h2 id="Finding-a-Remainder-in-JavaScript"><a href="#Finding-a-Remainder-in-JavaScript" class="headerlink" title="Finding a Remainder in JavaScript"></a>Finding a Remainder in JavaScript</h2><p>整数除法求商和余数</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myNum = <span class="number">5</span>; </span><br><span class="line">myNum % <span class="number">2</span> = <span class="number">1</span>;</span><br><span class="line"><span class="built_in">Math</span>.floor(<span class="number">5</span> / <span class="number">2</span>) = <span class="number">2</span>; <span class="comment">//Math.floor(x) 对x向小取整</span></span><br></pre></td></tr></table></figure><h2 id="Declare-String-Variables"><a href="#Declare-String-Variables" class="headerlink" title="Declare String Variables"></a>Declare String Variables</h2><p>声明字符串变量</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myStr = <span class="string">"Hello"</span>;</span><br></pre></td></tr></table></figure><h2 id="Escaping-Literal-Quotes-in-Strings"><a href="#Escaping-Literal-Quotes-in-Strings" class="headerlink" title="Escaping Literal Quotes in Strings"></a>Escaping Literal Quotes in Strings</h2><p>字符串中的一些转义字符</p><p><a href="https://www.notion.so/ac19bc5d660f455fa889faa8cca69a8c" target="_blank" rel="noopener">转义字符</a></p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> sampleStr = <span class="string">"Alan said, \"Peter is learning JavaScript\"."</span>;</span><br></pre></td></tr></table></figure><h2 id="Quoting-Strings-with-Single-Quotes"><a href="#Quoting-Strings-with-Single-Quotes" class="headerlink" title="Quoting Strings with Single Quotes"></a>Quoting Strings with Single Quotes</h2><p>在JavaScript 中，单引号和双引号都可以表示字符串变量，且效果相同</p><h2 id="Concatenating-Strings"><a href="#Concatenating-Strings" class="headerlink" title="Concatenating Strings"></a>Concatenating Strings</h2><p>用加号来连接字符串</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">'Hello '</span>+<span class="string">'World'</span>; <span class="comment">// "Hello World"</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> myStr = <span class="string">'Hello '</span>;</span><br><span class="line">myStr += <span class="string">'World'</span>; <span class="comment">// "Hello World"</span></span><br></pre></td></tr></table></figure><h2 id="Find-the-Length-of-a-String"><a href="#Find-the-Length-of-a-String" class="headerlink" title="Find the Length of a String"></a>Find the Length of a String</h2><p>求字符串的长度 string.length 返回长度值（包括空格）</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"Alan Peter"</span>.length; <span class="comment">// 10</span></span><br></pre></td></tr></table></figure><h2 id="Use-Bracket-Notation-to-Find-the-First-Character-in-a-String"><a href="#Use-Bracket-Notation-to-Find-the-First-Character-in-a-String" class="headerlink" title="Use Bracket Notation to Find the First Character in a String"></a>Use Bracket Notation to Find the First Character in a String</h2><p>用[]索引字符串中的某个字符<br>首字母：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> firstName = <span class="string">"Charles"</span>;</span><br><span class="line"><span class="keyword">var</span> firstLetter = firstName[<span class="number">0</span>]; <span class="comment">// firstLetter is "C"</span></span><br></pre></td></tr></table></figure><p>第n个字母（索引值为 n-1）：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> firstName = <span class="string">"Ada"</span>;</span><br><span class="line"><span class="keyword">var</span> secondLetterOfFirstName = firstName[<span class="number">1</span>]; <span class="comment">// secondLetterOfFirstName is "d"</span></span><br></pre></td></tr></table></figure><p>最后一个字母(用length得到字符串长度)：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> firstName = <span class="string">"Charles"</span>;</span><br><span class="line"><span class="keyword">var</span> lastLetter = firstName[firstName.length - <span class="number">1</span>]; <span class="comment">// lastLetter is "s"</span></span><br></pre></td></tr></table></figure><h2 id="Understand-String-Immutability"><a href="#Understand-String-Immutability" class="headerlink" title="Understand String Immutability"></a>Understand String Immutability</h2><p>在JS中，<strong>String</strong> 类型中的某个字符是不能改变的，只能将整个变量重新赋值</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myStr = <span class="string">"Bob"</span>;</span><br><span class="line">myStr[<span class="number">0</span>] = <span class="string">"J"</span>; <span class="comment">//报错</span></span><br></pre></td></tr></table></figure><p>正确的修改方法为：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myStr = <span class="string">"Bob"</span>;</span><br><span class="line">myStr = <span class="string">"Job"</span>;</span><br></pre></td></tr></table></figure><h2 id="Store-Multiple-Values-in-one-Variable-using-JavaScript-Arrays"><a href="#Store-Multiple-Values-in-one-Variable-using-JavaScript-Arrays" class="headerlink" title="Store Multiple Values in one Variable using JavaScript Arrays"></a>Store Multiple Values in one Variable using JavaScript Arrays</h2><p>用阵列储存多个数据：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> sandwich = [<span class="string">"peanut butter"</span>, <span class="string">"jelly"</span>, <span class="string">"bread"</span>].</span><br></pre></td></tr></table></figure><h2 id="Nest-one-Array-within-Another-Array"><a href="#Nest-one-Array-within-Another-Array" class="headerlink" title="Nest one Array within Another Array"></a>Nest one Array within Another Array</h2><p>阵列的元素可以是子阵列，这样的阵列也叫多维阵列，可以使用索引读取和修改数据：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myArray = [[<span class="string">"Bulls"</span>, <span class="number">23</span>], [<span class="string">"White Sox"</span>, <span class="number">45</span>]];</span><br><span class="line">myArray[<span class="number">1</span>][<span class="number">0</span>]; <span class="comment">// "White Box"</span></span><br><span class="line">myArray[<span class="number">1</span>][<span class="number">1</span>] = <span class="number">55</span>; <span class="comment">// ["Bulls", 23], ["White Sox", 55]</span></span><br></pre></td></tr></table></figure><h2 id="Manipulate-Arrays-With-push-pop-shift-unshift"><a href="#Manipulate-Arrays-With-push-pop-shift-unshift" class="headerlink" title="Manipulate Arrays With push(), pop(), shift(), unshift()"></a>Manipulate Arrays With push(), pop(), shift(), unshift()</h2><p>array.push(x) 把x加到阵列的最后一位，函数返回值为array的元素个数<br>array.pop() 移除阵列的最后一个元素，返回最后一个元素的值<br>array.shift() 移除阵列的第一个元素，返回这个元素的值<br>array.unshift(x) 把x加到阵列的第一位，函数返回值为array的元素个数</p><h2 id="Write-Reusable-JavaScript-with-Functions"><a href="#Write-Reusable-JavaScript-with-Functions" class="headerlink" title="Write Reusable JavaScript with Functions"></a>Write Reusable JavaScript with Functions</h2><p>JS的方程示例</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">functionName</span>(<span class="params">input</span>) </span>&#123;</span><br><span class="line">  <span class="built_in">console</span>.log(input);<span class="comment">//方程执行的内容</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Global-Scope-and-Functions"><a href="#Global-Scope-and-Functions" class="headerlink" title="Global Scope and Functions"></a>Global Scope and Functions</h2><p>在JS中， 在方程外定义的变量是全局可见的，方程内的局部变量在另一个方程里为<em>undefined</em></p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myGlobal = <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">fun1</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line">  <span class="comment">// Assign 5 to oopsGlobal Here</span></span><br><span class="line"><span class="keyword">var</span> oopsGlobal = <span class="number">5</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">fun2</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line">  <span class="keyword">var</span> output = <span class="string">""</span>;</span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> myGlobal != <span class="string">"undefined"</span>) &#123;</span><br><span class="line">    output += <span class="string">"myGlobal: "</span> + myGlobal;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> oopsGlobal != <span class="string">"undefined"</span>) &#123;<span class="comment">// 不会执行，因为局部变量没有定义</span></span><br><span class="line">    output += <span class="string">" oopsGlobal: "</span> + oopsGlobal;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="built_in">console</span>.log(output); <span class="comment">// myGlobal: 1</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Local-Scope-and-Functions"><a href="#Local-Scope-and-Functions" class="headerlink" title="Local Scope and Functions"></a>Local Scope and Functions</h2><p>局部变量在方程之外是不可见的</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">myLocalScope</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line"><span class="meta">  'use strict'</span>;</span><br><span class="line">  <span class="built_in">console</span>.log(<span class="string">'inside myLocalScope'</span>, myVar);</span><br><span class="line">&#125;</span><br><span class="line">myLocalScope();</span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">'outside myLocalScope'</span>, myVar);</span><br><span class="line"><span class="comment">// ReferenceError: myVar is not defined</span></span><br></pre></td></tr></table></figure><h2 id="Global-vs-Local-Scope-in-Functions"><a href="#Global-vs-Local-Scope-in-Functions" class="headerlink" title="Global vs. Local Scope in Functions"></a>Global vs. Local Scope in Functions</h2><p>如果全局变量和局部变量重名，那么优先使用方程内部的局部变量，但是全局变量不会因此被修改。</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> someVar = <span class="string">"Hat"</span>;</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">myFun</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line">  <span class="keyword">var</span> someVar = <span class="string">"Head"</span>;</span><br><span class="line">  <span class="keyword">return</span> someVar; <span class="comment">// return "Head"</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(someVar) <span class="comment">// Hat</span></span><br></pre></td></tr></table></figure><h2 id="Return-a-Value-from-a-Function-with-Return"><a href="#Return-a-Value-from-a-Function-with-Return" class="headerlink" title="Return a Value from a Function with Return"></a>Return a Value from a Function with Return</h2><p>你可以设置函数变量把参数传递给局部变量，也可以使用 <em>return</em> 把参数传递回方程外部：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">plusThree</span>(<span class="params">num</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> num + <span class="number">3</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">var</span> answer = plusThree(<span class="number">5</span>); <span class="comment">// 8</span></span><br></pre></td></tr></table></figure><h2 id="Understanding-Undefined-Value-returned-from-a-Function"><a href="#Understanding-Undefined-Value-returned-from-a-Function" class="headerlink" title="Understanding Undefined Value returned from a Function"></a>Understanding Undefined Value returned from a Function</h2><p>一个函数可以有 <em>return</em> 声明，也可以没有。当一个函数没有<em>return<em>时，它的返回值是</em>undefined</em></p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> sum = <span class="number">0</span>;</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">addSum</span>(<span class="params">num</span>) </span>&#123;</span><br><span class="line">  sum = sum + num;</span><br><span class="line">&#125;</span><br><span class="line">addSum(<span class="number">3</span>); <span class="comment">// sum will be modified but returned value is undefined</span></span><br></pre></td></tr></table></figure><h2 id="Assignment-with-a-Returned-Value"><a href="#Assignment-with-a-Returned-Value" class="headerlink" title="Assignment with a Returned Value"></a>Assignment with a Returned Value</h2><p>函数的返回值通过等号赋值给变量：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ourSum = sum(<span class="number">5</span>, <span class="number">12</span>);<span class="comment">// ourSum = 17;</span></span><br></pre></td></tr></table></figure><h2 id="Understanding-Boolean-Values"><a href="#Understanding-Boolean-Values" class="headerlink" title="Understanding Boolean Values"></a>Understanding Boolean Values</h2><p>布尔型变量， 布尔型变量只有两种：<em>true</em> 和 <em>false</em></p><h2 id="Use-Conditional-Logic-with-If-Statements"><a href="#Use-Conditional-Logic-with-If-Statements" class="headerlink" title="Use Conditional Logic with If Statements"></a>Use Conditional Logic with If Statements</h2><p>If 语句的写法和条件分支情况：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (condition is <span class="literal">true</span>) &#123;</span><br><span class="line">  statement is executed</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// Example</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span> (<span class="params">myCondition</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">if</span> (myCondition) &#123;</span><br><span class="line">     <span class="keyword">return</span> <span class="string">"It was true"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"It was false"</span>;</span><br><span class="line">&#125;</span><br><span class="line">test(<span class="literal">true</span>);  <span class="comment">// returns "It was true"</span></span><br><span class="line">test(<span class="literal">false</span>); <span class="comment">// returns "It was false"</span></span><br></pre></td></tr></table></figure><h2 id="Comparison-with-the-Equality-Operator"><a href="#Comparison-with-the-Equality-Operator" class="headerlink" title="Comparison with the Equality Operator"></a>Comparison with the Equality Operator</h2><p>比较：相等的情况，相等 ==，强等于 ===</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">equalityTest</span>(<span class="params">myVal</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">if</span> (myVal == <span class="number">10</span>) &#123;</span><br><span class="line">     <span class="keyword">return</span> <span class="string">"Equal"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"Not Equal"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>比较：强等于情况下字符串变量不会转化成数字</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">3</span> ===  <span class="number">3</span>   <span class="comment">// true</span></span><br><span class="line"><span class="number">3</span> === <span class="string">'3'</span>  <span class="comment">// false\</span></span><br></pre></td></tr></table></figure><p>比较：不等于 !=</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span> !=  <span class="number">2</span>     <span class="comment">// true</span></span><br><span class="line"><span class="number">1</span> != <span class="string">"1"</span>    <span class="comment">// false</span></span><br><span class="line"><span class="number">1</span> != <span class="string">'1'</span>    <span class="comment">// false</span></span><br><span class="line"><span class="number">1</span> != <span class="literal">true</span>   <span class="comment">// false</span></span><br><span class="line"><span class="number">0</span> != <span class="literal">false</span>  <span class="comment">// false</span></span><br></pre></td></tr></table></figure><p>比较：强不等于 ! ==</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">3</span> !==  <span class="number">3</span>   <span class="comment">// false</span></span><br><span class="line"><span class="number">3</span> !== <span class="string">'3'</span>  <span class="comment">// true</span></span><br><span class="line"><span class="number">4</span> !==  <span class="number">3</span>   <span class="comment">// true</span></span><br></pre></td></tr></table></figure><p>比较：大于 &gt;</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">5</span>   &gt;  <span class="number">3</span>   <span class="comment">// true</span></span><br><span class="line"><span class="number">7</span>   &gt; <span class="string">'3'</span>  <span class="comment">// true</span></span><br><span class="line"><span class="number">2</span>   &gt;  <span class="number">3</span>   <span class="comment">// false</span></span><br><span class="line"><span class="string">'1'</span> &gt;  <span class="number">9</span>   <span class="comment">// false</span></span><br></pre></td></tr></table></figure><p>比较：大于或等于 &gt; =</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">6</span>   &gt;=  <span class="number">6</span>   <span class="comment">// true</span></span><br><span class="line"><span class="number">7</span>   &gt;= <span class="string">'3'</span>  <span class="comment">// true</span></span><br><span class="line"><span class="number">2</span>   &gt;=  <span class="number">3</span>   <span class="comment">// false</span></span><br><span class="line"><span class="string">'7'</span> &gt;=  <span class="number">9</span>   <span class="comment">// false</span></span><br></pre></td></tr></table></figure><p>比较：小于 &lt;</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">2</span>   &lt; <span class="number">5</span>  <span class="comment">// true</span></span><br><span class="line"><span class="string">'3'</span> &lt; <span class="number">7</span>  <span class="comment">// true</span></span><br><span class="line"><span class="number">5</span>   &lt; <span class="number">5</span>  <span class="comment">// false</span></span><br><span class="line"><span class="number">3</span>   &lt; <span class="number">2</span>  <span class="comment">// false</span></span><br><span class="line"><span class="string">'8'</span> &lt; <span class="number">4</span>  <span class="comment">// false</span></span><br></pre></td></tr></table></figure><p>比较：小于或等于 &lt; =</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">4</span>   &lt;= <span class="number">5</span>  <span class="comment">// true</span></span><br><span class="line"><span class="string">'7'</span> &lt;= <span class="number">7</span>  <span class="comment">// true</span></span><br><span class="line"><span class="number">5</span>   &lt;= <span class="number">5</span>  <span class="comment">// true</span></span><br><span class="line"><span class="number">3</span>   &lt;= <span class="number">2</span>  <span class="comment">// false</span></span><br><span class="line"><span class="string">'8'</span> &lt;= <span class="number">4</span>  <span class="comment">// false</span></span><br></pre></td></tr></table></figure><h2 id="Comparisons-with-the-Logical-And-Operators"><a href="#Comparisons-with-the-Logical-And-Operators" class="headerlink" title="Comparisons with the Logical And Operators"></a>Comparisons with the Logical And Operators</h2><p>逻辑运算符：与 and</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (num &gt; <span class="number">5</span> &amp;&amp; num &lt; <span class="number">10</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"Yes"</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="string">"No"</span>;</span><br></pre></td></tr></table></figure><p>逻辑运算符：或 or</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (num &gt; <span class="number">10</span> || num &lt; <span class="number">5</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"No"</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="string">"Yes"</span>;</span><br></pre></td></tr></table></figure><h2 id="Introducing-Else-Else-if-Statements"><a href="#Introducing-Else-Else-if-Statements" class="headerlink" title="Introducing Else, Else if Statements"></a>Introducing Else, Else if Statements</h2><p>当条件判断结果为 false, 使用 else 和 else if 来表示其他的分支情况：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (num &gt; <span class="number">10</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"Bigger than 10"</span>;</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"10 or Less"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (num &gt; <span class="number">15</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"Bigger than 15"</span>;</span><br><span class="line">&#125; <span class="keyword">else</span> <span class="keyword">if</span> (num &lt; <span class="number">5</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"Smaller than 5"</span>;</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">"Between 5 and 15"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Chaining-If-Else-Statements"><a href="#Chaining-If-Else-Statements" class="headerlink" title="Chaining If Else Statements"></a>Chaining If Else Statements</h2><p>把 if else 语句连接起来</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (condition1) &#123;</span><br><span class="line">  statement1</span><br><span class="line">&#125; <span class="keyword">else</span> <span class="keyword">if</span> (condition2) &#123;</span><br><span class="line">  statement2</span><br><span class="line">&#125; <span class="keyword">else</span> <span class="keyword">if</span> (condition3) &#123;</span><br><span class="line">  statement3</span><br><span class="line">. . .</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">  statementN</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Selecting-from-Many-Options-with-Switch-Statements"><a href="#Selecting-from-Many-Options-with-Switch-Statements" class="headerlink" title="Selecting from Many Options with Switch Statements"></a>Selecting from Many Options with Switch Statements</h2><p>使用 Switch 语句从一个判断条件的多种情况中选择：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">switch</span>(lowercaseLetter) &#123;</span><br><span class="line">  <span class="keyword">case</span> <span class="string">"a"</span>:</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">"A"</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">  <span class="keyword">case</span> <span class="string">"b"</span>:</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">"B"</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>添加默认情况：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">switch</span> (num) &#123;</span><br><span class="line">  <span class="keyword">case</span> value1:</span><br><span class="line">    statement1;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">  <span class="keyword">case</span> value2:</span><br><span class="line">    statement2;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">...</span><br><span class="line">  <span class="keyword">default</span>:</span><br><span class="line">    defaultStatement;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>当多种情况结果相同时，可以将代码简化省略：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">switch</span>(val) &#123;</span><br><span class="line">  <span class="keyword">case</span> <span class="number">1</span>:</span><br><span class="line">  <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line">  <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">    result = <span class="string">"1, 2, or 3"</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">  <span class="keyword">case</span> <span class="number">4</span>:</span><br><span class="line">    result = <span class="string">"4 alone"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Build-JavaScript-Objects"><a href="#Build-JavaScript-Objects" class="headerlink" title="Build JavaScript Objects"></a>Build JavaScript Objects</h2><p>建立 JS 对象，对象变量和数组类似，但是在取得和修改对象中的数据时，我们会用到对象的属性 <em>properties</em>.</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> cat = &#123;</span><br><span class="line">  <span class="string">"name"</span>: <span class="string">"Whiskers"</span>,</span><br><span class="line">  <span class="string">"legs"</span>: <span class="number">4</span>,</span><br><span class="line">  <span class="string">"tails"</span>: <span class="number">1</span>,</span><br><span class="line">  <span class="string">"enemies"</span>: [<span class="string">"Water"</span>, <span class="string">"Dogs"</span>]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>我们用“.”记号来获得对象的属性值：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myObj = &#123;</span><br><span class="line">  prop1: <span class="string">"val1"</span>,</span><br><span class="line">  prop2: <span class="string">"val2"</span></span><br><span class="line">&#125;;</span><br><span class="line"><span class="keyword">var</span> prop1val = myObj.prop1; <span class="comment">// val1</span></span><br><span class="line"><span class="keyword">var</span> prop2val = myObj.prop2; <span class="comment">// val2</span></span><br></pre></td></tr></table></figure><p>我们也可以用方括号“[ ]” 来读取数据：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myObj = &#123;</span><br><span class="line">  <span class="string">"Space Name"</span>: <span class="string">"Kirk"</span>,</span><br><span class="line">  <span class="string">"More Space"</span>: <span class="string">"Spock"</span>,</span><br><span class="line">  <span class="string">"NoSpace"</span>: <span class="string">"USS Enterprise"</span></span><br><span class="line">&#125;;</span><br><span class="line">myObj[<span class="string">"Space Name"</span>]; <span class="comment">// Kirk</span></span><br><span class="line">myObj[<span class="string">'More Space'</span>]; <span class="comment">// Spock</span></span><br><span class="line">myObj[<span class="string">"NoSpace"</span>];    <span class="comment">// USS Enterprise</span></span><br></pre></td></tr></table></figure><p>更新对象的属性：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourDog = &#123;</span><br><span class="line">  <span class="string">"name"</span>: <span class="string">"Camper"</span>,</span><br><span class="line">  <span class="string">"legs"</span>: <span class="number">4</span>,</span><br><span class="line">  <span class="string">"tails"</span>: <span class="number">1</span>,</span><br><span class="line">  <span class="string">"friends"</span>: [<span class="string">"everything!"</span>]</span><br><span class="line">&#125;;</span><br><span class="line">ourDog.name = <span class="string">"Happy Camper"</span>;</span><br><span class="line">ourDog[<span class="string">"name"</span>] = <span class="string">"Happy Camper"</span>;</span><br></pre></td></tr></table></figure><p>添加新属性：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ourDog.bark = <span class="string">"bow-wow"</span>;</span><br><span class="line">ourDog[<span class="string">"bark"</span>] = <span class="string">"bow-wow"</span>;</span><br></pre></td></tr></table></figure><p>删除属性：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourDog = &#123;</span><br><span class="line">  <span class="string">"name"</span>: <span class="string">"Camper"</span>,</span><br><span class="line">  <span class="string">"legs"</span>: <span class="number">4</span>,</span><br><span class="line">  <span class="string">"tails"</span>: <span class="number">1</span>,</span><br><span class="line">  <span class="string">"friends"</span>: [<span class="string">"everything!"</span>],</span><br><span class="line">  <span class="string">"bark"</span>: <span class="string">"bow-wow"</span></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">delete</span> ourDog.bark;</span><br></pre></td></tr></table></figure><h2 id="Testing-Objects-for-Properties"><a href="#Testing-Objects-for-Properties" class="headerlink" title="Testing Objects for Properties"></a>Testing Objects for Properties</h2><p>为了测试对象是否存在某一属性， 我们可以使用命令 <em>.hasOwnProperty(proname)</em> . 函数会返回布尔值。</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> myObj = &#123;</span><br><span class="line">  top: <span class="string">"hat"</span>,</span><br><span class="line">  bottom: <span class="string">"pants"</span></span><br><span class="line">&#125;;</span><br><span class="line">myObj.hasOwnProperty(<span class="string">"top"</span>);    <span class="comment">// true</span></span><br><span class="line">myObj.hasOwnProperty(<span class="string">"middle"</span>); <span class="comment">// false</span></span><br></pre></td></tr></table></figure><h2 id="Accessing-Nested-Objects"><a href="#Accessing-Nested-Objects" class="headerlink" title="Accessing Nested Objects"></a>Accessing Nested Objects</h2><p>当对象变量较为复杂，层层嵌套时，可以一层层读取：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourStorage = &#123;</span><br><span class="line">  <span class="string">"desk"</span>: &#123;</span><br><span class="line">    <span class="string">"drawer"</span>: <span class="string">"stapler"</span></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="string">"cabinet"</span>: &#123;</span><br><span class="line">    <span class="string">"top drawer"</span>: &#123; </span><br><span class="line">      <span class="string">"folder1"</span>: <span class="string">"a file"</span>,</span><br><span class="line">      <span class="string">"folder2"</span>: <span class="string">"secrets"</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="string">"bottom drawer"</span>: <span class="string">"soda"</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br><span class="line">ourStorage.cabinet[<span class="string">"top drawer"</span>].folder2;  <span class="comment">// "secrets"</span></span><br><span class="line">ourStorage.desk.drawer; <span class="comment">// "stapler"</span></span><br></pre></td></tr></table></figure><p>对于多维对象阵列，可以使用同样的方法：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourPets = [</span><br><span class="line">  &#123;</span><br><span class="line">    animalType: <span class="string">"cat"</span>,</span><br><span class="line">    names: [</span><br><span class="line">      <span class="string">"Meowzer"</span>,</span><br><span class="line">      <span class="string">"Fluffy"</span>,</span><br><span class="line">      <span class="string">"Kit-Cat"</span></span><br><span class="line">    ]</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    animalType: <span class="string">"dog"</span>,</span><br><span class="line">    names: [</span><br><span class="line">      <span class="string">"Spot"</span>,</span><br><span class="line">      <span class="string">"Bowser"</span>,</span><br><span class="line">      <span class="string">"Frankie"</span></span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">];</span><br><span class="line">ourPets[<span class="number">0</span>].names[<span class="number">1</span>]; <span class="comment">// "Fluffy"</span></span><br><span class="line">ourPets[<span class="number">1</span>].names[<span class="number">0</span>]; <span class="comment">// "Spot"</span></span><br></pre></td></tr></table></figure><h2 id="Iterate-with-JavaScript-Loops"><a href="#Iterate-with-JavaScript-Loops" class="headerlink" title="Iterate with JavaScript Loops"></a>Iterate with JavaScript Loops</h2><p>while 循环：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourArray = [];</span><br><span class="line"><span class="keyword">var</span> i = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(i &lt; <span class="number">5</span>) &#123;</span><br><span class="line">  ourArray.push(i);</span><br><span class="line">  i++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// ourArray = [0, 1, 2, 3, 4]</span></span><br></pre></td></tr></table></figure><p>for 循环:</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourArray = [];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; <span class="number">5</span>; i++) &#123;</span><br><span class="line">  ourArray.push(i);</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// ourArray = [0, 1, 2, 3, 4]</span></span><br></pre></td></tr></table></figure><p>do … while 循环：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> ourArray = [];</span><br><span class="line"><span class="keyword">var</span> i = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">do</span> &#123;</span><br><span class="line">  ourArray.push(i);</span><br><span class="line">  i++;</span><br><span class="line">&#125; <span class="keyword">while</span> (i &lt; <span class="number">5</span>);</span><br></pre></td></tr></table></figure><h2 id="Replace-Loops-using-Recursion"><a href="#Replace-Loops-using-Recursion" class="headerlink" title="Replace Loops using Recursion"></a>Replace Loops using Recursion</h2><p>使用递归代替循环：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">multiply</span>(<span class="params">arr, n</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">var</span> product = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; n; i++) &#123;</span><br><span class="line">        product *= arr[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> product;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">multiply</span>(<span class="params">arr, n</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (n &lt;= <span class="number">0</span>) &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">      <span class="keyword">return</span> multiply(arr, n - <span class="number">1</span>) * arr[n - <span class="number">1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure><h2 id="Generate-Random-Fractions-with-JavaScript"><a href="#Generate-Random-Fractions-with-JavaScript" class="headerlink" title="Generate Random Fractions with JavaScript"></a>Generate Random Fractions with JavaScript</h2><p>生成随机数：<em>Math.randon()</em> 会生成一个0（包括）到1（不包括）之间的数：</p><p>生成一个整数：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1.</span> Use <span class="built_in">Math</span>.random() to generate a random decimal.</span><br><span class="line"><span class="number">2.</span> Multiply that random decimal by <span class="number">20.</span></span><br><span class="line"><span class="number">3.</span> Use another <span class="function"><span class="keyword">function</span>, <span class="title">Math</span>.<span class="title">floor</span>(<span class="params"></span>) <span class="title">to</span> <span class="title">round</span> <span class="title">the</span> <span class="title">number</span> <span class="title">down</span> <span class="title">to</span> <span class="title">its</span> <span class="title">nearest</span> <span class="title">whole</span> <span class="title">number</span>.</span></span><br></pre></td></tr></table></figure><p>在范围[a,b] 之间生成随机数：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Math</span>.floor(<span class="built_in">Math</span>.random() * (max - min + <span class="number">1</span>)) + min</span><br></pre></td></tr></table></figure><h2 id="Use-the-parseInt-Function"><a href="#Use-the-parseInt-Function" class="headerlink" title="Use the parseInt Function"></a>Use the parseInt Function</h2><p>方程 parseInt() 将字符串转化为整型数字：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> a = <span class="built_in">parseInt</span>(<span class="string">"007"</span>); <span class="comment">// a = 7</span></span><br></pre></td></tr></table></figure><p>方程 parseInt() 还可以设置转换数字的进制：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> a = <span class="built_in">parseInt</span>(<span class="string">"11"</span>, <span class="number">2</span>);<span class="comment">// a =3</span></span><br></pre></td></tr></table></figure><h2 id="Use-the-Conditional-Ternary-Operator"><a href="#Use-the-Conditional-Ternary-Operator" class="headerlink" title="Use the Conditional (Ternary) Operator"></a>Use the Conditional (Ternary) Operator</h2><p>条件运算符：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">findGreater</span>(<span class="params">a, b</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">if</span>(a &gt; b) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">"a is greater"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">"b is greater"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">findGreater</span>(<span class="params">a, b</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> a &gt; b ? <span class="string">"a is greater"</span> : <span class="string">"b is greater"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>多个条件运算符：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">findGreaterOrEqual</span>(<span class="params">a, b</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">if</span> (a === b) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">"a and b are equal"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">if</span> (a &gt; b) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">"a is greater"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">"b is greater"</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">findGreaterOrEqual</span>(<span class="params">a, b</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> (a === b) ? <span class="string">"a and b are equal"</span> </span><br><span class="line">    : (a &gt; b) ? <span class="string">"a is greater"</span> </span><br><span class="line">    : <span class="string">"b is greater"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Use-Recursion-to-Create-a-Countdown"><a href="#Use-Recursion-to-Create-a-Countdown" class="headerlink" title="Use Recursion to Create a Countdown"></a>Use Recursion to Create a Countdown</h2><p>使用递归来创造一个递减数列：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">countup</span>(<span class="params">n</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">if</span> (n &lt; <span class="number">1</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> [];</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="keyword">const</span> countArray = countup(n - <span class="number">1</span>);</span><br><span class="line">    countArray.push(n);</span><br><span class="line">    <span class="keyword">return</span> countArray;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">console</span>.log(countup(<span class="number">5</span>)); <span class="comment">// [ 1, 2, 3, 4, 5 ]</span></span><br></pre></td></tr></table></figure><h2 id="Use-Recursion-to-Create-a-Range-of-Numbers"><a href="#Use-Recursion-to-Create-a-Range-of-Numbers" class="headerlink" title="Use Recursion to Create a Range of Numbers"></a>Use Recursion to Create a Range of Numbers</h2><p>使用递归来创造某一范围内的整数数列：</p><figure class="highlight jsx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">rangeOfNumbers</span>(<span class="params">startNum, endNum</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> startNum === endNum</span><br><span class="line">    ? [startNum]</span><br><span class="line">    : rangeOfNumbers(startNum, endNum - <span class="number">1</span>).concat(endNum);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="JavaScript" scheme="https://onesmallstep.vip/tags/JavaScript/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 9 Python计算生态概览</title>
    <link href="https://onesmallstep.vip/2020/09/27/PythonClass9/"/>
    <id>https://onesmallstep.vip/2020/09/27/PythonClass9/</id>
    <published>2020-09-27T11:50:59.000Z</published>
    <updated>2020-09-27T12:14:20.293Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="9-Python计算生态概览"><a href="#9-Python计算生态概览" class="headerlink" title="9 Python计算生态概览"></a>9 Python计算生态概览</h1><h2 id="9-1-从数据处理到人工智能"><a href="#9-1-从数据处理到人工智能" class="headerlink" title="9.1 从数据处理到人工智能"></a>9.1 从数据处理到人工智能</h2><ul><li><p>数据表示→数据清洗→数据统计→数据可视化→数据挖掘→人工智能</p></li><li><p>数据表示：采用合适方式用程序表达数据</p></li><li><p>数据清理：数据归一化、数据转换、异常值处理</p></li><li><p>数据统计：数据的概要理解，数量、分布、中位数等</p></li><li><p>数据可视化：直观展现数据内涵的方式</p></li><li><p>数据挖掘：从数据分析获得知识，产生数据外的价值</p></li><li><p>人工智能：数据、语言、图像、视觉等方面深度分析与决策</p></li><li><p>Python库之数据分析：</p><ul><li><p>Numpy：表达N维数组的最基础库</p><p><img src="https://s1.ax1x.com/2020/09/27/0ACUMQ.png" alt="0ACUMQ.png"></p></li><li><p>Pandas：Python数据分析高层次应用库</p><ul><li>Series = 索引 + 一维数据</li><li>DataFrame = 行列索引 + 二维数据</li></ul></li><li><p>SciPy：数学、科学和工程计算功能库</p><ul><li><p>提供了一批数学算法及工程数据运算工能</p></li><li><p>类似Matlab，可用于如傅立叶变换、信号处理等应用</p><p><img src="https://s1.ax1x.com/2020/09/27/0AC0Zn.png" alt="0AC0Zn.png"></p></li></ul></li><li><p>Matplotlib：高质量的二维数据可视化功能库</p><p>  <img src="https://s1.ax1x.com/2020/09/27/0ACBaq.png" alt="0ACBaq.png"></p></li><li><p>Seaborn：统计类数据可视化功能库</p><ul><li><p>提供了一批高层次的统计类数据可视化展示效果</p></li><li><p>主要展示数据间分布、分类和线性关系等内容</p><p><img src="https://s1.ax1x.com/2020/09/27/0ACarj.png" alt="0ACarj.png"></p></li></ul></li><li><p>Mayavi：三维科学数据可视化功能库</p><p>  <img src="https://s1.ax1x.com/2020/09/27/0ACdqs.png" alt="0ACdqs.png"></p></li></ul></li><li><p>Python库之文本处理</p><ul><li><p>PyPDF2：用来处理pdf文件的工具集</p><ul><li><p>提供了一批处理PDF文件的计算功能</p></li><li><p>PDF文件的合并：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> PyPDF2 <span class="keyword">import</span> PdfFileReader,PdfFileMerger</span><br><span class="line">merger = PdfFileMerger()</span><br><span class="line">input1 = open(<span class="string">'document1.pdf'</span>,<span class="string">'rb'</span>)</span><br><span class="line">input2 = open(<span class="string">'document2.pdf'</span>,<span class="string">'rb'</span>)</span><br><span class="line">merger.append(fileobj = input1, pages = (<span class="number">0</span>,<span class="number">3</span>))</span><br><span class="line">merger.merge(position = <span class="number">2</span>,fileobj = input2, pages = (<span class="number">0</span>,<span class="number">1</span>))</span><br><span class="line">output = open(<span class="string">'document-out.pdf'</span>,<span class="string">'wb'</span>)</span><br><span class="line">merger.write(output)</span><br></pre></td></tr></table></figure></li></ul></li><li><p>NLTK：自然语言文本处理第三方库</p><ul><li><p>提供了一批简单易用的自然语言文本处理功能</p></li><li><p>支持语言文本分类、标记、语法句法、语义分析</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> nltk.corpus <span class="keyword">import</span> treebank</span><br><span class="line">t = treebank.parsed_sents(<span class="string">'wsj_0001.mrg'</span>)[<span class="number">0</span>]</span><br><span class="line">t.draw()</span><br></pre></td></tr></table></figure><p><img src="https://s1.ax1x.com/2020/09/27/0ACtxg.png" alt="0ACtxg.png"></p></li></ul></li><li><p>Python-docx：创建或更新Microsoft Word文件的第三方库</p></li><li><p>Python库之机器学习：</p><ul><li>Scikit-learn：机器学习方法工具集<ul><li>提供一批统一化的机器学习方法功能接口</li><li>提供聚类、分类、回归、强化学习等计算功能</li></ul></li><li>TensorFlow：谷歌公司推动的开源机器学习框架<ul><li>将数据流图作为基础，图节点代表运算，边代表张量</li></ul></li><li>MXNet：基于神经网络的深度学习计算框架<ul><li>提供可拓展的神经网络深度学习计算功能</li><li>可用于自动驾驶、机器翻译、语音识别等众多领域</li></ul></li></ul></li></ul></li></ul><h2 id="9-2-实例15：霍兰德人格分析雷达图"><a href="#9-2-实例15：霍兰德人格分析雷达图" class="headerlink" title="9.2 实例15：霍兰德人格分析雷达图"></a>9.2 实例15：霍兰德人格分析雷达图</h2><ul><li><p>霍兰德人格分析</p><ul><li><p>人格兴趣与职业之间应有一种内在的对应关系</p></li><li><p>人格分析：研究型、艺术型、社会型、企业型、传统型、现实型</p></li><li><p>职业：工程师、实验员、艺术家、推销员、记事员、社会工作者</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#HollandRadarDraw</span></span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line"><span class="keyword">import</span> matplotlib</span><br><span class="line">matplotlib.rcParams[<span class="string">'font.family'</span>]=<span class="string">'SimHei'</span></span><br><span class="line">radar_labels = np.array([<span class="string">'研究型(I)'</span>,<span class="string">'艺术型(A)'</span>,<span class="string">'社会型(S)'</span>,\</span><br><span class="line">                         <span class="string">'企业型(E)'</span>,<span class="string">'常规型(C)'</span>,<span class="string">'现实型(R)'</span>]) <span class="comment">#雷达标签</span></span><br><span class="line">nAttr = <span class="number">6</span></span><br><span class="line">data = np.array([[<span class="number">0.40</span>, <span class="number">0.32</span>, <span class="number">0.35</span>, <span class="number">0.30</span>, <span class="number">0.30</span>, <span class="number">0.88</span>],</span><br><span class="line">                 [<span class="number">0.85</span>, <span class="number">0.35</span>, <span class="number">0.30</span>, <span class="number">0.40</span>, <span class="number">0.40</span>, <span class="number">0.30</span>],</span><br><span class="line">                 [<span class="number">0.43</span>, <span class="number">0.89</span>, <span class="number">0.30</span>, <span class="number">0.28</span>, <span class="number">0.22</span>, <span class="number">0.30</span>],</span><br><span class="line">                 [<span class="number">0.30</span>, <span class="number">0.25</span>, <span class="number">0.48</span>, <span class="number">0.85</span>, <span class="number">0.45</span>, <span class="number">0.40</span>],</span><br><span class="line">                 [<span class="number">0.20</span>, <span class="number">0.38</span>, <span class="number">0.87</span>, <span class="number">0.45</span>, <span class="number">0.32</span>, <span class="number">0.28</span>],</span><br><span class="line">                 [<span class="number">0.34</span>, <span class="number">0.31</span>, <span class="number">0.38</span>, <span class="number">0.40</span>, <span class="number">0.92</span>, <span class="number">0.28</span>]]) <span class="comment">#数据值</span></span><br><span class="line">data_labels = (<span class="string">'艺术家'</span>, <span class="string">'实验员'</span>, <span class="string">'工程师'</span>, <span class="string">'推销员'</span>, <span class="string">'社会工作者'</span>,<span class="string">'记事员'</span>)</span><br><span class="line">angles = np.linspace(<span class="number">0</span>, <span class="number">2</span>*np.pi, nAttr, endpoint=<span class="literal">False</span>)</span><br><span class="line">data = np.concatenate((data, [data[<span class="number">0</span>]]))</span><br><span class="line">angles = np.concatenate((angles, [angles[<span class="number">0</span>]]))</span><br><span class="line">fig = plt.figure(facecolor=<span class="string">"white"</span>)</span><br><span class="line">plt.subplot(<span class="number">111</span>, polar=<span class="literal">True</span>)</span><br><span class="line">plt.plot(angles,data,<span class="string">'o-'</span>, linewidth=<span class="number">1</span>, alpha=<span class="number">0.2</span>)</span><br><span class="line">plt.fill(angles,data, alpha=<span class="number">0.25</span>)</span><br><span class="line">plt.thetagrids(angles*<span class="number">180</span>/np.pi, radar_labels,frac = <span class="number">1.2</span>)</span><br><span class="line">plt.figtext(<span class="number">0.52</span>, <span class="number">0.95</span>, <span class="string">'霍兰德人格分析'</span>, ha=<span class="string">'center'</span>, size=<span class="number">20</span>)</span><br><span class="line">legend = plt.legend(data_labels, loc=(<span class="number">0.94</span>, <span class="number">0.80</span>), labelspacing=<span class="number">0.1</span>)</span><br><span class="line">plt.setp(legend.get_texts(), fontsize=<span class="string">'large'</span>)</span><br><span class="line">plt.grid(<span class="literal">True</span>)</span><br><span class="line">plt.savefig(<span class="string">'holland_radar.jpg'</span>)</span><br><span class="line">plt.show()</span><br></pre></td></tr></table></figure></li></ul></li></ul><h2 id="9-3-从Web解析到网络空间"><a href="#9-3-从Web解析到网络空间" class="headerlink" title="9.3 从Web解析到网络空间"></a>9.3 从Web解析到网络空间</h2><ul><li>Python库之网络爬虫<ul><li>Request：最友好的网络爬虫功能库<ul><li>提供了简单易用的类HTTP协议网络爬虫功能</li><li>支持连接池、SSL、Cookies、HTTP(s)代理等</li></ul></li><li>Scrapy：优秀的网络爬虫框架<ul><li>提供了构建网络爬虫系统的框架功能，功能半成品</li><li>支持批量和定时网页爬取、听过数据处理流程等</li></ul></li><li>pyspider：强大的Web页面爬取系统<ul><li>提供了完整的网页爬取系统构建功能</li><li>支持数据库后端、消息队列、优先级、分布式架构等</li></ul></li><li>Beautiful Soup：HTML和XML的解析库</li><li>Re：正则表达式解析和处理功能库<ul><li>提供了定义和解析正则表达式的一批通用功能</li><li>可用于各类场景，包括定点的Web信息提取</li></ul></li><li>Python-Goose：提取文章类型Web页面的功能库<ul><li>提供了对Web页面中文章信息、视频等元数据的提取功能</li><li>针对特定类型Web页面，应用覆盖面较广</li></ul></li></ul></li><li>Python库之Web网站开发<ul><li>Django：最流行的Web应用框架<ul><li>提供了构件Web系统的基本应用框架</li><li>MTV模式：模型、模版、视图</li></ul></li><li>Pyramid：规模适中的Web应用框架<ul><li>提供了简单方便构件Web系统的应用框架</li><li>不大不小，规模适中，适合快速构建并适度扩展类应用</li></ul></li><li>Flask：Web应用开发微框架<ul><li>提供了最简单构建Web系统的应用框架</li><li>简单、规模小、快捷</li></ul></li><li>WeRoBot：微信公众号开发框架<ul><li>提供了解析微信服务器消息及反馈消息的功能</li><li>建立微信机器人的重要技术手段</li></ul></li><li>aip：百度AI开放平台接口<ul><li>提供了访问百度AI服务的Python功能接口</li><li>语音、人脸、OCR、NLP、知识图谱、图像搜索等领域</li></ul></li><li>MyQR：二维码生成第三方库<ul><li>提供了生成二维码的系列功能</li><li>基本二维码、艺术二维码和动态二维码</li></ul></li></ul></li></ul><h2 id="9-4-从人机交互到艺术设计"><a href="#9-4-从人机交互到艺术设计" class="headerlink" title="9.4 从人机交互到艺术设计"></a>9.4 从人机交互到艺术设计</h2><ul><li>Python库之图形用户界面<ul><li>PyQt5：Qt开发框架的Python接口<ul><li>提供了创建Qt5程序的Python API接口</li><li>Qt是非常成熟的跨平台桌面应用开发系统，完备GUI</li></ul></li><li>wxPython：跨平台GUI开发框架<ul><li>提供了专用于Python的跨平台GUI开发框架</li><li>理解数据类型与索引的关系，操作索引即操作数据</li></ul></li><li>PyGObject：使用GTK+开发GUI的功能库</li></ul></li><li>Python库之游戏开发<ul><li>PyGame：简单的游戏开发功能库</li><li>Panda3D：开源、跨平台的3D渲染和游戏开发库</li><li>cocos2d：构建2D游戏和图形界面交互式应用的框架</li></ul></li><li>Python库之虚拟现实<ul><li>VR Zero：在树莓派上开发VR应用的Python库</li><li>pyovr：Oculus Rift的开发接口</li><li>Vizard：基于Python的通用VR开发引擎</li></ul></li><li>Python库之图形艺术：<ul><li>Quadas：迭代的艺术<ul><li>对图像进行四分迭代，形成像素风</li></ul></li><li>ascii_art：ASCII艺术库<ul><li>将普通图片转为ASCII艺术风格</li></ul></li><li>turtle：海龟绘图体系</li></ul></li></ul><h2 id="9-5-实例16：玫瑰花绘制"><a href="#9-5-实例16：玫瑰花绘制" class="headerlink" title="9.5 实例16：玫瑰花绘制"></a>9.5 实例16：玫瑰花绘制</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#RoseDraw.py</span></span><br><span class="line"><span class="keyword">import</span> turtle <span class="keyword">as</span> t</span><br><span class="line"><span class="comment"># 定义一个曲线绘制函数</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">DegreeCurve</span><span class="params">(n, r, d=<span class="number">1</span>)</span>:</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> range(n):</span><br><span class="line">        t.left(d)</span><br><span class="line">        t.circle(r, abs(d))</span><br><span class="line"><span class="comment"># 初始位置设定</span></span><br><span class="line">s = <span class="number">0.2</span> <span class="comment"># size</span></span><br><span class="line">t.setup(<span class="number">450</span>*<span class="number">5</span>*s, <span class="number">750</span>*<span class="number">5</span>*s)</span><br><span class="line">t.pencolor(<span class="string">"black"</span>)</span><br><span class="line">t.fillcolor(<span class="string">"red"</span>)</span><br><span class="line">t.speed(<span class="number">100</span>)</span><br><span class="line">t.penup()</span><br><span class="line">t.goto(<span class="number">0</span>, <span class="number">900</span>*s)</span><br><span class="line">t.pendown()</span><br><span class="line"><span class="comment"># 绘制花朵形状</span></span><br><span class="line">t.begin_fill()</span><br><span class="line">t.circle(<span class="number">200</span>*s,<span class="number">30</span>)</span><br><span class="line">DegreeCurve(<span class="number">60</span>, <span class="number">50</span>*s)</span><br><span class="line">t.circle(<span class="number">200</span>*s,<span class="number">30</span>)</span><br><span class="line">DegreeCurve(<span class="number">4</span>, <span class="number">100</span>*s)</span><br><span class="line">t.circle(<span class="number">200</span>*s,<span class="number">50</span>)</span><br><span class="line">DegreeCurve(<span class="number">50</span>, <span class="number">50</span>*s)</span><br><span class="line">t.circle(<span class="number">350</span>*s,<span class="number">65</span>)</span><br><span class="line">DegreeCurve(<span class="number">40</span>, <span class="number">70</span>*s)</span><br><span class="line">t.circle(<span class="number">150</span>*s,<span class="number">50</span>)</span><br><span class="line">DegreeCurve(<span class="number">20</span>, <span class="number">50</span>*s, <span class="number">-1</span>)</span><br><span class="line">t.circle(<span class="number">400</span>*s,<span class="number">60</span>)</span><br><span class="line">DegreeCurve(<span class="number">18</span>, <span class="number">50</span>*s)</span><br><span class="line">t.fd(<span class="number">250</span>*s)</span><br><span class="line">t.right(<span class="number">150</span>)</span><br><span class="line">t.circle(<span class="number">-500</span>*s,<span class="number">12</span>)</span><br><span class="line">t.left(<span class="number">140</span>)</span><br><span class="line">t.circle(<span class="number">550</span>*s,<span class="number">110</span>)</span><br><span class="line">t.left(<span class="number">27</span>)</span><br><span class="line">t.circle(<span class="number">650</span>*s,<span class="number">100</span>)</span><br><span class="line">t.left(<span class="number">130</span>)</span><br><span class="line">t.circle(<span class="number">-300</span>*s,<span class="number">20</span>)</span><br><span class="line">t.right(<span class="number">123</span>)</span><br><span class="line">t.circle(<span class="number">220</span>*s,<span class="number">57</span>)</span><br><span class="line">t.end_fill()</span><br><span class="line"><span class="comment"># 绘制花枝形状</span></span><br><span class="line">t.left(<span class="number">120</span>)</span><br><span class="line">t.fd(<span class="number">280</span>*s)</span><br><span class="line">t.left(<span class="number">115</span>)</span><br><span class="line">t.circle(<span class="number">300</span>*s,<span class="number">33</span>)</span><br><span class="line">t.left(<span class="number">180</span>)</span><br><span class="line">t.circle(<span class="number">-300</span>*s,<span class="number">33</span>)</span><br><span class="line">DegreeCurve(<span class="number">70</span>, <span class="number">225</span>*s, <span class="number">-1</span>)</span><br><span class="line">t.circle(<span class="number">350</span>*s,<span class="number">104</span>)</span><br><span class="line">t.left(<span class="number">90</span>)</span><br><span class="line">t.circle(<span class="number">200</span>*s,<span class="number">105</span>)</span><br><span class="line">t.circle(<span class="number">-500</span>*s,<span class="number">63</span>)</span><br><span class="line">t.penup()</span><br><span class="line">t.goto(<span class="number">170</span>*s,<span class="number">-30</span>*s)</span><br><span class="line">t.pendown()</span><br><span class="line">t.left(<span class="number">160</span>)</span><br><span class="line">DegreeCurve(<span class="number">20</span>, <span class="number">2500</span>*s)</span><br><span class="line">DegreeCurve(<span class="number">220</span>, <span class="number">250</span>*s, <span class="number">-1</span>)</span><br><span class="line"><span class="comment"># 绘制一个绿色叶子</span></span><br><span class="line">t.fillcolor(<span class="string">'green'</span>)</span><br><span class="line">t.penup()</span><br><span class="line">t.goto(<span class="number">670</span>*s,<span class="number">-180</span>*s)</span><br><span class="line">t.pendown()</span><br><span class="line">t.right(<span class="number">140</span>)</span><br><span class="line">t.begin_fill()</span><br><span class="line">t.circle(<span class="number">300</span>*s,<span class="number">120</span>)</span><br><span class="line">t.left(<span class="number">60</span>)</span><br><span class="line">t.circle(<span class="number">300</span>*s,<span class="number">120</span>)</span><br><span class="line">t.end_fill()</span><br><span class="line">t.penup()</span><br><span class="line">t.goto(<span class="number">180</span>*s,<span class="number">-550</span>*s)</span><br><span class="line">t.pendown()</span><br><span class="line">t.right(<span class="number">85</span>)</span><br><span class="line">t.circle(<span class="number">600</span>*s,<span class="number">40</span>)</span><br><span class="line"><span class="comment"># 绘制另一个绿色叶子</span></span><br><span class="line">t.penup()</span><br><span class="line">t.goto(<span class="number">-150</span>*s,<span class="number">-1000</span>*s)</span><br><span class="line">t.pendown()</span><br><span class="line">t.begin_fill()</span><br><span class="line">t.rt(<span class="number">120</span>)</span><br><span class="line">t.circle(<span class="number">300</span>*s,<span class="number">115</span>)</span><br><span class="line">t.left(<span class="number">75</span>)</span><br><span class="line">t.circle(<span class="number">300</span>*s,<span class="number">100</span>)</span><br><span class="line">t.end_fill()</span><br><span class="line">t.penup()</span><br><span class="line">t.goto(<span class="number">430</span>*s,<span class="number">-1070</span>*s)</span><br><span class="line">t.pendown()</span><br><span class="line">t.right(<span class="number">30</span>)</span><br><span class="line">t.circle(<span class="number">-600</span>*s,<span class="number">35</span>)</span><br><span class="line">t.done()</span><br></pre></td></tr></table></figure><p><img src="https://s1.ax1x.com/2020/09/27/0ACYRS.png" alt="0ACYRS.png"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 8 程序设计方法</title>
    <link href="https://onesmallstep.vip/2020/09/27/PythonClass8/"/>
    <id>https://onesmallstep.vip/2020/09/27/PythonClass8/</id>
    <published>2020-09-27T11:50:47.000Z</published>
    <updated>2020-09-27T12:06:17.797Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="8-程序设计方法"><a href="#8-程序设计方法" class="headerlink" title="8 程序设计方法"></a>8 程序设计方法</h1><h2 id="8-1-实例13：体育竞技分析"><a href="#8-1-实例13：体育竞技分析" class="headerlink" title="8.1 实例13：体育竞技分析"></a>8.1 实例13：体育竞技分析</h2><ul><li>输入：球员的水平，输出：可预测的比赛成绩</li><li>自顶向下和自底向上：<ul><li>自顶向下（设计）：<ul><li>将一个总问题表达为若干个小问题组成的形式</li><li>使用同样方法进一步分解小问题</li><li>直至，小问题可以用计算机简单明了的解决</li></ul></li><li>自底向上（执行）：<ul><li>分单元测试，逐步组装</li><li>按照自顶向下相反的路径操作</li><li>直至，系统各部分以紫装的思路都经过测试和验证</li></ul></li></ul></li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#MatchAnalysis.py</span></span><br><span class="line"><span class="keyword">from</span> random <span class="keyword">import</span> random</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">printIntro</span><span class="params">()</span>:</span></span><br><span class="line">    print(<span class="string">"这个程序模拟两个选手A和B的某种竞技比赛"</span>)</span><br><span class="line">    print(<span class="string">"程序运行需要A和B的能力值（以0到1之间的小数表示）"</span>)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">getInputs</span><span class="params">()</span>:</span></span><br><span class="line">    a = eval(input(<span class="string">"请输入选手A的能力值(0-1): "</span>))</span><br><span class="line">    b = eval(input(<span class="string">"请输入选手B的能力值(0-1): "</span>))</span><br><span class="line">    n = eval(input(<span class="string">"模拟比赛的场次: "</span>))</span><br><span class="line">    <span class="keyword">return</span> a, b, n</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">simNGames</span><span class="params">(n, probA, probB)</span>:</span></span><br><span class="line">    winsA, winsB = <span class="number">0</span>, <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> range(n):</span><br><span class="line">        scoreA, scoreB = simOneGame(probA, probB)</span><br><span class="line">        <span class="keyword">if</span> scoreA &gt; scoreB:</span><br><span class="line">            winsA += <span class="number">1</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            winsB += <span class="number">1</span></span><br><span class="line">    <span class="keyword">return</span> winsA, winsB</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">gameOver</span><span class="params">(a,b)</span>:</span></span><br><span class="line">    <span class="keyword">return</span> a==<span class="number">15</span> <span class="keyword">or</span> b==<span class="number">15</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">simOneGame</span><span class="params">(probA, probB)</span>:</span></span><br><span class="line">    scoreA, scoreB = <span class="number">0</span>, <span class="number">0</span></span><br><span class="line">    serving = <span class="string">"A"</span></span><br><span class="line">    <span class="keyword">while</span> <span class="keyword">not</span> gameOver(scoreA, scoreB):</span><br><span class="line">        <span class="keyword">if</span> serving == <span class="string">"A"</span>:</span><br><span class="line">            <span class="keyword">if</span> random() &lt; probA:</span><br><span class="line">                scoreA += <span class="number">1</span></span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                serving=<span class="string">"B"</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">if</span> random() &lt; probB:</span><br><span class="line">                scoreB += <span class="number">1</span></span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                serving=<span class="string">"A"</span></span><br><span class="line">    <span class="keyword">return</span> scoreA, scoreB</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">printSummary</span><span class="params">(winsA, winsB)</span>:</span></span><br><span class="line">    n = winsA + winsB</span><br><span class="line">    print(<span class="string">"竞技分析开始，共模拟&#123;&#125;场比赛"</span>.format(n))</span><br><span class="line">    print(<span class="string">"选手A获胜&#123;&#125;场比赛，占比&#123;:0.1%&#125;"</span>.format(winsA, winsA/n))</span><br><span class="line">    print(<span class="string">"选手B获胜&#123;&#125;场比赛，占比&#123;:0.1%&#125;"</span>.format(winsB, winsB/n))</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">main</span><span class="params">()</span>:</span></span><br><span class="line">    printIntro()</span><br><span class="line">    probA, probB, n = getInputs()</span><br><span class="line">    winsA, winsB = simNGames(n, probA, probB)</span><br><span class="line">    printSummary(winsA, winsB)</span><br><span class="line">main()</span><br></pre></td></tr></table></figure><h2 id="8-2-Python程序设计思维"><a href="#8-2-Python程序设计思维" class="headerlink" title="8.2 Python程序设计思维"></a>8.2 Python程序设计思维</h2><ul><li>计算生态与Python语言：<ul><li>计算思维：抽象问题的计算过程，利用计算机自动化求解</li></ul></li><li>计算生态与Python语言：<ul><li>以开源项目为代表的大量第三方库</li><li>库之间相互关联，依存发展</li></ul></li><li>用户体验与软件产品：<ul><li>提高用户体验的方法：进度展示、异常处理、打印输出、日志文件、帮助信息</li></ul></li><li>基本的程序设计模式：<ul><li>从IPO开始：</li><li>自顶向下设计</li><li>模块化设计</li><li>配置化设计</li><li>从应用需求到软件产品<ul><li>产品定义</li><li>系统架构</li><li>设计与实现</li><li>用户体验</li></ul></li></ul></li></ul><h2 id="8-3-Python第三方库安装"><a href="#8-3-Python第三方库安装" class="headerlink" title="8.3 Python第三方库安装"></a>8.3 Python第三方库安装</h2><p><img src="https://s1.ax1x.com/2020/09/27/0ApznA.png" alt="0ApznA.png"></p><ul><li>常用pip命令<br><img src="https://s1.ax1x.com/2020/09/27/0A94C8.png" alt="常用的pip命令"></li></ul><h2 id="8-4-模块7：OS库的使用"><a href="#8-4-模块7：OS库的使用" class="headerlink" title="8.4 模块7：OS库的使用"></a>8.4 模块7：OS库的使用</h2><ul><li>os.path子库以path为入口，用于操作和处理文件路径</li><li>路径操作：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0ApX1e.png" alt="0ApX1e.png"><br><img src="https://s1.ax1x.com/2020/09/27/0Apj6H.png" alt="0Apj6H.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApbtK.png" alt="0ApbtK.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApqfO.png" alt="0ApqfO.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApOpD.png" alt="0ApOpD.png"></p><ul><li><p>进程管理：</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line">os.system(command)</span><br><span class="line"></span><br><span class="line">os.system(<span class="string">'C:\\Windows\\System32\\Calc.exe'</span>)</span><br></pre></td></tr></table></figure></li><li><p>环境参数：</p></li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0ApvXd.png" alt="0ApvXd.png"><br><img src="https://s1.ax1x.com/2020/09/27/0A9S0I.png" alt="0A9S0I.png"><br><img src="https://s1.ax1x.com/2020/09/27/0A9p7t.png" alt="0A9p7t.png"></p><h2 id="8-5-实例14：第三方库安装脚本"><a href="#8-5-实例14：第三方库安装脚本" class="headerlink" title="8.5 实例14：第三方库安装脚本"></a>8.5 实例14：第三方库安装脚本</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#BatchInstall.py</span></span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line">libs = &#123;<span class="string">"numpy"</span>,<span class="string">"matplotlib"</span>,<span class="string">"pillow"</span>,<span class="string">"sklearn"</span>,<span class="string">"requests"</span>,\</span><br><span class="line">        <span class="string">"jieba"</span>,<span class="string">"beautifulsoup4"</span>,<span class="string">"wheel"</span>,<span class="string">"networkx"</span>,<span class="string">"sympy"</span>,\</span><br><span class="line">        <span class="string">"pyinstaller"</span>,<span class="string">"django"</span>,<span class="string">"flask"</span>,<span class="string">"werobot"</span>,<span class="string">"pyqt5"</span>,\</span><br><span class="line">        <span class="string">"pandas"</span>,<span class="string">"pyopengl"</span>,<span class="string">"pypdf2"</span>,<span class="string">"docopt"</span>,<span class="string">"pygame"</span>&#125;</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">    <span class="keyword">for</span> lib <span class="keyword">in</span> libs:</span><br><span class="line">        os.system(<span class="string">"pip install "</span>+lib)</span><br><span class="line">    print(<span class="string">"Successful"</span>)        </span><br><span class="line"><span class="keyword">except</span>:</span><br><span class="line">    print(<span class="string">"Failed Somehow"</span>)</span><br></pre></td></tr></table></figure><h2 id="8-Practice"><a href="#8-Practice" class="headerlink" title="8.Practice"></a>8.Practice</h2><ul><li>英文字符的鲁棒输入：输入字符串，打印输出其中的英文字母</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">s = input()</span><br><span class="line">d = []</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">26</span>):</span><br><span class="line">    d.append(chr(ord(<span class="string">'a'</span>)+i))</span><br><span class="line"><span class="keyword">for</span> c <span class="keyword">in</span> s:</span><br><span class="line">    <span class="keyword">if</span> c <span class="keyword">in</span> d:</span><br><span class="line">        print(c,end=<span class="string">''</span>)</span><br></pre></td></tr></table></figure><ul><li>数字的鲁棒输入：获得用户输入的一个数字，可能是浮点数或复数，如果是整数仅接收十进制形式，且只能是数字。对输入数字进行平方运算，输出结果。</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">s = input()</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">    <span class="keyword">if</span> complex(s) == complex(eval(s)):</span><br><span class="line">        print(eval(s)**<span class="number">2</span>)</span><br><span class="line"><span class="keyword">except</span>:</span><br><span class="line">    print(<span class="string">"输入有误"</span>)</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 7 文件和数据格式化</title>
    <link href="https://onesmallstep.vip/2020/09/27/PythonClass7/"/>
    <id>https://onesmallstep.vip/2020/09/27/PythonClass7/</id>
    <published>2020-09-27T11:50:40.000Z</published>
    <updated>2020-09-27T11:58:11.992Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="7-文件和数据格式化"><a href="#7-文件和数据格式化" class="headerlink" title="7 文件和数据格式化"></a>7 文件和数据格式化</h1><h2 id="7-1-文件的类型"><a href="#7-1-文件的类型" class="headerlink" title="7.1 文件的类型"></a>7.1 文件的类型</h2><ul><li>文件时存储在辅助存储器上的数据序列</li><li>文件展现形态：文本文件和二进制文件</li><li>文本形式打开文件：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">tf = open(<span class="string">'f.txt'</span>,<span class="string">'rt'</span>)</span><br><span class="line">print(tf.readline())</span><br><span class="line">tf.close()</span><br></pre></td></tr></table></figure><ul><li>二进制形式打开文件：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">bf = open(<span class="string">'f.txt'</span>,<span class="string">'rb'</span>)</span><br><span class="line">print(bf.readline())</span><br><span class="line">bf.close()</span><br></pre></td></tr></table></figure><ul><li><p>文件的打开和关闭：</p><ul><li><p>文件打开：<var> = open (<filename>,<open mode>)</p></li><li><p>文件路径：用斜杠替代反斜杠，相对路径”./PYE/f.txt”</p></li><li><p>文件打开模式：</p><p><img src="https://s1.ax1x.com/2020/09/27/0ApkLR.png" alt="0ApkLR.png"></p></li><li><p>文件关闭：<var>.close( )</p></li></ul></li><li><p>文件内容的读取：</p></li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0ApiQJ.png" alt="0ApiQJ.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApCz4.png" alt="0ApCz4.png"></p><ul><li>遍历全文本：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">fname = input()</span><br><span class="line">fo = open(fname,<span class="string">'r'</span>)</span><br><span class="line">txt = fo.read()</span><br><span class="line"><span class="comment">#对全文txt进行处理</span></span><br><span class="line">fo.close()</span><br></pre></td></tr></table></figure><p>当文件较大时，读取会耗费大量资源</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">fname = input()</span><br><span class="line">fo = open(fname,<span class="string">'r'</span>)</span><br><span class="line">txt = fo.read()</span><br><span class="line"><span class="keyword">while</span> txt!=<span class="string">""</span>:</span><br><span class="line">txt = fo.read(<span class="number">2</span>)</span><br><span class="line">fo.close()</span><br></pre></td></tr></table></figure><p>逐行遍历：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Solution 1</span></span><br><span class="line">fname = input()</span><br><span class="line">fo = open(fname,<span class="string">'r'</span>)</span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> fo.readlines():</span><br><span class="line">print(line)</span><br><span class="line">fo.close()</span><br><span class="line"></span><br><span class="line"><span class="comment"># Solution 2</span></span><br><span class="line">fname = input()</span><br><span class="line">fo = open(fname,<span class="string">'r'</span>)</span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> fo:</span><br><span class="line">print(line)</span><br><span class="line">fo.close()</span><br></pre></td></tr></table></figure><ul><li>数据的文件写入：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0AppJU.png" alt="0AppJU.png"><br><img src="https://s1.ax1x.com/2020/09/27/0Ap9WF.png" alt="0Ap9WF.png"></p><h2 id="7-2-实例11：自动轨迹绘制"><a href="#7-2-实例11：自动轨迹绘制" class="headerlink" title="7.2 实例11：自动轨迹绘制"></a>7.2 实例11：自动轨迹绘制</h2><p>根据脚本来绘制图形</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#AutoTraceDraw.py</span></span><br><span class="line"><span class="keyword">import</span> turtle <span class="keyword">as</span> t</span><br><span class="line">t.title(<span class="string">'自动轨迹绘制'</span>)</span><br><span class="line">t.setup(<span class="number">800</span>, <span class="number">600</span>, <span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line">t.pencolor(<span class="string">"red"</span>)</span><br><span class="line">t.pensize(<span class="number">5</span>)</span><br><span class="line"><span class="comment">#数据读取</span></span><br><span class="line">datals = []</span><br><span class="line">f = open(<span class="string">"data.txt"</span>)</span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> f:</span><br><span class="line">    line = line.replace(<span class="string">"\n"</span>,<span class="string">""</span>)</span><br><span class="line">    datals.append(list(map(eval, line.split(<span class="string">","</span>))))</span><br><span class="line">f.close()</span><br><span class="line"><span class="comment">#自动绘制</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(len(datals)):</span><br><span class="line">    t.pencolor(datals[i][<span class="number">3</span>],datals[i][<span class="number">4</span>],datals[i][<span class="number">5</span>])</span><br><span class="line">    t.fd(datals[i][<span class="number">0</span>])</span><br><span class="line">    <span class="keyword">if</span> datals[i][<span class="number">1</span>]:</span><br><span class="line">        t.rt(datals[i][<span class="number">2</span>])</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        t.lt(datals[i][<span class="number">2</span>])</span><br></pre></td></tr></table></figure><p>map(<function name>, list var): 对列表中每一个元素执行map函数里第一个参数对应的函数操作</p><h2 id="7-3-一维数据的格式化和处理"><a href="#7-3-一维数据的格式化和处理" class="headerlink" title="7.3 一维数据的格式化和处理"></a>7.3 一维数据的格式化和处理</h2><ul><li>一维数据：由对等关系的有序或无序数据构成。</li><li>二维数据：由多个一维数据构成，是一维数据的组合形式</li><li>多维数据：由一维或二维数据构成的一种扩展</li><li>高维数据：仅利用最基本的二元关系展示数据间的复杂结构（键值对）</li><li>一位数据的表示：<ul><li>如果数据间是无序的：使用集合类型</li><li>有序的：列表类型</li></ul></li><li>一维数据的存储：<ul><li>把数据之间使用空格分隔，缺点：数据中不能存在空格</li><li>存储方式二：逗号分隔</li><li>存储方式三：其它方式（其它特殊符号）</li></ul></li><li>一维数据的处理：存储&lt;-&gt;表示</li></ul><p>读取数据</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">txt = open(fname).read()</span><br><span class="line">ls = txt.split()</span><br><span class="line">f.close()</span><br><span class="line"></span><br><span class="line"><span class="comment"># 特殊分隔符</span></span><br><span class="line">txt = open(fname).read()</span><br><span class="line">ls = txt.split(<span class="string">'$'</span>)</span><br><span class="line">f.close()</span><br></pre></td></tr></table></figure><p>写入数据：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ls = [<span class="string">'China'</span>, <span class="string">'US'</span>, <span class="string">'Japan'</span>]</span><br><span class="line">f = open(fname,<span class="string">'w'</span>)</span><br><span class="line">f.write(<span class="string">' '</span>,joint(ls))</span><br><span class="line">f.close()</span><br></pre></td></tr></table></figure><h2 id="7-4-二维数据的格式化"><a href="#7-4-二维数据的格式化" class="headerlink" title="7.4 二维数据的格式化"></a>7.4 二维数据的格式化</h2><ul><li>二维数据的表示：采用二维列表表达格式</li><li>二维数据的读取：两层for循环来遍历数据</li><li>CSV数据存储格式<ul><li>国际通用的一二维数据存储格式，一般.csv扩展名</li><li>每行一个一维数据，采用逗号分隔，无空行</li><li>Excel和一般编辑软件都可以读入或者另存为csv文件</li></ul></li><li>CSV存储约定：<ul><li>如果某个元素缺失，逗号仍要保留</li><li>二维数据的表头可以作为数据存储，也可以另行存储</li><li>逗号为英文半角符号，逗号与数据之间无额外空格</li><li>数据中包含逗号，使用在数据两侧增加引号等方法，或者增加转意符</li></ul></li><li>常规的索引习惯：ls[row][column]，先行后列</li><li>二维数据的读写</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">fo = open(fname)</span><br><span class="line">ls = []</span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> fo:</span><br><span class="line">line = line.replace(<span class="string">'\n'</span>,<span class="string">''</span>)</span><br><span class="line">ls.append(ls.split(<span class="string">','</span>))</span><br><span class="line">fo.close()</span><br><span class="line"></span><br><span class="line">ls = [[],[],[]]</span><br><span class="line">f = open(fname,<span class="string">'w'</span>)</span><br><span class="line"><span class="keyword">for</span> item <span class="keyword">in</span> ls:</span><br><span class="line">fwrite(<span class="string">','</span>.join(item)+<span class="string">'\n'</span>)</span><br><span class="line">f.close()</span><br></pre></td></tr></table></figure><h2 id="7-5-模块6：wordcloud库"><a href="#7-5-模块6：wordcloud库" class="headerlink" title="7.5 模块6：wordcloud库"></a>7.5 模块6：wordcloud库</h2><ul><li>wordcloud库是优秀的词云展示第三方库</li><li>w = wordvloud.WordCloud()</li><li>词云的形状尺寸颜色都可以自定</li><li>wordcloud库常规方法</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0ApEe1.png" alt="0ApEe1.png"></p><ul><li>配置对象参数：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0ApVdx.png" alt="0ApVdx.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApZo6.png" alt="0ApZo6.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApmFK.png" alt="0ApmFK.png"><br><img src="https://s1.ax1x.com/2020/09/27/0ApnJO.png" alt="0ApnJO.png"></p><h2 id="7-6-实例12：政府工作报告词云"><a href="#7-6-实例12：政府工作报告词云" class="headerlink" title="7.6 实例12：政府工作报告词云"></a>7.6 实例12：政府工作报告词云</h2><p>矩形词云：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#GovRptWordCloudv1.py</span></span><br><span class="line"><span class="keyword">import</span> jieba</span><br><span class="line"><span class="keyword">import</span> wordcloud</span><br><span class="line">f = open(<span class="string">"新时代中国特色社会主义.txt"</span>, <span class="string">"r"</span>, encoding=<span class="string">"utf-8"</span>)</span><br><span class="line"> </span><br><span class="line">t = f.read()</span><br><span class="line">f.close()</span><br><span class="line">ls = jieba.lcut(t)</span><br><span class="line"> </span><br><span class="line">txt = <span class="string">" "</span>.join(ls)</span><br><span class="line">w = wordcloud.WordCloud( \</span><br><span class="line">    width = <span class="number">1000</span>, height = <span class="number">700</span>,\</span><br><span class="line">    background_color = <span class="string">"white"</span>,</span><br><span class="line">    font_path = <span class="string">"msyh.ttc"</span>    </span><br><span class="line">    )</span><br><span class="line">w.generate(txt)</span><br><span class="line">w.to_file(<span class="string">"grwordcloud.png"</span>)</span><br></pre></td></tr></table></figure><p>不规则词云</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#GovRptWordCloudv2.py</span></span><br><span class="line"><span class="keyword">import</span> jieba</span><br><span class="line"><span class="keyword">import</span> wordcloud</span><br><span class="line"><span class="keyword">from</span> scipy.misc <span class="keyword">import</span> imread</span><br><span class="line">mask = imread(<span class="string">"chinamap.jpg"</span>)</span><br><span class="line">excludes = &#123; &#125;</span><br><span class="line">f = open(<span class="string">"新时代中国特色社会主义.txt"</span>, <span class="string">"r"</span>, encoding=<span class="string">"utf-8"</span>)</span><br><span class="line">t = f.read()</span><br><span class="line">f.close()</span><br><span class="line">ls = jieba.lcut(t)</span><br><span class="line">txt = <span class="string">" "</span>.join(ls)</span><br><span class="line">w = wordcloud.WordCloud(\</span><br><span class="line">    width = <span class="number">1000</span>, height = <span class="number">700</span>,\</span><br><span class="line">    background_color = <span class="string">"white"</span>,</span><br><span class="line">    font_path = <span class="string">"msyh.ttc"</span>, mask = mask</span><br><span class="line">    )</span><br><span class="line">w.generate(txt)</span><br><span class="line">w.to_file(<span class="string">"grwordcloudm.png"</span>)</span><br></pre></td></tr></table></figure><h2 id="7-Practice"><a href="#7-Practice" class="headerlink" title="7.Practice"></a>7.Practice</h2><ul><li>文件行数：打印输出附件文件的有效行数，注意：空行不计算为有效行数。</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">f = open(<span class="string">'latex.log'</span>,<span class="string">'r'</span>,encoding=<span class="string">'UTF-8'</span>)</span><br><span class="line">count = <span class="number">0</span></span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> f.readlines():</span><br><span class="line">    <span class="keyword">if</span> line == <span class="string">'\n'</span>:</span><br><span class="line">        <span class="keyword">continue</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        count += <span class="number">1</span></span><br><span class="line">print(<span class="string">"共&#123;&#125;行"</span>.format(count))</span><br></pre></td></tr></table></figure><ul><li>文件字符分布：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">fname = <span class="string">'latex.log'</span></span><br><span class="line">fo = open(fname,<span class="string">'r'</span>,encoding=<span class="string">'UTF-8'</span>)</span><br><span class="line"></span><br><span class="line">d = &#123;&#125;</span><br><span class="line"><span class="comment"># 给每个小写字母添加一个键，防止有个数为0的字母</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">26</span>):</span><br><span class="line">    d[chr(ord(<span class="string">'a'</span>)+i)] = <span class="number">0</span></span><br><span class="line">wordcount = <span class="number">0</span></span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> fo.readlines():</span><br><span class="line">    <span class="keyword">for</span> char <span class="keyword">in</span> line:</span><br><span class="line">        d[char] = d.get(char,<span class="number">0</span>)+<span class="number">1</span></span><br><span class="line">        wordcount += <span class="number">1</span> <span class="comment">#统计字符数</span></span><br><span class="line">print(<span class="string">'共&#123;&#125;字符'</span>.format(wordcount),end=<span class="string">''</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">26</span>):</span><br><span class="line">    <span class="keyword">if</span> d[chr(ord(<span class="string">'a'</span>)+i)]!=<span class="number">0</span>:</span><br><span class="line">        print(<span class="string">f",<span class="subst">&#123;chr(ord(<span class="string">'a'</span>)+i)&#125;</span>:<span class="subst">&#123;d[chr(ord(<span class="string">'a'</span>)+i)]&#125;</span>"</span>,end=<span class="string">''</span>)</span><br></pre></td></tr></table></figure><ul><li>文件独特行数：统计附件文件中与其他任何其他行都不同的行的数量，即独特行的数量。</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">fname = <span class="string">'latex.log'</span></span><br><span class="line">fo = open(fname,<span class="string">'r'</span>,encoding=<span class="string">'UTF-8'</span>)</span><br><span class="line">ls = fo.readlines()</span><br><span class="line">s =set(ls)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> s:</span><br><span class="line">    ls.remove(i)</span><br><span class="line">t = set(ls)</span><br><span class="line">print(<span class="string">"共&#123;&#125;独特行"</span>.format(len(s)-len(t)))</span><br></pre></td></tr></table></figure><ul><li>CSV格式列转换：附件是一个CSV文件，请将每行按照列逆序排列后输出，不改变各元素格式（如周围空格布局等）。</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">fname = <span class="string">'data.csv'</span></span><br><span class="line">fo = open(fname,<span class="string">'r'</span>)</span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> fo:</span><br><span class="line">    line = line.strip(<span class="string">'\n'</span>)</span><br><span class="line">    ls = line.split(<span class="string">','</span>)</span><br><span class="line">    ls = ls[::<span class="number">-1</span>]</span><br><span class="line">    print(<span class="string">","</span>.join(ls))</span><br><span class="line">fo.close()</span><br></pre></td></tr></table></figure><ul><li>CSV格式数据清洗：</li></ul><p>附件是一个CSV文件，其中每个数据前后存在空格，请对其进行清洗，要求如下：‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>（1）去掉每个数据前后空格，即数据之间仅用逗号(,)分割；‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>（2）清洗后打印输出。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">f = open(<span class="string">"data.csv"</span>)</span><br><span class="line">s = f.read()</span><br><span class="line">s = s.replace(<span class="string">" "</span>,<span class="string">""</span>)</span><br><span class="line">print(s)</span><br><span class="line">f.close()</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 6 组合数据类型</title>
    <link href="https://onesmallstep.vip/2020/09/27/PythonClass6/"/>
    <id>https://onesmallstep.vip/2020/09/27/PythonClass6/</id>
    <published>2020-09-27T03:10:40.000Z</published>
    <updated>2020-09-27T03:40:14.923Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="6-组合数据类型"><a href="#6-组合数据类型" class="headerlink" title="6 组合数据类型"></a>6 组合数据类型</h1><p>6.1 集合类型及操作</p><ul><li>集合是多个元素的无序组合：<ul><li>几何元素之间无序，每个元素唯一，不存在相同元素</li><li>集合元素不可更改，不能是可变数据类型</li></ul></li><li>建立集合用 { } 或 set(), 空集合必须 set()</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">A = &#123;<span class="string">"Python"</span>,<span class="number">123</span>,(<span class="string">"Py"</span>,<span class="number">123</span>)&#125;</span><br><span class="line">B = set(<span class="string">'pypy123'</span>) <span class="comment">#&#123;'1','2','3','p','y'&#125;</span></span><br></pre></td></tr></table></figure><ul><li>集合操作符：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0FgSHK.png" alt="0FgSHK.png"><br>S ≤ T 或 S &lt; T，返回 True/False 关系操作符<br><img src="https://s1.ax1x.com/2020/09/27/0FczB6.png" alt="0FczB6.png"></p><ul><li>集合处理方法：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0Fcxnx.png" alt="0Fcxnx.png"></p><p><img src="https://s1.ax1x.com/2020/09/27/0Fcjj1.png" alt="0Fcjj1.png"></p><ul><li>集合类型应用场景：<ul><li>数据去重：set( ) 和 list( )</li></ul></li></ul><h2 id="6-2-序列类型及操作"><a href="#6-2-序列类型及操作" class="headerlink" title="6.2 序列类型及操作"></a>6.2 序列类型及操作</h2><ul><li>序列类型的定义：序列是具有先后关系的一族元素<ul><li>序列是一维元素向量，元素类型可以不同</li><li>元素间由序号引导</li></ul></li><li>序列类型：字符串类型、元组类型、列表类型</li><li>序列类型及操作：正向递增序号、反向递减序号</li><li>序列类型通用操作符：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0FcXcR.png" alt="0FcXcR.png"></p><p><img src="https://s1.ax1x.com/2020/09/27/0Fg9AO.png" alt="0Fg9AO.png"></p><ul><li>元组类型及操作：<ul><li>元组一旦被创建，不能更改</li><li>元组用()或tuple()创建，元素间用逗号分隔</li></ul></li><li>列表类型及操作：<ul><li>列表是一种序列类型，创建后可以随意修改</li><li>使用[]或list()创建，元素间用逗号，分隔</li><li>列表中各元素类型可以不同，无长度限制</li><li>列表直接赋值时，只是将新的指针指向原有列表</li></ul></li><li>列表类型操作方法：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0FgCND.png" alt="0FgCND.png"></p><p><img src="https://s1.ax1x.com/2020/09/27/0FgP4e.png" alt="0FgP4e.png"></p><ul><li>序列类型应用场景：<ul><li>元素遍历</li><li>通过元组类型进行数据保护</li></ul></li></ul><h2 id="6-3-实例9：基本统计值计算"><a href="#6-3-实例9：基本统计值计算" class="headerlink" title="6.3 实例9：基本统计值计算"></a>6.3 实例9：基本统计值计算</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#CalStatisticsV1.py</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">getNum</span><span class="params">()</span>:</span>       <span class="comment">#获取用户不定长度的输入</span></span><br><span class="line">    nums = []</span><br><span class="line">    iNumStr = input(<span class="string">"请输入数字(回车退出): "</span>)</span><br><span class="line">    <span class="keyword">while</span> iNumStr != <span class="string">""</span>:</span><br><span class="line">        nums.append(eval(iNumStr))</span><br><span class="line">        iNumStr = input(<span class="string">"请输入数字(回车退出): "</span>)</span><br><span class="line">    <span class="keyword">return</span> nums</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">mean</span><span class="params">(numbers)</span>:</span>  <span class="comment">#计算平均值</span></span><br><span class="line">    s = <span class="number">0.0</span></span><br><span class="line">    <span class="keyword">for</span> num <span class="keyword">in</span> numbers:</span><br><span class="line">        s = s + num</span><br><span class="line">    <span class="keyword">return</span> s / len(numbers)</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">dev</span><span class="params">(numbers, mean)</span>:</span> <span class="comment">#计算方差</span></span><br><span class="line">    sdev = <span class="number">0.0</span></span><br><span class="line">    <span class="keyword">for</span> num <span class="keyword">in</span> numbers:</span><br><span class="line">        sdev = sdev + (num - mean)**<span class="number">2</span></span><br><span class="line">    <span class="keyword">return</span> pow(sdev / (len(numbers)<span class="number">-1</span>), <span class="number">0.5</span>)</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">median</span><span class="params">(numbers)</span>:</span>    <span class="comment">#计算中位数</span></span><br><span class="line">    sorted(numbers)</span><br><span class="line">    size = len(numbers)</span><br><span class="line">    <span class="keyword">if</span> size % <span class="number">2</span> == <span class="number">0</span>:</span><br><span class="line">        med = (numbers[size//<span class="number">2</span><span class="number">-1</span>] + numbers[size//<span class="number">2</span>])/<span class="number">2</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        med = numbers[size//<span class="number">2</span>]</span><br><span class="line">    <span class="keyword">return</span> med</span><br><span class="line"> </span><br><span class="line">n =  getNum() <span class="comment">#主体函数</span></span><br><span class="line">m =  mean(n)</span><br><span class="line">print(<span class="string">"平均值:&#123;&#125;,方差:&#123;:.2&#125;,中位数:&#123;&#125;."</span>.format(m, dev(n,m),median(n)))</span><br></pre></td></tr></table></figure><h2 id="6-4-字典类型及操作"><a href="#6-4-字典类型及操作" class="headerlink" title="6.4 字典类型及操作"></a>6.4 字典类型及操作</h2><ul><li>字典类型的定义：<ul><li>映射：映射是一种键（索引）和值（数据）的对应</li><li>字典类型通过键值对建立索引</li><li>采用 { } 或 dict()创建，键值对用: 来表示</li><li>字典索引 [ ]</li></ul></li><li>字典类型操作函数：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0FgF9H.png" alt="0FgF9H.png"><br><img src="https://s1.ax1x.com/2020/09/27/0Fgk3d.png" alt="0Fgk3d.png"></p><ul><li>字典类型应用场景<ul><li>映射的表达：统计数据出现次数</li></ul></li></ul><h2 id="6-5-模块5：jieba库"><a href="#6-5-模块5：jieba库" class="headerlink" title="6.5 模块5：jieba库"></a>6.5 模块5：jieba库</h2><ul><li>jieba是优秀的中文分词第三方库</li><li>精确模式：把文本精确分开，不存在冗余单词</li><li>全模式：把文本中所有可能的词语都扫描出来，有冗余</li><li>jieba库常用函数：</li></ul><p><img src="https://s1.ax1x.com/2020/09/27/0FgAgA.png" alt="0FgAgA.png"><br><img src="https://s1.ax1x.com/2020/09/27/0FgEjI.png" alt="0FgEjI.png"></p><h2 id="6-6-实例10：文本词频统计"><a href="#6-6-实例10：文本词频统计" class="headerlink" title="6.6 实例10：文本词频统计"></a>6.6 实例10：文本词频统计</h2><ul><li>《哈姆雷特》词频统计：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#CalHamletV1.py</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">getText</span><span class="params">()</span>:</span></span><br><span class="line">    txt = open(<span class="string">"hamlet.txt"</span>, <span class="string">"r"</span>).read()</span><br><span class="line">    txt = txt.lower()</span><br><span class="line">    <span class="keyword">for</span> ch <span class="keyword">in</span> <span class="string">'!"#$%&amp;()*+,-./:;&lt;=&gt;?@[\\]^_‘&#123;|&#125;~'</span>:</span><br><span class="line">        txt = txt.replace(ch, <span class="string">" "</span>)   <span class="comment">#将文本中特殊字符替换为空格</span></span><br><span class="line">    <span class="keyword">return</span> txt</span><br><span class="line"> </span><br><span class="line">hamletTxt = getText()</span><br><span class="line">words  = hamletTxt.split()</span><br><span class="line">counts = &#123;&#125;</span><br><span class="line"><span class="keyword">for</span> word <span class="keyword">in</span> words:           </span><br><span class="line">    counts[word] = counts.get(word,<span class="number">0</span>) + <span class="number">1</span></span><br><span class="line">items = list(counts.items())</span><br><span class="line">items.sort(key=<span class="keyword">lambda</span> x:x[<span class="number">1</span>], reverse=<span class="literal">True</span>) </span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">10</span>):</span><br><span class="line">    word, count = items[i]</span><br><span class="line">    <span class="keyword">print</span> (<span class="string">"&#123;0:&lt;10&#125;&#123;1:&gt;5&#125;"</span>.format(word, count))</span><br></pre></td></tr></table></figure><ul><li>三国演义出场人物统计：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#CalThreeKingdomsV2.py</span></span><br><span class="line"><span class="keyword">import</span> jieba</span><br><span class="line">excludes = &#123;<span class="string">"将军"</span>,<span class="string">"却说"</span>,<span class="string">"荆州"</span>,<span class="string">"二人"</span>,<span class="string">"不可"</span>,<span class="string">"不能"</span>,<span class="string">"如此"</span>&#125;</span><br><span class="line">txt = open(<span class="string">"threekingdoms.txt"</span>, <span class="string">"r"</span>, encoding=<span class="string">'utf-8'</span>).read()</span><br><span class="line">words  = jieba.lcut(txt)</span><br><span class="line">counts = &#123;&#125;</span><br><span class="line"><span class="keyword">for</span> word <span class="keyword">in</span> words:</span><br><span class="line">    <span class="keyword">if</span> len(word) == <span class="number">1</span>:</span><br><span class="line">        <span class="keyword">continue</span></span><br><span class="line">    <span class="keyword">elif</span> word == <span class="string">"诸葛亮"</span> <span class="keyword">or</span> word == <span class="string">"孔明曰"</span>:</span><br><span class="line">        rword = <span class="string">"孔明"</span></span><br><span class="line">    <span class="keyword">elif</span> word == <span class="string">"关公"</span> <span class="keyword">or</span> word == <span class="string">"云长"</span>:</span><br><span class="line">        rword = <span class="string">"关羽"</span></span><br><span class="line">    <span class="keyword">elif</span> word == <span class="string">"玄德"</span> <span class="keyword">or</span> word == <span class="string">"玄德曰"</span>:</span><br><span class="line">        rword = <span class="string">"刘备"</span></span><br><span class="line">    <span class="keyword">elif</span> word == <span class="string">"孟德"</span> <span class="keyword">or</span> word == <span class="string">"丞相"</span>:</span><br><span class="line">        rword = <span class="string">"曹操"</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        rword = word</span><br><span class="line">    counts[rword] = counts.get(rword,<span class="number">0</span>) + <span class="number">1</span></span><br><span class="line"><span class="keyword">for</span> word <span class="keyword">in</span> excludes:</span><br><span class="line">    <span class="keyword">del</span> counts[word]</span><br><span class="line">items = list(counts.items())</span><br><span class="line">items.sort(key=<span class="keyword">lambda</span> x:x[<span class="number">1</span>], reverse=<span class="literal">True</span>) </span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">10</span>):</span><br><span class="line">    word, count = items[i]</span><br><span class="line">    <span class="keyword">print</span> (<span class="string">"&#123;0:&lt;10&#125;&#123;1:&gt;5&#125;"</span>.format(word, count))</span><br></pre></td></tr></table></figure><h2 id="6-Practice"><a href="#6-Practice" class="headerlink" title="6.Practice"></a>6.Practice</h2><ul><li>人名独特性统计：统计字符串中共有多少个独特的人名</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">s = <span class="string">'''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 </span></span><br><span class="line"><span class="string">       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 </span></span><br><span class="line"><span class="string">       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 </span></span><br><span class="line"><span class="string">       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 </span></span><br><span class="line"><span class="string">       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 </span></span><br><span class="line"><span class="string">       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 </span></span><br><span class="line"><span class="string">       忽必烈 慕容复 张三丰 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 </span></span><br><span class="line"><span class="string">       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 </span></span><br><span class="line"><span class="string">       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 </span></span><br><span class="line"><span class="string">       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 </span></span><br><span class="line"><span class="string">       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 </span></span><br><span class="line"><span class="string">       张三丰 令狐冲 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 </span></span><br><span class="line"><span class="string">       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 </span></span><br><span class="line"><span class="string">       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 </span></span><br><span class="line"><span class="string">       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 </span></span><br><span class="line"><span class="string">       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 </span></span><br><span class="line"><span class="string">       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 </span></span><br><span class="line"><span class="string">       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄'''</span></span><br><span class="line">ls = set(s.split(sep=<span class="string">" "</span>))</span><br><span class="line">ls.discard(<span class="string">''</span>)</span><br><span class="line">ls.discard(<span class="string">'\n'</span>)</span><br><span class="line">print(len(ls))</span><br></pre></td></tr></table></figure><ul><li>字典翻转输出：读入一个字典类型的字符串，反转其中的键值对输出</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">s = input()</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">    d = eval(s)</span><br><span class="line">    e = &#123;&#125;</span><br><span class="line">    <span class="keyword">for</span> k <span class="keyword">in</span> d:</span><br><span class="line">        e[d[k]] = k</span><br><span class="line">    print(e)</span><br><span class="line"><span class="keyword">except</span>:</span><br><span class="line">    print(<span class="string">"输入错误"</span>)</span><br></pre></td></tr></table></figure><ul><li>《沉默的羔羊》之最多单词</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> jieba</span><br><span class="line">f = open(<span class="string">"沉默的羔羊.txt"</span>)</span><br><span class="line">ls = jieba.lcut(f.read())</span><br><span class="line">d = &#123;&#125;</span><br><span class="line"><span class="keyword">for</span> w <span class="keyword">in</span> ls:</span><br><span class="line">    d[w] = d.get(w,<span class="number">0</span>)+<span class="number">1</span></span><br><span class="line">maxc = <span class="number">0</span></span><br><span class="line">maxw = <span class="string">""</span></span><br><span class="line"><span class="keyword">for</span> k <span class="keyword">in</span> d:</span><br><span class="line">    <span class="keyword">if</span> d[k] &gt; maxc <span class="keyword">and</span> len(k) &gt; <span class="number">2</span>:</span><br><span class="line">        maxc = d[k]</span><br><span class="line">        maxw = k</span><br><span class="line">    <span class="keyword">if</span> d[k] == maxc <span class="keyword">and</span> len(k) &gt; <span class="number">2</span> <span class="keyword">and</span> k &gt; maxw:</span><br><span class="line">        maxw = k</span><br><span class="line">print(maxw)</span><br><span class="line">f.close()</span><br></pre></td></tr></table></figure><ul><li><p>数字不同数之和：获得用户输入的一个整数N，输出N中出现不同数字的和</p><p>  输入：1231233213 </p><p>  输出：6</p></li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">s = input()</span><br><span class="line">ls = []</span><br><span class="line"><span class="keyword">for</span> num <span class="keyword">in</span> s:</span><br><span class="line">    ls.append(eval(num))</span><br><span class="line">arr = set(ls)</span><br><span class="line">print(sum(arr))</span><br></pre></td></tr></table></figure><ul><li>人名最多数统计：输出字符串中出现次数最多的人名</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">s = <span class="string">'''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 </span></span><br><span class="line"><span class="string">       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 </span></span><br><span class="line"><span class="string">       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 </span></span><br><span class="line"><span class="string">       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 </span></span><br><span class="line"><span class="string">       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 </span></span><br><span class="line"><span class="string">       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 </span></span><br><span class="line"><span class="string">       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 </span></span><br><span class="line"><span class="string">       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 </span></span><br><span class="line"><span class="string">       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 </span></span><br><span class="line"><span class="string">       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 </span></span><br><span class="line"><span class="string">       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 </span></span><br><span class="line"><span class="string">       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 </span></span><br><span class="line"><span class="string">       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 </span></span><br><span class="line"><span class="string">       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 </span></span><br><span class="line"><span class="string">       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 </span></span><br><span class="line"><span class="string">       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 </span></span><br><span class="line"><span class="string">       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 </span></span><br><span class="line"><span class="string">       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''</span></span><br><span class="line">ls = s.split(sep=<span class="string">" "</span>)</span><br><span class="line">d = &#123;&#125;</span><br><span class="line"><span class="keyword">for</span> name <span class="keyword">in</span> ls:</span><br><span class="line">    d[name] = d.get(name,<span class="number">0</span>)+<span class="number">1</span></span><br><span class="line">maxvalue = <span class="number">0</span></span><br><span class="line">maxname = <span class="string">''</span></span><br><span class="line"><span class="keyword">for</span> key <span class="keyword">in</span> d:</span><br><span class="line">    <span class="keyword">if</span> key == <span class="string">'\n'</span> <span class="keyword">or</span> key == <span class="string">''</span>:</span><br><span class="line">        <span class="keyword">continue</span></span><br><span class="line">    <span class="keyword">elif</span> d[key] &gt; maxvalue:</span><br><span class="line">        maxvalue = d[key]</span><br><span class="line">        maxname = key</span><br><span class="line">print(maxname)</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 5 函数和代码复用</title>
    <link href="https://onesmallstep.vip/2020/09/20/PythonClass5/"/>
    <id>https://onesmallstep.vip/2020/09/20/PythonClass5/</id>
    <published>2020-09-20T03:15:33.000Z</published>
    <updated>2020-09-20T03:28:00.930Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="5-函数和代码复用"><a href="#5-函数和代码复用" class="headerlink" title="5 函数和代码复用"></a>5 函数和代码复用</h1><h2 id="5-1-函数的定义与使用"><a href="#5-1-函数的定义与使用" class="headerlink" title="5.1 函数的定义与使用"></a>5.1 函数的定义与使用</h2><ul><li><p>函数是一段代码的表示</p></li><li><p>def &lt;函数名&gt;(&lt;函数参数&gt;)：</p><p>  &lt;函数代码&gt;</p></li><li><p>函数的调用：调用时要给出实际参数</p></li><li><p>可选参数：可选参数某些参数提供默认值，可选参数必须放在必选参数后面</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fact</span><span class="params">(n,m=<span class="number">1</span>)</span>:</span></span><br><span class="line">s = <span class="number">1</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>,n+<span class="number">1</span>)</span><br><span class="line">s*=i</span><br><span class="line">s = s/m</span><br><span class="line"><span class="keyword">return</span> s</span><br></pre></td></tr></table></figure></li><li><p>可变参数的传递：函数定义时可以设计可变数量参数，即不确定参数总数量</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fact</span><span class="params">(n,*b)</span></span></span><br><span class="line">s = 1</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>,n+<span class="number">1</span>)</span><br><span class="line">s *= i</span><br><span class="line"><span class="keyword">for</span> item <span class="keyword">in</span> b</span><br><span class="line">s *= b</span><br><span class="line"><span class="keyword">return</span> s</span><br></pre></td></tr></table></figure></li><li><p>位置对应，名字对应</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fact(m=<span class="number">5</span>,n=<span class="number">10</span>)</span><br></pre></td></tr></table></figure></li><li><p>返回值：返回多个数据，元组类型：return s//m, n, m （元组类型）</p></li><li><p>在函数中使用全局变量：保留字global</p></li><li><p>局部变量为组合数据类型且未创建，等同于全局变量</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">ls = [<span class="string">'F'</span>,<span class="string">'f'</span>]</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">func</span><span class="params">(a)</span>：</span></span><br><span class="line"><span class="function"><span class="title">ls</span>.<span class="title">append</span><span class="params">(a)</span></span></span><br><span class="line"><span class="function"><span class="title">return</span></span></span><br><span class="line"><span class="function"><span class="title">func</span><span class="params">(<span class="string">"c"</span>)</span></span></span><br><span class="line"><span class="function"><span class="title">print</span><span class="params">(ls)</span></span></span><br></pre></td></tr></table></figure></li><li><p>lambda 函数：是一种匿名函数，返回函数名</p><ul><li><p>&lt;函数名&gt; = lambda &lt;参数&gt;:&lt;表达式&gt;</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">f = <span class="keyword">lambda</span> x,y：x+y</span><br><span class="line">f(<span class="number">10</span>,<span class="number">15</span>)</span><br><span class="line">f = <span class="keyword">lambda</span>: <span class="string">"lambda function"</span></span><br></pre></td></tr></table></figure></li></ul></li></ul><h2 id="5-2-实例7：七段数码管绘制"><a href="#5-2-实例7：七段数码管绘制" class="headerlink" title="5.2 实例7：七段数码管绘制"></a>5.2 实例7：七段数码管绘制</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#SevenDigitsDrawV1.py</span></span><br><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawLine</span><span class="params">(draw)</span>:</span>   <span class="comment">#绘制单段数码管</span></span><br><span class="line">    turtle.pendown() <span class="keyword">if</span> draw <span class="keyword">else</span> turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">40</span>)</span><br><span class="line">    turtle.right(<span class="number">90</span>)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawDigit</span><span class="params">(digit)</span>:</span> <span class="comment">#根据数字绘制七段数码管</span></span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">1</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">2</span>,<span class="number">6</span>,<span class="number">8</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    turtle.left(<span class="number">90</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> digit <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    turtle.left(<span class="number">180</span>)</span><br><span class="line">    turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">20</span>) </span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawDate</span><span class="params">(date)</span>:</span>  <span class="comment">#获得要输出的数字</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> date:</span><br><span class="line">        drawDigit(eval(i))  <span class="comment">#通过eval()函数将数字变为整数</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">main</span><span class="params">()</span>:</span></span><br><span class="line">    turtle.setup(<span class="number">800</span>, <span class="number">350</span>, <span class="number">200</span>, <span class="number">200</span>)</span><br><span class="line">    turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">-300</span>)</span><br><span class="line">    turtle.pensize(<span class="number">5</span>)</span><br><span class="line">    drawDate(<span class="string">'20181010'</span>)</span><br><span class="line">    turtle.hideturtle()</span><br><span class="line">    turtle.done()</span><br><span class="line">main()</span><br></pre></td></tr></table></figure><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#SevenDigitsDrawV2.py</span></span><br><span class="line"><span class="keyword">import</span> turtle, time</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawGap</span><span class="params">()</span>:</span> <span class="comment">#绘制数码管间隔</span></span><br><span class="line">    turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">5</span>)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawLine</span><span class="params">(draw)</span>:</span>   <span class="comment">#绘制单段数码管</span></span><br><span class="line">    drawGap()</span><br><span class="line">    turtle.pendown() <span class="keyword">if</span> draw <span class="keyword">else</span> turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">40</span>)</span><br><span class="line">    drawGap()</span><br><span class="line">    turtle.right(<span class="number">90</span>)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawDigit</span><span class="params">(d)</span>:</span> <span class="comment">#根据数字绘制七段数码管</span></span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">1</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">2</span>,<span class="number">6</span>,<span class="number">8</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    turtle.left(<span class="number">90</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    drawLine(<span class="literal">True</span>) <span class="keyword">if</span> d <span class="keyword">in</span> [<span class="number">0</span>,<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>] <span class="keyword">else</span> drawLine(<span class="literal">False</span>)</span><br><span class="line">    turtle.left(<span class="number">180</span>)</span><br><span class="line">    turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">20</span>)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">drawDate</span><span class="params">(date)</span>:</span></span><br><span class="line">    turtle.pencolor(<span class="string">"red"</span>)</span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> date:</span><br><span class="line">        <span class="keyword">if</span> i == <span class="string">'-'</span>:</span><br><span class="line">            turtle.write(<span class="string">'年'</span>,font=(<span class="string">"Arial"</span>, <span class="number">18</span>, <span class="string">"normal"</span>))</span><br><span class="line">            turtle.pencolor(<span class="string">"green"</span>)</span><br><span class="line">            turtle.fd(<span class="number">40</span>)</span><br><span class="line">        <span class="keyword">elif</span> i == <span class="string">'='</span>:</span><br><span class="line">            turtle.write(<span class="string">'月'</span>,font=(<span class="string">"Arial"</span>, <span class="number">18</span>, <span class="string">"normal"</span>))</span><br><span class="line">            turtle.pencolor(<span class="string">"blue"</span>)</span><br><span class="line">            turtle.fd(<span class="number">40</span>)</span><br><span class="line">        <span class="keyword">elif</span> i == <span class="string">'+'</span>:</span><br><span class="line">            turtle.write(<span class="string">'日'</span>,font=(<span class="string">"Arial"</span>, <span class="number">18</span>, <span class="string">"normal"</span>))</span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            drawDigit(eval(i))</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">main</span><span class="params">()</span>:</span></span><br><span class="line">    turtle.setup(<span class="number">800</span>, <span class="number">350</span>, <span class="number">200</span>, <span class="number">200</span>)</span><br><span class="line">    turtle.penup()</span><br><span class="line">    turtle.fd(<span class="number">-350</span>)</span><br><span class="line">    turtle.pensize(<span class="number">5</span>)</span><br><span class="line"><span class="comment">#    drawDate('2018-10=10+')</span></span><br><span class="line">    drawDate(time.strftime(<span class="string">'%Y-%m=%d+'</span>,time.gmtime()))</span><br><span class="line">    turtle.hideturtle()</span><br><span class="line">    turtle.done()</span><br><span class="line">main()</span><br></pre></td></tr></table></figure><h2 id="5-3-代码复用与函数递归"><a href="#5-3-代码复用与函数递归" class="headerlink" title="5.3 代码复用与函数递归"></a>5.3 代码复用与函数递归</h2><ul><li>代码复用与模块化设计：<ul><li>函数和对象是代码复用的两种主要形式</li><li>紧耦合：两个部分之间交流很多，无法独立存在</li><li>松耦合：两个部分交流较少，可以独立存在</li></ul></li><li>函数递归：函数定义中调用函数自身的方式</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fact</span><span class="params">(n)</span>:</span></span><br><span class="line"><span class="keyword">if</span> n == <span class="number">0</span>:</span><br><span class="line"><span class="keyword">return</span> <span class="number">1</span></span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"><span class="keyword">return</span> n*fact(n<span class="number">-1</span>)</span><br></pre></td></tr></table></figure><ul><li>字符串反转</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">rvs</span><span class="params">(s)</span>:</span></span><br><span class="line">    <span class="keyword">if</span> s==<span class="string">''</span>:</span><br><span class="line">        <span class="keyword">return</span> s</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> rvs(s[<span class="number">1</span>:])+s[<span class="number">0</span>]</span><br></pre></td></tr></table></figure><ul><li>汉诺塔：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">hanoi</span><span class="params">(n,src,dst,mid)</span>:</span></span><br><span class="line">    <span class="keyword">global</span> count</span><br><span class="line">    <span class="keyword">if</span> n == <span class="number">1</span>:</span><br><span class="line">        print(<span class="string">"&#123;&#125;:&#123;&#125;-&gt;&#123;&#125;"</span>.format(<span class="number">1</span>,src,dst))</span><br><span class="line">        count += <span class="number">1</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        hanoi(n<span class="number">-1</span>,src,mid,dst)</span><br><span class="line">        print(<span class="string">"&#123;&#125;:&#123;&#125;-&gt;&#123;&#125;"</span>.format(n,src,dst))</span><br><span class="line">        count += <span class="number">1</span></span><br><span class="line">        hanoi(n<span class="number">-1</span>,mid,dst,src)</span><br></pre></td></tr></table></figure><h2 id="5-4-模块4：PyInstaller库的使用"><a href="#5-4-模块4：PyInstaller库的使用" class="headerlink" title="5.4 模块4：PyInstaller库的使用"></a>5.4 模块4：PyInstaller库的使用</h2><ul><li>Windows 命令行 pyinstaller -F &lt;filename.py&gt;</li><li>常用参数：</li></ul><p><img src="https://s1.ax1x.com/2020/09/20/woIdNF.png" alt="woIdNF.png"></p><h2 id="5-5-实例8：科赫雪花小包裹"><a href="#5-5-实例8：科赫雪花小包裹" class="headerlink" title="5.5 实例8：科赫雪花小包裹"></a>5.5 实例8：科赫雪花小包裹</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#KochDrawV2.py</span></span><br><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">koch</span><span class="params">(size, n)</span>:</span></span><br><span class="line">    <span class="keyword">if</span> n == <span class="number">0</span>:</span><br><span class="line">        turtle.fd(size)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">for</span> angle <span class="keyword">in</span> [<span class="number">0</span>, <span class="number">60</span>, <span class="number">-120</span>, <span class="number">60</span>]:</span><br><span class="line">           turtle.left(angle)</span><br><span class="line">           koch(size/<span class="number">3</span>, n<span class="number">-1</span>)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">main</span><span class="params">()</span>:</span></span><br><span class="line">    turtle.setup(<span class="number">600</span>,<span class="number">600</span>)</span><br><span class="line">    turtle.penup()</span><br><span class="line">    turtle.goto(<span class="number">-200</span>, <span class="number">100</span>)</span><br><span class="line">    turtle.pendown()</span><br><span class="line">    turtle.pensize(<span class="number">2</span>)</span><br><span class="line">    level = <span class="number">5</span>      <span class="comment"># 3阶科赫雪花，阶数</span></span><br><span class="line">    koch(<span class="number">400</span>,level)     </span><br><span class="line">    turtle.right(<span class="number">120</span>)</span><br><span class="line">    koch(<span class="number">400</span>,level)</span><br><span class="line">    turtle.right(<span class="number">120</span>)</span><br><span class="line">    koch(<span class="number">400</span>,level)</span><br><span class="line">    turtle.hideturtle()</span><br><span class="line">main()</span><br><span class="line">turtle.done()</span><br></pre></td></tr></table></figure><h2 id="5-Practice"><a href="#5-Practice" class="headerlink" title="5.Practice"></a>5.Practice</h2><ul><li>任意累积：计算任意个输入数字的乘积</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">cmul</span><span class="params">(*a)</span>:</span></span><br><span class="line">    s = <span class="number">1</span></span><br><span class="line">    <span class="keyword">for</span> item <span class="keyword">in</span> a:</span><br><span class="line">        s *= item</span><br><span class="line">    <span class="keyword">return</span> s</span><br><span class="line"></span><br><span class="line">print(eval(<span class="string">"cmul(&#123;&#125;)"</span>.format(input())))</span><br></pre></td></tr></table></figure><ul><li>斐波那契数列：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fbi</span><span class="params">(n)</span>:</span></span><br><span class="line">    <span class="keyword">if</span> n <span class="keyword">in</span> [<span class="number">1</span>,<span class="number">2</span>]:</span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> fbi(n<span class="number">-1</span>)+fbi(n<span class="number">-2</span>)</span><br><span class="line"></span><br><span class="line">n = eval(input())</span><br><span class="line">print(fbi(n))</span><br></pre></td></tr></table></figure><ul><li>汉诺塔实践：每个步骤一行，每行参考格式如下：[STEP 10] A-&gt;C</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">steps = <span class="number">0</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">hanoi</span><span class="params">(src, des, mid, n)</span>:</span></span><br><span class="line">    <span class="keyword">global</span> steps</span><br><span class="line">    <span class="keyword">if</span> n == <span class="number">1</span>:</span><br><span class="line">        steps += <span class="number">1</span></span><br><span class="line">        print(<span class="string">"[STEP&#123;:&gt;4&#125;] &#123;&#125;-&gt;&#123;&#125;"</span>.format(steps, src, des))</span><br><span class="line">        </span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        hanoi(src,mid,des,n<span class="number">-1</span>)</span><br><span class="line">        steps += <span class="number">1</span></span><br><span class="line">        print(<span class="string">"[STEP&#123;:&gt;4&#125;] &#123;&#125;-&gt;&#123;&#125;"</span>.format(steps, src, des))</span><br><span class="line">        hanoi(mid,des,src,n<span class="number">-1</span>)</span><br><span class="line"></span><br><span class="line">N = eval(input())</span><br><span class="line">hanoi(<span class="string">"A"</span>, <span class="string">"C"</span>, <span class="string">"B"</span>, N)</span><br></pre></td></tr></table></figure><ul><li>连续质数计算：输入n，输出n后面的5个质数</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">prime</span><span class="params">(m)</span>:</span></span><br><span class="line">    <span class="keyword">if</span> m &lt; <span class="number">2</span>:</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        end = int(pow(m, <span class="number">0.5</span>) + <span class="number">1</span>)</span><br><span class="line">        <span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">2</span>, end):</span><br><span class="line">            <span class="keyword">if</span> m%i == <span class="number">0</span>:</span><br><span class="line">                <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    </span><br><span class="line">n = eval(input())</span><br><span class="line">n = (int(n) + <span class="number">1</span>) <span class="keyword">if</span> (n &gt; int(n)) <span class="keyword">else</span> int(n)</span><br><span class="line">count = <span class="number">5</span></span><br><span class="line"><span class="keyword">while</span> count &gt; <span class="number">0</span>:</span><br><span class="line">    <span class="keyword">if</span> prime(n):</span><br><span class="line">        <span class="keyword">if</span> count &gt; <span class="number">1</span>:</span><br><span class="line">            print(n, end=<span class="string">','</span>)</span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            print(n)</span><br><span class="line">        count -= <span class="number">1</span></span><br><span class="line">    n += <span class="number">1</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 4 程序的控制结构</title>
    <link href="https://onesmallstep.vip/2020/09/18/PythonClass4/"/>
    <id>https://onesmallstep.vip/2020/09/18/PythonClass4/</id>
    <published>2020-09-18T01:27:43.000Z</published>
    <updated>2020-09-18T01:45:32.358Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="4-程序的控制结构"><a href="#4-程序的控制结构" class="headerlink" title="4 程序的控制结构"></a>4 程序的控制结构</h1><h2 id="4-1-程序的分支结构"><a href="#4-1-程序的分支结构" class="headerlink" title="4.1 程序的分支结构"></a>4.1 程序的分支结构</h2><ul><li><p>单分支结构：</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">guess = eval(input())</span><br><span class="line"><span class="keyword">if</span> guess == <span class="number">99</span>:</span><br><span class="line">print(<span class="string">"You are right"</span>)</span><br></pre></td></tr></table></figure></li><li><p>二分支结构</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">guess = eval(input())</span><br><span class="line"><span class="keyword">if</span> guess == <span class="number">99</span>:</span><br><span class="line">print(<span class="string">"You are right"</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">print(<span class="string">"You are wrong"</span>)</span><br></pre></td></tr></table></figure><p>  表达的紧凑形式：</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">guess = eval(input())</span><br><span class="line">print(<span class="string">"You are &#123;&#125;"</span>.format(<span class="string">"right"</span> <span class="keyword">if</span> guess==<span class="number">99</span> <span class="keyword">else</span> <span class="string">'wrong'</span>))</span><br></pre></td></tr></table></figure></li><li><p>多分支结构：成绩分级</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">score = eval(input())</span><br><span class="line"><span class="keyword">if</span> score &lt;= <span class="number">60</span>:</span><br><span class="line">grade = <span class="string">"D"</span></span><br><span class="line"><span class="keyword">elif</span> score &lt;= <span class="number">70</span>:</span><br><span class="line">  grade = <span class="string">'C'</span></span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">  grade = <span class="string">'A'</span></span><br></pre></td></tr></table></figure></li><li><p>条件判断操作符：</p><p>  <img src="https://s1.ax1x.com/2020/09/18/wfjznI.png" alt="wfjznI.png"></p><p>  条件组合：</p><p>  <img src="https://s1.ax1x.com/2020/09/18/wfjvjA.png" alt="wfjvjA.png"></p></li><li><p>异常处理：</p><p>  try：</p><p>  &lt;语句块1&gt;</p><p>  except &lt;异常类型&gt;:</p><p>  &lt;语句块2&gt;</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">try</span>: </span><br><span class="line">num = eval(input(<span class="string">"Please input an int: "</span>))</span><br><span class="line">print(num**<span class="number">2</span>)</span><br><span class="line"><span class="keyword">except</span> NameError:</span><br><span class="line">print(<span class="string">'It\'s not an int.'</span>)</span><br></pre></td></tr></table></figure><p>  高级异常处理方法：</p><p>  try：</p><p>  &lt;语句块1&gt;</p><p>  except:</p><p>  &lt;语句块2&gt;</p><p>  else：</p><p>  &lt;语句块3&gt;</p><p>  finally:</p><p>  &lt;语句块4&gt;</p></li></ul><h2 id="4-2-实例8：身体质量指数"><a href="#4-2-实例8：身体质量指数" class="headerlink" title="4.2 实例8：身体质量指数"></a>4.2 实例8：身体质量指数</h2><ul><li><p>定义：BMI = 体重 / 身高^2</p></li><li><p>输入：身高和体重</p><p>  输出：BMI分类</p></li><li><p>版本1</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#CalBMIv1.py</span></span><br><span class="line">height, weight = eval(input(<span class="string">"请输入身高(米)和体重(公斤)[逗号隔开]: "</span>))</span><br><span class="line">bmi = weight / pow(height, <span class="number">2</span>)</span><br><span class="line">print(<span class="string">"BMI 数值为：&#123;:.2f&#125;"</span>.format(bmi))</span><br><span class="line">who = <span class="string">""</span></span><br><span class="line"><span class="keyword">if</span> bmi &lt; <span class="number">18.5</span>:</span><br><span class="line">    who = <span class="string">"偏瘦"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">18.5</span> &lt;= bmi &lt; <span class="number">25</span>:</span><br><span class="line">    who = <span class="string">"正常"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">25</span> &lt;= bmi &lt; <span class="number">30</span>:</span><br><span class="line">    who = <span class="string">"偏胖"</span></span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    who = <span class="string">"肥胖"</span></span><br><span class="line">print(<span class="string">"BMI 指标为:国际'&#123;0&#125;'"</span>.format(who))</span><br></pre></td></tr></table></figure></li><li><p>版本2</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#CalBMIv2.py</span></span><br><span class="line">height, weight = eval(input(<span class="string">"请输入身高(米)和体重\(公斤)[逗号隔开]: "</span>))</span><br><span class="line">bmi = weight / pow(height, <span class="number">2</span>)</span><br><span class="line">print(<span class="string">"BMI 数值为：&#123;:.2f&#125;"</span>.format(bmi))</span><br><span class="line">nat = <span class="string">""</span></span><br><span class="line"><span class="keyword">if</span> bmi &lt; <span class="number">18.5</span>:</span><br><span class="line">    nat = <span class="string">"偏瘦"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">18.5</span> &lt;= bmi &lt; <span class="number">24</span>:</span><br><span class="line">    nat = <span class="string">"正常"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">24</span> &lt;= bmi &lt; <span class="number">28</span>:</span><br><span class="line">    nat = <span class="string">"偏胖"</span></span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    nat = <span class="string">"肥胖"</span></span><br><span class="line">print(<span class="string">"BMI 指标为:国内'&#123;0&#125;'"</span>.format(nat))</span><br></pre></td></tr></table></figure></li><li><p>版本3</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#CalBMIv3.py</span></span><br><span class="line">height, weight = eval(input(<span class="string">"请输入身高(米)和体重(公斤)[逗号隔开]: "</span>))</span><br><span class="line">bmi = weight / pow(height, <span class="number">2</span>)</span><br><span class="line">print(<span class="string">"BMI 数值为：&#123;:.2f&#125;"</span>.format(bmi))</span><br><span class="line">who, nat = <span class="string">""</span>, <span class="string">""</span></span><br><span class="line"><span class="keyword">if</span> bmi &lt; <span class="number">18.5</span>:</span><br><span class="line">    who, nat = <span class="string">"偏瘦"</span>, <span class="string">"偏瘦"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">18.5</span> &lt;= bmi &lt; <span class="number">24</span>:</span><br><span class="line">    who, nat = <span class="string">"正常"</span>, <span class="string">"正常"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">24</span> &lt;= bmi &lt; <span class="number">25</span>:</span><br><span class="line">    who, nat = <span class="string">"正常"</span>, <span class="string">"偏胖"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">25</span> &lt;= bmi &lt; <span class="number">28</span>:</span><br><span class="line">    who, nat = <span class="string">"偏胖"</span>, <span class="string">"偏胖"</span></span><br><span class="line"><span class="keyword">elif</span> <span class="number">28</span> &lt;= bmi &lt; <span class="number">30</span>:</span><br><span class="line">    who, nat = <span class="string">"偏胖"</span>, <span class="string">"肥胖"</span></span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    who, nat = <span class="string">"肥胖"</span>, <span class="string">"肥胖"</span></span><br><span class="line">print(<span class="string">"BMI 指标为:国际'&#123;0&#125;', 国内'&#123;1&#125;'"</span>.format(who, nat))</span><br></pre></td></tr></table></figure></li></ul><h2 id="4-3-程序的循环结构"><a href="#4-3-程序的循环结构" class="headerlink" title="4.3 程序的循环结构"></a>4.3 程序的循环结构</h2><ul><li><p>遍历循环：</p><p>  for &lt;循环变量&gt; in &lt;遍历结构&gt;:</p><p>  &lt;语句块&gt;</p><ul><li>计数循环：for i in range(M, N, K):</li><li>字符串遍历：for c in s:</li><li>列表遍历：for item in ls:</li><li>文件遍历：for line in fi:</li></ul></li><li><p>无限循环：</p><p>  while &lt;条件&gt;:</p><p>  &lt;语句块&gt;</p></li><li><p>循环控制保留字：</p><ul><li>break: 跳出并结束整个当前循环</li><li>continue: 跳出当前循环，执行下一次循环</li></ul></li><li><p>循环的扩展：for，while 后接 else。else作为正常循环的奖励（没有break退出）</p></li></ul><h2 id="4-4-模块3：random库"><a href="#4-4-模块3：random库" class="headerlink" title="4.4 模块3：random库"></a>4.4 模块3：random库</h2><ul><li>伪随机数：采用梅森旋转算法生成的（伪）随机序列中的元素</li><li>import random</li><li>基本随机函数：<ul><li>random():生成一个0.0到1.0之间的随机小数</li><li>random.seed(a=None): 确定随机数种子，默认为当前系统时间</li></ul></li><li>扩展随机数函数：<ul><li>randint(a,b): 生成[a,b] 之间的整数</li><li>randrange(m,n,[,k]): 生成一个[m,n)之间，k为步长的随机整数</li><li>getrandbits(k): 生成一个k比特长的随机整数</li><li>uniform(a,b): 生成[a,b]之间的随机小数</li><li>choice(seq): 从序列中随机选择一个元素</li><li>shuffle(seq): 将序列中的元素随机排序，返回打乱后的序列</li></ul></li></ul><h2 id="4-5-实例6：圆周率的计算"><a href="#4-5-实例6：圆周率的计算" class="headerlink" title="4.5 实例6：圆周率的计算"></a>4.5 实例6：圆周率的计算</h2><ul><li>蒙特卡罗方法：随机撒点比较扇形和方形面积的比值</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># solution 1</span></span><br><span class="line">pi = <span class="number">0</span></span><br><span class="line">N = <span class="number">100</span></span><br><span class="line"><span class="keyword">for</span> k <span class="keyword">in</span> range(N):</span><br><span class="line">pi += <span class="number">1</span>/pow(<span class="number">16</span>,k)*(\</span><br><span class="line"><span class="number">4</span>/(<span class="number">8</span>*k+<span class="number">1</span>)<span class="number">-2</span>/(<span class="number">8</span>*k+<span class="number">4</span>)-\</span><br><span class="line"><span class="number">1</span>/(<span class="number">8</span>*k+<span class="number">5</span>)<span class="number">-1</span>/(<span class="number">8</span>*k+<span class="number">6</span>)) </span><br><span class="line">print(pi)</span><br></pre></td></tr></table></figure><ul><li>solution2</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> random <span class="keyword">import</span> random</span><br><span class="line"><span class="keyword">from</span> time <span class="keyword">import</span> perf_counter</span><br><span class="line">DARTS = <span class="number">1000</span>*<span class="number">1000</span></span><br><span class="line">hits = <span class="number">0.0</span></span><br><span class="line">start = perf_counter()</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>,DARTS+<span class="number">1</span>):</span><br><span class="line">x,y = random(),random()</span><br><span class="line">hits += <span class="number">1</span> <span class="keyword">if</span> (x**<span class="number">2</span>+y**<span class="number">2</span>&lt;=<span class="number">1</span>) <span class="keyword">else</span> <span class="number">0</span></span><br><span class="line">pi = <span class="number">4</span> * (hits/DARTS)</span><br><span class="line">print(pi)</span><br><span class="line">print(<span class="string">"Runing time: &#123;:.5f&#125;s"</span>.format(perf_counter()-start))</span><br></pre></td></tr></table></figure><h2 id="4-Practice"><a href="#4-Practice" class="headerlink" title="4. Practice"></a>4. Practice</h2><ul><li><p>三位水仙花数：ABC是一个”3位水仙花数”，则：A的3次方＋B的3次方＋C的3次方 = ABC。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬请按照从小到大的顺序输出所有的3位水仙花数，请用”逗号”分隔输出结果。</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">arr = []</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">100</span>,<span class="number">1000</span>):</span><br><span class="line">    a = i//<span class="number">100</span></span><br><span class="line">    b = (i%<span class="number">100</span>)//<span class="number">10</span></span><br><span class="line">    c = i-a*<span class="number">100</span>-b*<span class="number">10</span></span><br><span class="line">    <span class="keyword">if</span> (a**<span class="number">3</span>+b**<span class="number">3</span>+c**<span class="number">3</span>)==i:</span><br><span class="line">        arr.append(i)</span><br><span class="line">print(<span class="string">','</span>.join(str(i) <span class="keyword">for</span> i <span class="keyword">in</span> arr))</span><br><span class="line"></span><br><span class="line"><span class="comment"># solution 2</span></span><br><span class="line">l = <span class="string">''</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">100</span>,<span class="number">1000</span>,<span class="number">1</span>):</span><br><span class="line">    t = str(i)</span><br><span class="line">    s = eval(t[<span class="number">0</span>])**<span class="number">3</span> + eval(t[<span class="number">1</span>])**<span class="number">3</span> + eval(t[<span class="number">2</span>])**<span class="number">3</span></span><br><span class="line">    <span class="keyword">if</span> s == i:</span><br><span class="line">     l = l + <span class="string">'&#123;&#125;'</span>.format(i) + <span class="string">','</span></span><br><span class="line">print(l[:<span class="number">-1</span>])</span><br><span class="line"></span><br><span class="line"><span class="comment"># solution 3</span></span><br><span class="line">a = list(map(<span class="keyword">lambda</span> x: x[<span class="number">1</span>], filter(<span class="keyword">lambda</span> x: x[<span class="number">0</span>], [(i*<span class="number">100</span>+j*<span class="number">10</span>+k == i**<span class="number">3</span>+j**<span class="number">3</span>+k**<span class="number">3</span>, i**<span class="number">3</span>+j**<span class="number">3</span>+k**<span class="number">3</span>) <span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>, <span class="number">10</span>) <span class="keyword">for</span> j <span class="keyword">in</span> range(<span class="number">0</span>, <span class="number">10</span>) <span class="keyword">for</span> k <span class="keyword">in</span> range(<span class="number">0</span>, <span class="number">10</span>)])))</span><br></pre></td></tr></table></figure></li><li><p>整数的加和减：1-2+3-4…966，奇数为正，偶数为负</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">result = <span class="number">0</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>,<span class="number">967</span>):</span><br><span class="line">    result += i <span class="keyword">if</span> (i%<span class="number">2</span>==<span class="number">1</span>) <span class="keyword">else</span> -i</span><br><span class="line">print(result)</span><br></pre></td></tr></table></figure></li><li><p>用户登陆的三次机会：</p><p>  给用户三次输入用户名和密码的机会，要求如下：‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>  1）如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’，输出‘登录成功！’，退出程序；‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>  2）当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误！退出程序。”。</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">i = <span class="number">0</span></span><br><span class="line"><span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">    <span class="keyword">if</span> i==<span class="number">3</span>:</span><br><span class="line">        print(<span class="string">'3次用户名或者密码均有误！退出程序。'</span>)</span><br><span class="line">        <span class="keyword">break</span></span><br><span class="line">    username = input()</span><br><span class="line">    password = input()</span><br><span class="line">    <span class="keyword">if</span> username == <span class="string">'Kate'</span> <span class="keyword">and</span> password == <span class="string">'666666'</span>:</span><br><span class="line">        print(<span class="string">'登录成功！'</span>)</span><br><span class="line">        <span class="keyword">break</span></span><br><span class="line">    i += <span class="number">1</span></span><br></pre></td></tr></table></figure></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 3 基本数据类型</title>
    <link href="https://onesmallstep.vip/2020/09/17/PythonClass3/"/>
    <id>https://onesmallstep.vip/2020/09/17/PythonClass3/</id>
    <published>2020-09-17T03:23:29.000Z</published>
    <updated>2020-09-17T03:35:32.490Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="3-基本数据类型"><a href="#3-基本数据类型" class="headerlink" title="3 基本数据类型"></a>3 基本数据类型</h1><h2 id="3-1-数字类型及其操作"><a href="#3-1-数字类型及其操作" class="headerlink" title="3.1 数字类型及其操作"></a>3.1 数字类型及其操作</h2><ul><li><p>整数类型</p><ul><li>可正可负，没有取值的范围限制</li><li>pow(x,y) 计算x^y</li><li>表示形式：十进制表示，二进制（0b，0B开头）、八进制（0o，0O表示）、十六进制（0x，0X）</li></ul></li><li><p>浮点数类型：带有小数点及小数的数字</p><ul><li>浮点数间运算存在不确定尾数，不是bug</li><li>0.1 + 0.2 == 0.3 # False</li><li>round(x, d) 对x四舍五入，d是小数截取的位数</li><li>浮点数运算及比较，用round函数辅助</li><li>科学计数法：4.3e-3 = 0.0043</li></ul></li><li><p>复数类型：</p><ul><li>z=a+bj</li><li>z.real 获得实部，z.image获得虚部</li></ul></li><li><p>数值操作符：</p><p>  <img src="https://s1.ax1x.com/2020/09/17/wRwLJ1.png" alt="wRwLJ1.png"><br>  <img src="https://s1.ax1x.com/2020/09/17/wRwHo9.png" alt="wRwHo9.png"><br>  <img src="https://s1.ax1x.com/2020/09/17/wRwqiR.png" alt="wRwqiR.png"></p></li><li><p>整数-&gt;浮点数-&gt;复数</p></li><li><p>数值运算函数：</p><ul><li>abs(x) : 求绝对值</li><li>divmod(x, y) : 商余</li><li>pow(x, y[, z]) : 幂余</li><li>round(x, d) : 四舍五入，d是保留小数位，默认为0</li><li>max(x1, x2, … , xn) : 求数列中的最大值</li><li>min(x1, x2, … , xn) : 求数列中的最小值</li><li>int(x) : 将x变为整数型</li><li>float(x) : 将x变为浮点数型</li><li>comlex(x) :  将x变为复数型</li></ul></li></ul><h2 id="3-2-实例3：天天向上的力量"><a href="#3-2-实例3：天天向上的力量" class="headerlink" title="3.2 实例3：天天向上的力量"></a>3.2 实例3：天天向上的力量</h2><p>Q1：计算努力和放松365天的差别</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">dayup = pow(<span class="number">1.001</span>, <span class="number">365</span>)</span><br><span class="line">daydown = pow(<span class="number">0.999</span>, <span class="number">365</span>)</span><br><span class="line">print(<span class="string">"UP: &#123;:.2f&#125;, DOWN: &#123;:.2f&#125;"</span>.format(dayup,daydown))</span><br></pre></td></tr></table></figure><p>Q2：不同努力程度的差别</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">dayfactor = <span class="number">0.01</span></span><br><span class="line">dayup = pow(<span class="number">1</span>+dayfactor, <span class="number">365</span>)</span><br><span class="line">daydown = pow(<span class="number">1</span>-dayfactor, <span class="number">365</span>)</span><br><span class="line">print(<span class="string">"UP: &#123;:.2f&#125;, DOWN: &#123;:.2f&#125;"</span>.format(dayup,daydown))</span><br></pre></td></tr></table></figure><p>Q3：五天工作，两天休息</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">dayup = <span class="number">1</span></span><br><span class="line">dayfactor = <span class="number">0.01</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">365</span>):</span><br><span class="line">    <span class="keyword">if</span> i%<span class="number">7</span> <span class="keyword">in</span> [<span class="number">6</span>,<span class="number">0</span>]:</span><br><span class="line">        dayup = dayup*(<span class="number">1</span>-dayfactor)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        dayup = dayup*(<span class="number">1</span>+dayfactor)</span><br><span class="line">print(<span class="string">'&#123;:.2f&#125;'</span>.format(dayup))</span><br></pre></td></tr></table></figure><p>Q4：要怎样的努力程度才能追上别人</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">dayUP</span><span class="params">(df)</span>:</span></span><br><span class="line">    dayup = <span class="number">1</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">365</span>):</span><br><span class="line">        <span class="keyword">if</span> i % <span class="number">7</span> <span class="keyword">in</span> [<span class="number">6</span>,<span class="number">0</span>]:</span><br><span class="line">            dayup = dayup*(<span class="number">1</span>-dayfactor)</span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            dayup = dayup*(<span class="number">1</span>+dayfactor)</span><br><span class="line">    <span class="keyword">return</span> dayup</span><br><span class="line"></span><br><span class="line">dayfactor = <span class="number">0.01</span></span><br><span class="line"><span class="keyword">while</span> dayUP(dayfactor)&lt;<span class="number">37.78</span>:</span><br><span class="line">    dayfactor += <span class="number">0.001</span></span><br><span class="line">print(<span class="string">'The day factor should be &#123;:.3f&#125;'</span>.format(dayfactor))</span><br></pre></td></tr></table></figure><h2 id="3-3-字符串类型及操作"><a href="#3-3-字符串类型及操作" class="headerlink" title="3.3 字符串类型及操作"></a>3.3 字符串类型及操作</h2><p>字符串类型及操作</p><ul><li><p>字符串：由0个或多个字符组成的有序字符序列</p></li><li><p>字符串共有两类四种表示：</p><ul><li>由一对单引号或双引号表示，仅表示单行字符串</li><li>由一对三单引号或三双引号表示，可表示多行字符串</li></ul></li><li><p>字符串的序号；正向递增序号，反向递减序号</p></li><li><p>索引：<string>[ ]</p></li><li><p>切片：<string>[M: N: K]，头，尾，步长，省略表示索引至一端。逆序：[::-1]</p></li><li><p>转义符：<br>  <img src="https://s1.ax1x.com/2020/09/17/wRBlHe.png" alt="Python 转义符"></p></li><li><p>字符串操作符：</p><ul><li>x + y: 连接两个字符串x和y</li><li>n * x 或 x * n: 复制n次字符串x</li><li>x in s：如果x是s的子串，返回True，否则返回False</li></ul></li><li><p>字符串处理函数：</p><ul><li>len(x) : 计算字符串的长度</li><li>str(x) : 转换x为字符串类型</li><li>hex(x) 或 oct(x) : 将整数x的十六进制或者八进制小写心事的字符串</li><li>chr(u) : u为unicode编码，返回其对应的字符</li><li>ord(x) : x为字符，返回其对应的Unicode编码</li></ul></li><li><p>字符串的处理方法：&lt; a &gt;.&lt; b &gt;</p><ul><li>str.lower() 或 str.upper() : 返回字符串的副本，全部为大写或小写字符</li><li>str.split(sep=None) ：返回一个列表，由str根据sep被分割的部分组成</li><li>str.count(sub) : 返回子串sub在str中出现的次数</li><li>str.replace(old, new) : 返回字符串的副本，所有old子串被替换为new</li><li>str.center(width[,fillchar]) : 字符串str根据宽度width居中，fillchar可选</li><li>str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符</li><li>str.join(iter) : 在iter变量除最后元素外每个元素后增加一个str</li></ul></li><li><p>字符串类型的格式化：</p><ul><li><p>槽：{ &lt;序号&gt;: &lt;格式控制标记&gt;}</p><p><img src="https://s1.ax1x.com/2020/09/17/wRwORx.png" alt="wRwORx.png"><br><img src="https://s1.ax1x.com/2020/09/17/wRwXz6.png" alt="wRwXz6.png"></p></li></ul></li></ul><h2 id="3-4-模块2：time库的使用"><a href="#3-4-模块2：time库的使用" class="headerlink" title="3.4 模块2：time库的使用"></a>3.4 模块2：time库的使用</h2><ul><li><p>time库的基本情况</p><ul><li>表达计算机时间</li><li>提供获取系统时间并格式化输出功能</li><li>提供系统级精确计时功能，用于程序性能分析</li><li>import time</li></ul></li><li><p>time库包括三类函数：</p><ul><li><p>时间获取：</p><ul><li>time() : 获取当前系统的时间戳，级计算机内部的时间值</li><li>ctime() : 获取当前时间并以易读方式表示，返回字符串</li><li>gmtime() : 获取当前时间，输出为结构体</li></ul></li><li><p>时间格式化：将时间以合理的方式展示出来</p><ul><li><p>strftime(tpl, ts) : tpl是格式化模板字符串，用来定义输出效果；ts是计算机内部时间变量类型</p><p><img src="https://s1.ax1x.com/2020/09/17/wRwvQK.png" alt="wRwvQK.png"><br><img src="https://s1.ax1x.com/2020/09/17/wRwxsO.png" alt="wRwxsO.png"></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> time</span><br><span class="line">t = time.gmtime()</span><br><span class="line">time.strftime(<span class="string">"%Y-%m-%d %H:%M:%S"</span>,t)</span><br></pre></td></tr></table></figure></li><li><p>strpitme() : 将一段字符串变成时间</p></li></ul></li><li><p>程序计时应用：</p><ul><li>perf_counter() : 返回一个CPU级别的精确时间计数值，单位为秒</li><li>sleep(s) : s拟休眠的时间，单位是秒，可以是浮点数</li></ul><h2 id="3-5-实例4：文本进度条"><a href="#3-5-实例4：文本进度条" class="headerlink" title="3.5 实例4：文本进度条"></a>3.5 实例4：文本进度条</h2><p>文本进度条</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#TextProBarV1.py</span></span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line">scale = <span class="number">10</span></span><br><span class="line">print(<span class="string">"------Start------"</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(scale+<span class="number">1</span>):</span><br><span class="line">    a = <span class="string">'*'</span> * i</span><br><span class="line">    b = <span class="string">'.'</span> * (scale - i)</span><br><span class="line">    c = (i/scale)*<span class="number">100</span></span><br><span class="line">    print(<span class="string">"&#123;:^3.0f&#125;%[&#123;&#125;-&gt;&#123;&#125;]"</span>.format(c,a,b))</span><br><span class="line">    time.sleep(<span class="number">0.5</span>)</span><br><span class="line">print(<span class="string">"------End------"</span>)</span><br></pre></td></tr></table></figure><p>向下刷新的文本进度条</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#TextProBarV2.py</span></span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">101</span>):</span><br><span class="line">    print(<span class="string">"\r&#123;:3&#125;%"</span>.format(i), end=<span class="string">""</span>)</span><br><span class="line">    time.sleep(<span class="number">0.1</span>)</span><br></pre></td></tr></table></figure><p>进度条：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#TextProBarV3.py</span></span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line">scale = <span class="number">50</span></span><br><span class="line">print(<span class="string">"Start"</span>.center(scale//<span class="number">2</span>, <span class="string">"-"</span>))</span><br><span class="line">start = time.perf_counter()</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(scale+<span class="number">1</span>):</span><br><span class="line">    a = <span class="string">'*'</span> * i</span><br><span class="line">    b = <span class="string">'.'</span> * (scale - i)</span><br><span class="line">    c = (i/scale)*<span class="number">100</span></span><br><span class="line">    dur = time.perf_counter() - start</span><br><span class="line">    print(<span class="string">"\r&#123;:^3.0f&#125;%[&#123;&#125;-&gt;&#123;&#125;]&#123;:.2f&#125;s"</span>.format(c,a,b,dur),end=<span class="string">''</span>)</span><br><span class="line">    time.sleep(<span class="number">0.1</span>)</span><br><span class="line">print(<span class="string">"\n"</span>+<span class="string">"End"</span>.center(scale//<span class="number">2</span>,<span class="string">'-'</span>))</span><br></pre></td></tr></table></figure><p>进度条设计函数</p><p><img src="https://s1.ax1x.com/2020/09/17/wRwzLD.png" alt="wRwzLD.png"></p><h2 id="3-Practice"><a href="#3-Practice" class="headerlink" title="3. Practice"></a>3. Practice</h2></li><li><p>三次方格式化: 获得用户输入的一个数字，可能是整数或浮点数，a，计算a的三次方值，并打印输出。输出结果采用宽度20个字符、居中输出、多余字符采用减号(-)填充。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬如果结果超过20个字符，则以结果宽度为准。</p><p>  Input: <code>10</code></p><p>  Output: <code>--------1000------</code></p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">s=input()</span><br><span class="line">print(<span class="string">"&#123;0:-^20&#125;"</span>.format(pow(eval(s),<span class="number">3</span>)))</span><br></pre></td></tr></table></figure></li><li><p>星号三角形：读入一个整数N，N是奇数，输出由星号字符组成的等边三角形，要求：‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬第1行1个星号，第2行3个星号，第3行5个星号，依次类推，最后一行共N的星号。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>  Input: 3</p><p>  Output: </p>  <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"> *</span><br><span class="line">***‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</span><br></pre></td></tr></table></figure>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">num = eval(input())</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(round((num+<span class="number">1</span>)/<span class="number">2</span>)):</span><br><span class="line">    print(round((num<span class="number">-2</span>*i<span class="number">-1</span>)/<span class="number">2</span>)*<span class="string">" "</span>+(<span class="number">2</span>*i+<span class="number">1</span>)*<span class="string">"*"</span>+round((num<span class="number">-2</span>*i<span class="number">-1</span>)/<span class="number">2</span>)*<span class="string">" "</span>)</span><br></pre></td></tr></table></figure></li><li><p>凯撒密码：</p><p>  原文：A B C D E F G H I J K L M N O P Q R S T U V W X Y Z‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>  密文：D E F G H I J K L M N O P Q R S T U V W X Y Z A B C</p><p>  假设用户可能使用的输入包含大小写字母a<del>zA</del>Z、空格和特殊符号，请编写一个程序，对输入字符串进行恺撒密码加密，直接输出结果，其中空格不用进行加密处理。使用input()获得输入。</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Str = input()</span><br><span class="line">p=<span class="string">"abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVW"</span></span><br><span class="line">q=<span class="string">"xyzXYZ"</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">0</span>, len(Str)):</span><br><span class="line">    <span class="keyword">if</span> Str[i] == <span class="string">' '</span>:</span><br><span class="line">        print(<span class="string">' '</span>, end=<span class="string">""</span>)</span><br><span class="line">    <span class="keyword">elif</span> Str[i] <span class="keyword">in</span> q:</span><br><span class="line">        print(chr(ord(Str[i])<span class="number">-23</span>),end=<span class="string">''</span>)</span><br><span class="line">    <span class="keyword">elif</span> Str[i] <span class="keyword">in</span> p:</span><br><span class="line">        print(chr(ord(Str[i])+<span class="number">3</span>),end=<span class="string">''</span>)</span><br><span class="line">    <span class="keyword">else</span>: </span><br><span class="line">        print(Str[i],end=<span class="string">''</span>)</span><br></pre></td></tr></table></figure></li></ul></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 2 Python图形绘制</title>
    <link href="https://onesmallstep.vip/2020/09/16/PythonClass2/"/>
    <id>https://onesmallstep.vip/2020/09/16/PythonClass2/</id>
    <published>2020-09-16T00:05:50.000Z</published>
    <updated>2020-09-16T00:18:02.254Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="2-Python图形绘制"><a href="#2-Python图形绘制" class="headerlink" title="2 Python图形绘制"></a>2 Python图形绘制</h1><h2 id="2-1-深入理解Python语言"><a href="#2-1-深入理解Python语言" class="headerlink" title="2.1 深入理解Python语言"></a>2.1 深入理解Python语言</h2><p>Python特点与优势：强制可读性、较少的底层语法元素、多种编程方式、支持中文字符、代码量少、13万第三方库、避免重复造轮子、开放共享</p><h2 id="2-2-实例2：Python蟒蛇绘制"><a href="#2-2-实例2：Python蟒蛇绘制" class="headerlink" title="2.2 实例2：Python蟒蛇绘制"></a>2.2 实例2：Python蟒蛇绘制</h2><p>问题分析：设计蟒蛇的基本形状</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#PythonDraw.py</span></span><br><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line">turtle.setup(<span class="number">650</span>, <span class="number">350</span>, <span class="number">200</span>, <span class="number">200</span>)</span><br><span class="line">turtle.penup()</span><br><span class="line">turtle.fd(<span class="number">-250</span>)</span><br><span class="line">turtle.pendown()</span><br><span class="line">turtle.pensize(<span class="number">25</span>)</span><br><span class="line">turtle.pencolor(<span class="string">"purple"</span>)</span><br><span class="line">turtle.seth(<span class="number">-40</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">4</span>):</span><br><span class="line">    turtle.circle(<span class="number">40</span>, <span class="number">80</span>)</span><br><span class="line">    turtle.circle(<span class="number">-40</span>, <span class="number">80</span>)</span><br><span class="line">turtle.circle(<span class="number">40</span>, <span class="number">80</span>/<span class="number">2</span>)</span><br><span class="line">turtle.fd(<span class="number">40</span>)</span><br><span class="line">turtle.circle(<span class="number">16</span>, <span class="number">180</span>)</span><br><span class="line">turtle.fd(<span class="number">40</span> * <span class="number">2</span>/<span class="number">3</span>)</span><br><span class="line">turtle.done()</span><br></pre></td></tr></table></figure><p>引入会图库 <em>turtle</em></p><h2 id="2-3-模块I：turtle库的应用"><a href="#2-3-模块I：turtle库的应用" class="headerlink" title="2.3 模块I：turtle库的应用"></a>2.3 模块I：turtle库的应用</h2><p>turtle库是turtle绘图体系的Python实现，Python语言的标准库之一</p><p>turtled的绘图窗体：使用的最小绘图元素是像素。</p><p>绝对坐标系（以画布中心为原点）：</p><p><img src="https://s1.ax1x.com/2020/09/16/wcGmXq.png" alt=""></p><p>海龟坐标系（以海龟位置为原点的坐标系）</p><p><img src="https://s1.ax1x.com/2020/09/16/wcGun0.png" alt=""></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">turtle.setup(width, height, startx, starty)</span><br><span class="line"><span class="comment"># 宽度，高度，起始点坐标（窗体左上角位置相对于屏幕左上角的坐标），不是必须的函数</span></span><br><span class="line">turtle.goto(x,y)</span><br><span class="line"><span class="comment"># 让海龟移动到目标坐标点</span></span><br><span class="line">turtle.fd(d)</span><br><span class="line"><span class="comment"># 前进d的距离</span></span><br><span class="line">turtle.bk(d)</span><br><span class="line"><span class="comment"># 返回d的距离</span></span><br><span class="line">turtle.circle(r,angle)</span><br><span class="line">turtle.circle(r,extent=<span class="literal">None</span>)</span><br><span class="line"><span class="comment"># 在前进方向左侧画圈</span></span><br><span class="line">turtle.seth(angle)</span><br><span class="line"><span class="comment"># 改变前进方向，angle为绝对读书</span></span><br><span class="line">turtle.left(angle)</span><br><span class="line">turtle.right(angle)</span><br><span class="line"><span class="comment"># 改变前进方向，angle为相对角度</span></span><br><span class="line">turtle.colormode(mode)</span><br><span class="line"><span class="comment"># RGB色彩模式，1.0，255</span></span><br></pre></td></tr></table></figure><ul><li><p>库引用：使用 import 保留字完成，采用 <a>.<b> 来调用</p><p>  使用 from 和 import 保留字共同完成：</p><p>  import <module name></p><p>  from <module name> import <function name></p><p>  from <module name> import * （函数重名）</p><p>  import <nodule name> as <module nickname></p></li><li><p>画笔控制函数</p></li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">turtle.penup() </span><br><span class="line">turtle.pu()</span><br><span class="line"><span class="comment"># 提起画笔（不画）</span></span><br><span class="line">turtle.pendown</span><br><span class="line"><span class="comment"># 放下画笔（画）</span></span><br><span class="line">turtle.pensize(width)</span><br><span class="line">turtle.width(width)</span><br><span class="line">turtle.pencolor(color) <span class="comment">#color 为RGB值或者颜色字符串</span></span><br></pre></td></tr></table></figure><ul><li><p>for 和 in 保留字：循环语句</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">5</span>)</span><br><span class="line"><span class="comment"># i = 0,1,2,3,4</span></span><br></pre></td></tr></table></figure></li><li><p>range(N) 产生从0到N-1的整数序列</p><p>  range（M, N）产生从M到N-1的整数序列</p></li></ul><h2 id="2-Practice"><a href="#2-Practice" class="headerlink" title="2.Practice"></a>2.Practice</h2><ul><li><p>n边形的绘制</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># PythonDraw.py</span></span><br><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line">side = <span class="number">40</span></span><br><span class="line">n = <span class="number">8</span></span><br><span class="line">turtle.penup()</span><br><span class="line">turtle.fd(<span class="number">-100</span>)</span><br><span class="line">turtle.pendown()</span><br><span class="line">turtle.pensize(<span class="number">10</span>)</span><br><span class="line">turtle.pencolor(<span class="string">"blue"</span>)</span><br><span class="line">turtle.seth(<span class="number">0</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(n):</span><br><span class="line">    turtle.fd(side)</span><br><span class="line">    turtle.right(<span class="number">360</span>/n)</span><br><span class="line">turtle.done()</span><br></pre></td></tr></table></figure></li><li><p>turtle叠边形绘制</p></li></ul><p><img src="https://s1.ax1x.com/2020/09/16/wcGecn.png" alt=""></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line">side = <span class="number">200</span></span><br><span class="line">n = <span class="number">8</span></span><br><span class="line">turtle.penup()</span><br><span class="line">turtle.goto(<span class="number">-100</span>,<span class="number">-50</span>)</span><br><span class="line">turtle.pendown()</span><br><span class="line">turtle.pensize(<span class="number">10</span>)</span><br><span class="line">turtle.pencolor(<span class="string">"blue"</span>)</span><br><span class="line">turtle.seth(<span class="number">0</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">9</span>):</span><br><span class="line">    turtle.fd(side)</span><br><span class="line">    turtle.left(<span class="number">80</span>)</span><br><span class="line">turtle.done()</span><br></pre></td></tr></table></figure><ul><li>turtle 风轮绘制</li></ul><p><img src="https://s1.ax1x.com/2020/09/16/wcGZ1s.png" alt=""></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#PythonDraw.py</span></span><br><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line">radius = <span class="number">150</span></span><br><span class="line">n = <span class="number">8</span></span><br><span class="line">turtle.penup()</span><br><span class="line">turtle.goto(<span class="number">-100</span>,<span class="number">-50</span>)</span><br><span class="line">turtle.pendown()</span><br><span class="line">turtle.seth(<span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">4</span>):</span><br><span class="line">    turtle.fd(radius)</span><br><span class="line">    turtle.right(<span class="number">90</span>)</span><br><span class="line">    turtle.circle(-radius,<span class="number">45</span>)</span><br><span class="line">    turtle.goto(<span class="number">-100</span>,<span class="number">-50</span>)</span><br><span class="line">    turtle.seth(<span class="number">90</span>*(i+<span class="number">1</span>))</span><br><span class="line"></span><br><span class="line">turtle.done()</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Python语言程序设计笔记 - 1 Python基本语法元素</title>
    <link href="https://onesmallstep.vip/2020/09/15/PythonClass1/"/>
    <id>https://onesmallstep.vip/2020/09/15/PythonClass1/</id>
    <published>2020-09-15T02:15:08.000Z</published>
    <updated>2020-09-15T02:24:52.586Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="1-Python基本语法元素"><a href="#1-Python基本语法元素" class="headerlink" title="1 Python基本语法元素"></a>1 Python基本语法元素</h1><h2 id="1-1-程序设计基本方法"><a href="#1-1-程序设计基本方法" class="headerlink" title="1.1 程序设计基本方法"></a>1.1 程序设计基本方法</h2><p>计算机的概念：</p><ul><li>功能性：对数据的操作，表现为数据计算、输入输出处理和结果储存等</li><li>可编程性：根据一系列指令自动地、可预测地、准确地完成操作者的意图</li></ul><p>计算机的发展：</p><ul><li>摩尔定律，表现为指数方式</li></ul><p>源代码：采用某种编程语言写的计算机程序，人类可读</p><p>目标代码：计算机可直接执行，一般人类不可读</p><p>编译：将源代码一次性转换成目标代码（编译器）</p><p>解释：将源代码逐条转换成目标代码同时逐条运行（解释器）</p><p>静态语言：使用编译执行的编程语言：C/C++语言、Java</p><p>脚本语言：使用解释器执行的编程语言：Python、JS、PHP</p><p>编程基本方法：IPO</p><h2 id="1-2-Python-开发环境配置"><a href="#1-2-Python-开发环境配置" class="headerlink" title="1.2 Python 开发环境配置"></a>1.2 Python 开发环境配置</h2><p>Python 的两种编程方式：交互式和文件式</p><h2 id="1-3-实例1：温度转换"><a href="#1-3-实例1：温度转换" class="headerlink" title="1.3 实例1：温度转换"></a>1.3 实例1：温度转换</h2><p>摄氏度和华氏度：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># TempConvert.py</span></span><br><span class="line">TempStr = input(<span class="string">"请输入带有符号的温度值："</span>)</span><br><span class="line"><span class="keyword">if</span> TempStr[<span class="number">-1</span>] <span class="keyword">in</span> [<span class="string">'F'</span>,<span class="string">'f'</span>]:</span><br><span class="line">C = (eval(TempStr[<span class="number">0</span>:<span class="number">-1</span>]) - <span class="number">32</span>)/<span class="number">1.8</span></span><br><span class="line">print(<span class="string">"转换后的温度是&#123;:.2f&#125;C"</span>.format(C))</span><br><span class="line"><span class="keyword">elif</span> TempStr[<span class="number">-1</span>] <span class="keyword">in</span> [<span class="string">'C'</span>,<span class="string">'c'</span>]:</span><br><span class="line">  F = <span class="number">1.8</span>*eval(TempStr[<span class="number">0</span>:<span class="number">-1</span>])+<span class="number">32</span></span><br><span class="line">  print(<span class="string">"转换后的温度是&#123;:.2f&#125;F"</span>.format(F))</span><br><span class="line"><span class="keyword">else</span>: </span><br><span class="line">  print(<span class="string">"输入格式错误"</span>)</span><br></pre></td></tr></table></figure><h2 id="1-4-Python-程序语法元素分析"><a href="#1-4-Python-程序语法元素分析" class="headerlink" title="1.4 Python 程序语法元素分析"></a>1.4 Python 程序语法元素分析</h2><p>程序格式框架：缩进表达格式框架，缩进是 Python 语法的一部分。要求缩进长度一致。</p><p>注释：用于提高代码可读性的语句，不会被计算机执行</p><p>单行注释和多行注释：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># this is an in line comment</span></span><br><span class="line"></span><br><span class="line"><span class="string">'''</span></span><br><span class="line"><span class="string">this is an multiple lines comment</span></span><br><span class="line"><span class="string">'''</span></span><br></pre></td></tr></table></figure><p>命名与保留字</p><ul><li>变量：用来保存和表示数据的占位符号</li><li>命名规则：大小写字母、数字、下划线和汉字等字符及组合</li><li>注意事项：大小写敏感、首字符不能是数字、不与保留字相同</li><li>保留字：被编程语言内部定义并保留使用的标识符（33个）：红色在本门课中不会涉及</li></ul><p><img src="https://s1.ax1x.com/2020/09/15/wsodZ6.png" alt=""></p><p>数据类型：</p><ul><li>整数：10011101</li><li>浮点数：</li><li>字符串：”10,011,101”，字符的有序序列，正向递增序号和反向递减序号，切片&lt;字符串&gt;[M : N]（M开始但是不到N）</li><li>列表类型：[“10”,”011”,”101”]，用 in 判断一个元素是否在列表中</li></ul><p>赋值语句：由赋值符号构成的一行代码</p><p>分支语句：判断条件决定程序的运行方向</p><p>函数：根据输入产生不同输出的功能过程</p><p>Python的输入和输出：</p><ul><li>input（“提示信息字符串”）</li><li>print（）以字符串形式将数据输出到控制台</li><li>print（）函数的格式化: “{ : . 2f}”.format(C),大括号表示槽，将format中的变量填充到槽中</li><li>eval（）评估函数：将字符串中最外侧的引号去掉，运行余下部分语句的执行结果</li></ul><h2 id="1-Practice"><a href="#1-Practice" class="headerlink" title="1. Practice"></a>1. Practice</h2><ul><li><p>数字形式转换 I：获得用户输入的一个正整数输入，输出该数字对应的中文字符表示。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬<br>0到9对应的中文字符分别是：零一二三四五六七八九</p><p>  <strong>Input:</strong> </p><p>  123</p><p>  9876543210</p><p>  <strong>Output:</strong></p><p>  一二三</p><p>  九八七六五四三二一零</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">numtochar = <span class="string">"零一二三四五六七八九"</span></span><br><span class="line">numstr = input()</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> numstr:</span><br><span class="line">    print(numtochar[eval(i)],end=<span class="string">''</span>)</span><br></pre></td></tr></table></figure></li><li><p>货币转换：程序可以接受人民币或美元输入，转换为美元或人民币输出。人民币采用RMB表示，美元USD表示，符号和数值之间没有空格。</p><p>  <strong>Input:</strong> </p><p>  RMB123</p><p>  USD20</p><p>  <strong>Output:</strong></p><p>  USD18.14</p><p>  RMB135.60</p>  <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">inputstr = input()</span><br><span class="line"><span class="keyword">if</span> inputstr[<span class="number">0</span>] == <span class="string">'R'</span>:</span><br><span class="line">    print(<span class="string">"USD"</span>+<span class="string">"&#123;:.2f&#125;"</span>.format((eval(inputstr[<span class="number">3</span>:])/<span class="number">6.78</span>)))</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    print(<span class="string">"RMB"</span>+<span class="string">"&#123;:.2f&#125;"</span>.format((eval(inputstr[<span class="number">3</span>:])*<span class="number">6.78</span>)))</span><br></pre></td></tr></table></figure></li><li><p>温度转换 II ：请编写程序将用户输入华氏度转换为摄氏度，或将输入的摄氏度转换为华氏度。</p></li></ul><p><strong>Input:</strong> </p><p>示例1：C12.34‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>示例2：F87.65</p><p><strong>Output:</strong></p><p>示例1：F54.21‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬</p><p>示例2：C30.92</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">s = input()</span><br><span class="line"><span class="keyword">if</span> s[<span class="number">0</span>].upper()==<span class="string">"C"</span>:</span><br><span class="line">    print(<span class="string">"F&#123;:.2f&#125;"</span>.format(eval(s[<span class="number">1</span>:])*<span class="number">1.8</span>+<span class="number">32</span>))</span><br><span class="line"><span class="keyword">elif</span> s[<span class="number">0</span>].upper()==<span class="string">"F"</span>:</span><br><span class="line">    print(<span class="string">"C&#123;:.2f&#125;"</span>.format((eval(s[<span class="number">1</span>:])<span class="number">-32</span>)/<span class="number">1.8</span>))</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla</summary>
      
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Python" scheme="https://onesmallstep.vip/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Hexo Commands</title>
    <link href="https://onesmallstep.vip/2020/09/14/Hexo-Commands-Cheat-Sheet/"/>
    <id>https://onesmallstep.vip/2020/09/14/Hexo-Commands-Cheat-Sheet/</id>
    <published>2020-09-13T20:47:08.000Z</published>
    <updated>2020-09-14T15:11:00.047Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h3 id="init（初始化）"><a href="#init（初始化）" class="headerlink" title="init（初始化）"></a>init（初始化）</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo init [folder]</span><br></pre></td></tr></table></figure><p>这条命令会初始化一个 Hexo 博客网站。如果没有设置指定的 <code>[folder]</code> 文件夹路径，则程序会在当前文件夹下创建网站目录。<br>这条命令其实进行了如下操作：</p><ol><li>从Github上<a href="https://github.com/hexojs/hexo" target="_blank" rel="noopener">hexo</a>的仓库中将<a href="https://github.com/hexojs/hexo-theme-landscape" target="_blank" rel="noopener">hexo-theme-starter</a>的内容复制到当前目录下</li><li>使用包管理器安装相应的支持文件：<code>Yam 1</code>，<code>pnpn</code> 或者 <code>npm</code>；如果安装了一种以上的包管理器，则按照列表顺序优先使用靠前的包管理器。</li></ol><h3 id="new（新建页面）"><a href="#new（新建页面）" class="headerlink" title="new（新建页面）"></a>new（新建页面）</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new [layout] &lt;title&gt;</span><br></pre></td></tr></table></figure><p>新建一个文章页面。如果没有设置 <code>layout</code> 布局参数，Hexo 将会使用默认布局。如果文章标题 <code>title</code> 中存在空格，那么需要在标题两边加上双引号。</p><table><thead><tr><th>参数选项</th><th>描述</th></tr></thead><tbody><tr><td><code>-p, --path</code></td><td>自定义文章的存储路径</td></tr><tr><td><code>-r, --replace</code></td><td>如果文章标题已存在，则替换现有文章</td></tr><tr><td><code>-s, --slug</code></td><td>伪静态化，自定义文章的URL链接</td></tr></tbody></table><p>默认情况下，Hexo 会根据文章的标题设置文件的存储路径。对于网页来说，程序会生成一个带有文章名的文件夹，并在其中生成一个 <code>index.html</code> 文件。使用 <code>--path</code> 选项来 覆盖 默认的路径。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new page --path about&#x2F;me &quot;About me&quot;</span><br></pre></td></tr></table></figure><h3 id="generate（生成静态页面文件）"><a href="#generate（生成静态页面文件）" class="headerlink" title="generate（生成静态页面文件）"></a>generate（生成静态页面文件）</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数选项</th><th>描述</th></tr></thead><tbody><tr><td><code>-d, --deploy</code></td><td>生成文件之后直接部署到远端</td></tr><tr><td><code>-w, --watch</code></td><td>查看文件更改记录</td></tr><tr><td><code>-b, --bail</code></td><td>如果在生成文件的过程中有任何无法解决的情况，报错</td></tr><tr><td><code>-f, --force</code></td><td>强制重新生成</td></tr><tr><td><code>-c, --concurrancy</code></td><td>并行生成的最大文件数</td></tr></tbody></table><h3 id="publish（发布草稿）"><a href="#publish（发布草稿）" class="headerlink" title="publish（发布草稿）"></a>publish（发布草稿）</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo publish [layout] &lt;filename&gt;</span><br></pre></td></tr></table></figure><h3 id="server-（启动本地服务器）"><a href="#server-（启动本地服务器）" class="headerlink" title="server （启动本地服务器）"></a>server （启动本地服务器）</h3><p>启动本地服务器。默认情况下，地址是 <code>http://localhost:4000/</code></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数选项</th><th>描述</th></tr></thead><tbody><tr><td><code>-p, --port</code></td><td>自定义端口</td></tr><tr><td><code>-s, --static</code></td><td>只加载静态文件</td></tr><tr><td><code>-l, --log</code></td><td>开启日志。</td></tr></tbody></table><h3 id="deploy-（配置网站）"><a href="#deploy-（配置网站）" class="headerlink" title="deploy （配置网站）"></a>deploy （配置网站）</h3><pre><code>$ hexo deploy</code></pre><table><thead><tr><th>参数选项</th><th>描述</th></tr></thead><tbody><tr><td><code>-g, --generate</code></td><td>配置前先生成文件</td></tr></tbody></table><h3 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h3><ul><li><a href="https://hexo.io/docs/commands.html" target="_blank" rel="noopener">Hexo Commands Doc</a></li></ul>]]></content>
    
    
    <summary type="html">Hexo博客命令行快速查阅</summary>
    
    
    
    <category term="编程" scheme="https://onesmallstep.vip/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
    <category term="Hexo" scheme="https://onesmallstep.vip/tags/Hexo/"/>
    
    <category term="CheatSheets" scheme="https://onesmallstep.vip/tags/CheatSheets/"/>
    
  </entry>
  
  <entry>
    <title>24岁的记录——普鲁斯特问卷</title>
    <link href="https://onesmallstep.vip/2020/01/21/Proust_Questionnaire/"/>
    <id>https://onesmallstep.vip/2020/01/21/Proust_Questionnaire/</id>
    <published>2020-01-21T14:24:35.000Z</published>
    <updated>2020-01-21T14:24:35.000Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p>普鲁斯特问卷（Proust Questionnaire）是一种用来调查被提问者个人生活方式、价值观、人生经验等问题的问卷调查。普鲁斯特问卷其名称来自于《追忆逝水年华》的作者马塞尔·普鲁斯特（Marcel Proust），但普鲁斯特并不是此问卷的发明者，只是因为他曾对问卷给出过著名的答案，此后人们才把其命名为普鲁斯特问卷。<br>——维基百科，普鲁斯特问卷</p></blockquote><p>该问卷是可以直接在维基百科中找到的问卷版本。</p><hr><h2 id="我的答案："><a href="#我的答案：" class="headerlink" title="我的答案："></a><strong>我的答案：</strong></h2><ol><li>你认为最完美的快乐是怎样的？<ul><li>能够与人分享的快乐</li></ul></li><li>你最希望拥有哪种才华？<ul><li>自我表达的能力</li></ul></li><li>你最恐惧的是什么？<ul><li>事物的死亡和消逝</li></ul></li><li>你目前的心境怎样？<ul><li>既来之，则安之，把能做的事情做到最好。</li></ul></li><li>还在世的人中你最钦佩的是谁？<ul><li>没有最，但是钦佩的人有很多</li></ul></li><li>你认为自己最伟大的成就是什么？<ul><li>直到现在仍然对未来(<del>充满</del>)拥有信心</li></ul></li><li>你自己的哪个特点让你最觉得痛恨？<ul><li>内向</li></ul></li><li>你最喜欢的旅行是哪一次？<ul><li>高二暑假和大家在内蒙古看英仙座流星雨。</li></ul></li><li>你最痛恨别人的什么特点？<ul><li>对做出的承诺不负责任</li></ul></li><li>你最珍惜的财产是什么？<ul><li>思想的自由</li></ul></li><li>你觉得最奢侈的是什么？<ul><li>有限人生里的时间</li></ul></li><li>你认为程度最浅的痛苦是什么？<ul><li>失败的痛苦</li></ul></li><li>你认为哪种美德是被过高的评估的？<ul><li>自律，如果大家把它看成一种美德或者优秀品质的话</li></ul></li><li>你最喜欢的职业是什么？<ul><li>摄影师（在不考虑收入的情况下）</li></ul></li><li>你对自己的外表哪一点不满意？<ul><li>没有</li></ul></li><li>你最后悔的事情是什么？<ul><li>不够珍惜时间</li></ul></li><li>还在世的人中你最鄙视的是谁？<ul><li>没有</li></ul></li><li>你最喜欢男性（女性）身上的什么特质？<ul><li>独立，自主，善待他人</li></ul></li><li>你使用过的最多的单词或者是词语是什么？<ul><li>也许，可能（这一类）</li></ul></li><li>你最喜欢女性（男性）身上的什么特质？<ul><li>独立，自主，善待他人</li></ul></li><li>你最伤痛的事是什么？<ul><li>2017.03.24</li></ul></li><li>你最看重朋友的什么特点？<ul><li>能够互相给予理解和支持</li></ul></li><li>你这一生中最爱的人或东西是什么？<ul><li>平凡但不平庸的梦想</li></ul></li><li>你希望以什么样的方式死去？<ul><li>默默地离开，不带给他人悲伤</li></ul></li><li>何时何地让你感觉到最快乐？<ul><li>和好朋友一起的的任何地点的任何时间</li></ul></li><li>如果你可以改变你的家庭一件事，那会是什么？<ul><li>爸爸戒烟，妈妈身体健康</li></ul></li><li>如果你能选择的话，你希望让什么重现？<ul><li>那些遭遇不幸的人能够复生</li></ul></li><li>你的座右铭是什么？<ul><li>没有</li></ul></li></ol><hr><h2 id="附：普鲁斯特的答案："><a href="#附：普鲁斯特的答案：" class="headerlink" title="附：普鲁斯特的答案："></a><strong>附：普鲁斯特的答案：</strong></h2><h3 id="【13岁的回答】"><a href="#【13岁的回答】" class="headerlink" title="【13岁的回答】"></a>【13岁的回答】</h3><ol><li>你认为程度最浅的痛苦是什么?<ul><li>A：和妈妈分开。</li></ul></li><li>你喜欢在哪儿生活？<ul><li>A：我的理想国。</li></ul></li><li>你认为现实中的幸福是怎样的？<ul><li>A：活在那些我爱的事物当中，包括美丽的大自然，大量的书籍和音乐，不远处有一家法国歌剧院。</li></ul></li><li>哪一种错误你觉得是最可以被纵容的？<ul><li>A：失去工作的才能。</li></ul></li><li>虚构人物中你认为谁是英雄？<ul><li>A：那些浪漫而有诗意的，对思想的表达远胜过对现实的虚构的。</li></ul></li><li>你最欣赏的历史人物？<ul><li>A：苏格拉底、伯里克利、穆罕默德、小普林尼和奥古斯汀的混合体。</li></ul></li><li>现实中最欣赏的女性是谁？<ul><li>A：有天分却过着平凡生活的女人。</li></ul></li><li>你欣赏的小说中的女英雄是谁？<ul><li>A：那些非常有女性气质，非常柔弱、纯洁，任何一面都非常美的女子。</li></ul></li><li>你最欣赏的男性气质？<ul><li>A：智慧，有道德。</li></ul></li><li>你最欣赏的女性气质？<ul><li>A：温柔，自然，聪明。</li></ul></li><li>你最希望拥有的？<ul><li>A：阅读、做梦和写诗。</li></ul></li><li>你最希望成为谁那样的人？</li><li><ul><li>A：如果这问题没有的话，我宁愿不回答。非要说的话，我希望是小普林尼。</li></ul></li></ol><h3 id="【20岁时的回答】"><a href="#【20岁时的回答】" class="headerlink" title="【20岁时的回答】"></a>【20岁时的回答】</h3><ol><li>你最显著的特质是什么？<ul><li>A：渴望被爱，或者说，希望被关怀、被溺爱胜过被钦佩和赞赏。</li></ul></li><li>你最喜欢男性身上的什么品质？<ul><li>A：有着男性的美德，在友谊中率直、真诚。</li></ul></li><li>你最喜欢女性身上的什么品质？<ul><li>A：温柔的、女性的迷人气质，阴柔的吸引力。</li></ul></li><li>你最看重朋友拥有什么样的品质？<ul><li>A：敏感，倘若他们对我具有某种身体上的吸引力，那他们的敏感就是我需要的。</li></ul></li><li>你天性中的缺点是什么？<ul><li>A：缺乏理解能力，意志力不强。</li></ul></li><li>你认为完美的快乐是什么样子的？<ul><li>A：没有，恐怕那是一种很崇高的东西，我还没有勇气来说它到底是什么样子的。假使敢于表达，恐怕在说出来的那一刻，已经破坏了它。</li></ul></li><li>你最伤痛的是什么？<ul><li>A：从不曾见过我的母亲与我的祖母。</li></ul></li><li>你最想成为什么？<ul><li>A：我自己，就如那些我赞赏的人希望我成为的那种人。</li></ul></li><li>你最想在哪个国家生活？<ul><li>A：一个能让我对某些事确定不疑的国家，在那里，敏感温柔的思绪总是可以得到回应。</li></ul></li><li>你最喜欢的小说中的男主角是什么？<ul><li>A：哈姆雷特。</li></ul></li><li>什么是你最不喜欢的？<ul><li>A：我自己的，最糟糕的品质。</li></ul></li><li>你最希望具有怎样的天赋？<ul><li>A：意志力强与难以抗拒的吸引力。</li></ul></li><li>你感觉最被纵容的错误是什么？<ul><li>A：那些我可以理解的错误。</li></ul></li><li>什么是你的座右铭？<ul><li>A：我宁愿不说，担心那会带给我坏运气。</li></ul></li></ol><p>Top Image Credit: <a style="background-color:black;color:white;text-decoration:none;padding:4px 6px;font-family:-apple-system, BlinkMacSystemFont, &quot;San Francisco&quot;, &quot;Helvetica Neue&quot;, Helvetica, Ubuntu, Roboto, Noto, &quot;Segoe UI&quot;, Arial, sans-serif;font-size:12px;font-weight:bold;line-height:1.2;display:inline-block;border-radius:3px" href="https://unsplash.com/@aaronburden?utm_medium=referral&amp;utm_campaign=photographer-credit&amp;utm_content=creditBadge" target="_blank" rel="noopener noreferrer" title="Download free do whatever you want high-resolution photos from Aaron Burden"><span style="display:inline-block;padding:2px 3px"><svg xmlns="http://www.w3.org/2000/svg" style="height:12px;width:auto;position:relative;vertical-align:middle;top:-2px;fill:white" viewBox="0 0 32 32"><title>unsplash-logo</title><path d="M10 9V0h12v9H10zm12 5h10v18H0V14h10v9h12v-9z"></path></svg></span><span style="display:inline-block;padding:2px 3px">Aaron Burden</span></a></p>]]></content>
    
    
    <summary type="html">普鲁斯特问卷（Proust Questionnaire）是一种用来调查被提问者个人生活方式、价值观、人生经验等问题的问卷调查。</summary>
    
    
    
    
    <category term="人生" scheme="https://onesmallstep.vip/tags/%E4%BA%BA%E7%94%9F/"/>
    
  </entry>
  
  <entry>
    <title>重要的是跑下去——读《当我谈跑步时我谈些什么》</title>
    <link href="https://onesmallstep.vip/2020/01/20/The_Marathon_of_Life/"/>
    <id>https://onesmallstep.vip/2020/01/20/The_Marathon_of_Life/</id>
    <published>2020-01-20T14:22:47.000Z</published>
    <updated>2020-01-20T14:22:47.000Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>&emsp; 说起村上春树这个名字，你会想到什么？一位畅销的小说家，或是多年的诺奖陪跑者。如果你恰好读过他的一些书，也许你会知道他是一个酷爱跑步的人。作为一个刚刚入门的村上迷，在阅读《当我谈跑步时我谈些什么》这本书之前，我对村上的了解也仅仅是这样。直到我读了这本书的第一篇，我才发现，原来这个在过去的40年间出版了14本长篇小说、18本随笔散文集、7本翻译作品以及一些短篇小说和游记，仍然能够坚持每天10公里的长跑距离，以及每年参加一次全程马拉松跑的习惯。<br>&emsp; 《当我谈跑步时我谈些什么》的出版时间为2007年，当时已经58岁的村上或许还在坚持着每年还要参加一次对于年轻人来说都十分艰难的全程马拉松。在阅读这本书的时候，我一直带着这样的疑问：村上在跑步的时候究竟是怎样的一种心态？<br>&emsp; 读完这本书后，我发现村上的“慢跑精神”并不是什么新奇的玩意儿，不过是我们常听到的“忍受痛苦，执拗地坚持下去”。其实，看到这样的结果，我倒不觉得惊讶，因为可以想见：如果不是足够的坚毅，一个人时如何能够顶着剩下的烈日，奔跑在四十多公里的马拉松赛道上的呢？<br>&emsp; 作为一个偶尔也会跑步的人，我惊喜地发现自己平时的一些想法居然与书里的观点不谋而合。因此在这篇文章里，我也希望能够谈谈自己对跑步和人生的一点点理解。</p><hr><h2 id="关于跑步这件事"><a href="#关于跑步这件事" class="headerlink" title="关于跑步这件事"></a>关于跑步这件事</h2><h3 id="为什么要跑步"><a href="#为什么要跑步" class="headerlink" title="为什么要跑步"></a>为什么要跑步</h3><p>&emsp; 村上春树从29岁才开始写小说，33岁开始跑步，算是大器晚成。他的跑步动机是这样的：“打算作为小说家度过今后漫长的人生，就必须找到一个既能维持体力，又可将体重保持得恰到好处的方法。”我刚刚开始跑步时的动机其实没有这么复杂，只是为了减肥。我大概从大一开始跑步，后来真的瘦了下来，到了差不多可以不用为体型而担心的体重之后，我反倒没有停止跑步。虽然不再像之前跑得那么频繁了，但也还是每周都会跑。再到后来，我意识到跑步是一种廉价、简单，却可以获得很多快乐的运动方式。我发现跑步可以是一种减压和放空自己的生活方式，于是就又开始努力把跑步培养成自己的日常习惯了。<br>&emsp; 其实，在我这二十几年的短暂人生中，我做过很多的选择，也尝试过很多的事情，比如读书、学乐器、练书法，跑步也只是其中的一个。但在这么多的尝试中，为数不多能够坚持下来成为习惯的，可能暂时只有跑步和读书这两件事了。为什么是跑步，因为他很简单，不需要什么装备，也不需要你投入任何的情绪，更是在什么心境下都可以进行的，只要你有一双合脚的鞋子（甚至不用是专业的跑鞋）和一条可以奔跑的跑道，就可以在上面获得快乐。<br>&emsp; 当然，我并不觉得所有人都应该喜欢跑步，而且显然也不是所有的人都适合跑步，比如说膝盖不太好的人就不适合跑步。而且世界上这么多人，抱着“我在家里休息多好，跑步多累啊！”或者“盛夏的马路简直就像人间炼狱一样，我去游泳多好啊”的想法生活的人，也肯定不在少数。任何事物都有它们合适的人，也必然会有不适合的人。学校里规定的晨练我们当然不可避免，但至少生活中的事情我们应该是可以自由选择的。</p><blockquote><p>然而每个人都有对路与不对路之事。既有人适合马拉松，也有人适合高尔夫，还有人适合赌博。看见学校上体育课时，让全体学生都练长跑的光景，我便深感同情：“好可怜啊。”那些丝毫不想跑步的人，抑或体质不适合跑步的人，不分青红皂白让他们统统去跑长跑，这是何等无意义的拷问。我很想发出忠告：趁着还没有出现问题，赶快取消让初中生和高中生一律跑长跑的做法。当然，我这样的人出面说这种话，肯定无人理会。学校就是这样一种地方：在学校里，我们学到的最重要的东西，就是“最重要的东西在学校里学不到”这一真理。</p></blockquote><h3 id="跑步的快乐"><a href="#跑步的快乐" class="headerlink" title="跑步的快乐"></a>跑步的快乐</h3><p>&emsp; 其实我最开始跑步的时候，并没有把跑步当作一件享受的事情，只是觉得这是一个不得不完成任务，咬着牙，努力让自己拼命抗议着的双腿不要停下来。在跑步的时候我常常想的事情，多半是“啊，今天我已经跑了xxx米了，流了好多汗啊，怎么还有这么多路啊，我是不是可以休息下了？”，“我在跑步机上跑了多久了，感觉又跑了2分钟了……原来才过了30秒”，或者是在内心从小到大默数着数字，好让自己忘记掉小腿的肌肉已经有点酸痛了这件事。<br>&emsp; 直到有一天，我第一次体会到去户外跑步的快乐。当时正是下午快日落的时候，太阳悬停在不高的天空中。头顶的天空还是碧蓝如洗，而接近地表处的云朵却已经烧得火红，身旁飞驰而过的车窗里无不反射出金色的光芒，光芒化作无数金色的游丝，在树影、人影与车影之间流动。我戴上耳机，让乡村歌曲里吉他弹奏出的琶音缓缓地流入我的耳朵。<br>&emsp; 我迈开了步伐，并不是那种百米冲刺的速度，只是找到一个比平时跑步机的速度稍慢一些的节奏，慢慢地跑了起来。当时的气温约是20摄氏度左右，穿着一件短袖刚刚好，迎面吹来的风并不会让我觉得冷，还正好抵消了阳光带来的暑气。慢慢跑了一公里的距离，好像并不是很累，想想应该是平时锻炼的成果。<br>&emsp; 与跑步机上的奔跑不同，室外跑步最大的乐趣，就是你可以沉浸在一个周围的环境中，然后忘掉痛苦的跑步这件事本身。比如你会看到周围的事物随着时间的推移，一点一点被刷上金黄的颜色；比如你会看到电线杆上整整齐齐地停满了不知道是什么名字的小鸟；比如你还会幸运地看到路边牧场里的牛竟然会跟着你一起跑了起来。不止这些，跑步时，你会看到很多与你一样的人——戴着耳机，挥汗如雨地奔跑在路上。有时可能是在和我一样还在念书的学生，有时也可能是一把年纪了却还精神抖擞的爷爷。“在这空空的人行道上，能够遇到一个和自己一样也在跑步的人，还真是不容易啊，”我这么想着，然后微笑向他们示意，他们也会用微笑回复我。<br>&emsp; 不知不觉间，我已经绕着整个街区，跑了一大圈。一看手表，已经跑了40分钟了——我很高兴，毕竟自己平时在跑步机上跑十五分钟都会觉得枯燥。此时天色还亮，已无日影，金色的暮晚沉醉在公寓前的广场上，我的身心感受到了一种十分独特的舒畅。<br>&emsp; 跑步对于我来说，究竟带来了怎样的快乐？或许就是身体并没有一天天变糟的成就感，以及那些能够放空自己于学习之外，用于感受生活的时间吧。</p><blockquote><p>马拉松赛跑，只有享受它才有意义。如若不是一种享受，何以有好几万人来跑这四十二公里的赛程呢?</p></blockquote><hr><h2 id="关于坚持这件事"><a href="#关于坚持这件事" class="headerlink" title="关于坚持这件事"></a>关于坚持这件事</h2><p>&emsp; 其实，我觉得把工作和学习比作跑步，是在合适不过的了。有的工作像是百米冲刺，是需要你在短时间内付出非常大量的努力以及比平时高很多的专注度完成的；而有的工作则更像是几公里的长跑，你需要保持节奏，不紧不慢、按部就班地跑到终点。当然，我们常有的做法是：先慢慢悠悠地走上一段路，等到发现自己似乎已经来不及在截止时间前到达终点，再用百米冲刺的速度，向着终点飞奔。运气好的话，我们也许还能赶上；运气不好的话，就只能接受失败的教训。<br>&emsp; 在长跑中，找到一个合适的配速是特别重要的。所谓配速，就是跑者根据对自己能力的了解，给自己预设的一个跑步的平均速度。在跑步的过程中，跑者需要常常注意自己的速度，如果快过了配速，就可能会在跑了一半的时候气喘吁吁、体力不支；如果自己的速度还没有达到配速，那就说明今天还不够努力了。我觉得，这样的一种规划方式，也是可以借鉴到我们的生活中来的，每天给自己规定一定的工作量，一旦完成了，就可以用剩余的时间来休息或者是专注于其它的事情。这样劳逸结合，不仅能够让自己的身心不至于疲惫，也可以把工作完成得恰到好处。<br>&emsp; 比如我自己曾经就总是给自己制定一整天周密详尽的学习计划（只用来学习），但事实上我发现自己其实并不能一直专注在一件事情上。我以为自己能够连续学习一整天，但最后真正能够高效学习的时间，可能只有五六个小时，其它的时间不是用来刷手机开小差，就是盯着书本神游，实际上的学习效率是很低的。后来，我发现如果我能够让自己在不想做题的时候就停笔去跑步或者阅读或者去做其他的事情，在该睡觉的时候就睡觉保证休息。这样的学习效率反而比我一天到晚坐在桌前，却有半天的时间用来发呆，晚上熬夜导致第二天没有精神的效率高很多，而且因为我得到了足够的放松，心情也自然而然地好了很多。<br>&emsp; 适当地降低对自己每时每刻的预期，而让自己能够轻松地坚持下去，会比硬给自己设定一个似乎不容易达到的目标，想试着以此勉励自己，却最终在痛苦和迷茫之中半途而废，所收获到的东西多很多。我们当然无法要求自己一直以百米冲刺的速度飞奔在跑道上，也很难逼着自己起早贪黑地、自始至终地集中精力，完成一个工作，特别是有些复杂的长期工作。我们能做的，往往就是在每一个单位的时间段里，给自己设定一个似乎能够完成的小目标，靠着不断地坚持、重复和肌肉记忆，最终实现我们预想中的目标。即使最后我们真的未能如愿，在这样的坚持中，我们已经竭尽了我们的能力，我想我们也一定会有所收获且不留遗憾的。</p><blockquote><p>持之以恒，不乱节奏，对于长期作业实在至为重要。一旦节奏得以设定，其余的问题便可以迎刃而解。然而要让惯性的轮子以一定的速度准确无误地旋转起来，对待持之以恒，何等小心翼翼亦不为过。</p></blockquote><hr><h2 id="关于人生的一点建议"><a href="#关于人生的一点建议" class="headerlink" title="关于人生的一点建议"></a>关于人生的一点建议</h2><p>原文摘录：</p><blockquote><p>萨默赛特·毛姆写道：“任何一把剃刀都自有其哲学。”大约是说．无论何等微不足道的举动．只要日日坚持．从中总会产生出某些类似观念的东西来。</p></blockquote><blockquote><p>我现在认识到：生存的质量并非成绩、数字、名次之类固定的东西，而是含于行为之中的流动性的东西。</p></blockquote><blockquote><p>成绩也好，名次也好，外观也好，别人如何评论也好，都不过次要的问题。对于我这样的跑者，第一重要的是用双脚实实在在地跑过一个个终点，让自己无怨无悔：应当尽的力我都尽了，应当忍耐的我都忍耐了。从那些失败和喜悦之中，具体地——如何琐细都没关系——不断汲取教训。并且投入时间投入年月，逐一地累积这样的比赛，最终到达一个自己完全接受的境界，亦或无限相近的所在。</p></blockquote><hr><p>Top Image Credit：<a style="background-color:black;color:white;text-decoration:none;padding:4px 6px;font-family:-apple-system, BlinkMacSystemFont, &quot;San Francisco&quot;, &quot;Helvetica Neue&quot;, Helvetica, Ubuntu, Roboto, Noto, &quot;Segoe UI&quot;, Arial, sans-serif;font-size:12px;font-weight:bold;line-height:1.2;display:inline-block;border-radius:3px" href="https://unsplash.com/@bruno_nascimento?utm_medium=referral&amp;utm_campaign=photographer-credit&amp;utm_content=creditBadge" target="_blank" rel="noopener noreferrer" title="Download free do whatever you want high-resolution photos from Bruno Nascimento"><span style="display:inline-block;padding:2px 3px"><svg xmlns="http://www.w3.org/2000/svg" style="height:12px;width:auto;position:relative;vertical-align:middle;top:-2px;fill:white" viewBox="0 0 32 32"><title>unsplash-logo</title><path d="M10 9V0h12v9H10zm12 5h10v18H0V14h10v9h12v-9z"></path></svg></span><span style="display:inline-block;padding:2px 3px">Bruno Nascimento</span></a></p>]]></content>
    
    
    <summary type="html">走一步,再走一步</summary>
    
    
    
    <category term="读书笔记" scheme="https://onesmallstep.vip/categories/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="人生" scheme="https://onesmallstep.vip/tags/%E4%BA%BA%E7%94%9F/"/>
    
    <category term="成长" scheme="https://onesmallstep.vip/tags/%E6%88%90%E9%95%BF/"/>
    
  </entry>
  
  <entry>
    <title>2019，以及新年愿望</title>
    <link href="https://onesmallstep.vip/2020/01/01/New_Year_Resolution_2020/"/>
    <id>https://onesmallstep.vip/2020/01/01/New_Year_Resolution_2020/</id>
    <published>2020-01-01T05:02:43.000Z</published>
    <updated>2020-01-01T05:02:43.000Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="2019"><a href="#2019" class="headerlink" title="2019"></a>2019</h2><p>&emsp;我的2019，总算是顺利得过完了。2019的新年，还沉浸在毕业设计刚刚开题时的激动之中，幻想着自己有着大把的时间，可以让自己的设计是如何得不同凡响。但是，在自己的怠慢和困难的阻挠下，最终还是没有逃过混着摸过答辩的命运。<br><br>&emsp;春季之后，申请也慢慢出了结果，被几个本以为能去的大学拒了。自己有点沉浸在或许会失学的迷惘中，一面等待着其它学校的邮件，一面做着毕业设计。好在最后总算是被几个学校要了，虽然不是自己喜欢的，但也不至于讨厌。反正，有书读了，就无所谓吧。在出国前，还特意去学了驾考，虽然可惜最后没能通过科目三就要出国了。<br><br>&emsp;暑假的时候和同学去了西北川渝，和爸妈去了美西的国家公园、一号公路，看到了山河湖海、星河沙山，看到了心心念念的小熊猫，尝到了炮仗面、大盘鸡、四川火锅、in n out以及路边的汉堡和炸鸡。现在想起那段和同学们一坐下就不得不打牌喝酒的日子，还真有点令人怀念。其实我是一个不喜欢喝酒的人，我也大概永远都体会不到酒能带给我的快乐，但是喝酒的时候，我的快乐从来都不是来自酒的吧。<br><br>&emsp;2019秋季的这一学期，也没有想象中的容易，期中之后还徘徊在要不要退课保分的纠结中，好在有下半学期的努力，最后的结果倒还可以。<br><br>&emsp;现在回想起来，自己有很多事不愿意去做，是心里一直在逃避。只要自己不下定决心开始认真，即使失败了也可以说：“我这次没有好好尽力，下次努力了，谁知道结果会怎么样呢？反正失败就失败了，失败了又有什么所谓呢？”总感觉自己有点迷失在这样“佛系”的心态中，变得越来越不“勇敢”。很多时候，还是要“不如试一试吧”。<br><br>&emsp;2019年里有些意外地交换了很多的明信片，收到了很多的祝福，也体会到了生活中不同的苦涩与快乐，算是一件值得开心的事情吧，2020也要继续下去。</p><hr><ul><li>2019 喜欢的书：<br><ul><li><a href="https://book.douban.com/subject/1082406/"><strong>《黄金时代》 王小波</strong></a>： 李银河这样评价王小波,说他就像是《皇帝的新装》里的那个孩子，真是一点都没有错。王小波可爱，大胆，爱说真话。读这本《黄金时代》时，感觉就像是听一个三四十岁的孩子再给你讲述那个革命年代的他的生活。</li><li><a href="https://book.douban.com/subject/1027191/"><strong>《历史深处的忧虑: 近距离看美国之一》 林达</strong></a>：美国的开国先贤们曾经对于自由和民主的思考，似乎不像是一种政治思考，倒更像是对于人类真正幸福的哲学思考。</li><li><a href="https://book.douban.com/subject/2035179/"><strong>《动物农场》 乔治·奥威尔</strong></a>：一个社会如果不会思考，那么改革不过是废除一个独裁者之后再推举一个新的独裁者罢了。</li><li><a href="https://book.douban.com/subject/25662922/"><strong>《维罗妮卡决定去死》 保罗·柯艾略</strong></a>:追求爱，自由和冒险才是人生的意义，如果只能在规则与禁忌的温床里安逸地活着，那倒不如选择死亡。</li><li><a href="https://book.douban.com/subject/4169424/"><strong>《蛙》 莫言</strong></a>：很佩服莫言，能够把这段血泪交融的敏感历史，写成这样一部富有神话色彩和传奇色彩的小说。感觉经历过那个时代的每一个人，不论是姑姑还是蝌蚪，都会在内心深处留下巨大的阴影，为他们亲手杀死的一个又一个生命不停地忏悔。这大概是那个时代在人们心里留下的烙印。也看到了莫言在小说里歌颂了母性的伟大。</li><li><a href="https://book.douban.com/subject/1015452/"><strong>《国境以南 太阳以西》 村上春树</strong></a>：“不存在中间性的东西的地方也不存在中间。国境以南或许有大概存在，而太阳以西则不存在大概。”人生不存在如果和大概，有的事情一旦开始了就再也无法回头。最终剩下的只有孤独和错过。</li><li><a href="https://book.douban.com/subject/3168460/"><strong>《1973年的弹子球》 村上春树</strong></a>：村上笔下的20多岁是个怎样的年纪？ 独自一人生活，常常望着窗外的天空发呆，做着虚无缥缈的梦……一瓶接一瓶地喝着啤酒，一根接一根地吸着烟，一页接着一页翻小说，耳边传来点唱机里的爵士乐，用口哨吹着自己喜欢的歌，和坐在身边的陌生人谈天说地……不停地恋爱，和不知道从哪出现、不明年龄，甚至连名字也弄不清楚的女孩睡在一起……没有什么擅长的技能，做一些简单的工作，最能让自己引以为豪的还是一个没人能够打破的弹子球分数。 田纳西·威廉姆斯这样写道：过去与现在已一目了然，而未来则是“或许”。 有时似乎觉得自己能理解村上了，有时又不能。</li></ul></li><li>2019 喜欢的电影：<br><ul><li><a href="https://movie.douban.com/subject/1302425/"><strong>喜剧之王 /  King of Comedy 周星驰 (1999)</strong></a>：小人物的快乐，才是真正的悲伤吧。</li><li><a href="https://movie.douban.com/subject/30390144/"><strong>别告诉她 / The Farewell 王子逸 (2019)</strong></a>: 很真实的一部电影，作为一个留学生感觉回家吃饭被家人亲戚提问的场景简直一模一样。虽然有一些地方稍显刻意，但是整体影片还是很好看的。</li><li><a href="https://movie.douban.com/subject/30170448/"><strong>何以为家 / كفرناحوم 娜丁·拉巴基 (2018)</strong></a>: 看的时候莫名想到了是枝裕和的《无人知晓》。有的时候，给予生命才是世间最大的恶。</li><li><a href="https://movie.douban.com/subject/26793852/"><strong>信笺故事 / The Tale (2018)</strong></a>: 极度压抑的一部电影，令人叹息的故事，让人忍不住想起了林奕含和房思琪。有的人只是觉得没有性教育才能让污秽肮脏的东西永远远离自己的孩子，却没有意识到性教育对孩子自我保护意识的建立又有多么重要。</li><li><a href="https://movie.douban.com/subject/1292224/"><strong>飞越疯人院 / One Flew Over the Cuckoo’s Nest 米洛斯·福尔曼 (1975)</strong></a>:我们的社会是不是一个巨大的疯人院？</li><li>以及，是枝裕和导演的所有作品，你会被治愈的：<strong><a href="https://movie.douban.com/subject/1292337/">无人知晓 (2004)</a>、<a href="https://movie.douban.com/subject/2222996/">步履不停 (2008)</a>、<a href="https://movie.douban.com/subject/4832288/">奇迹 (2011)</a>、<a href="https://movie.douban.com/subject/10571509/">如父如子 (2013)</a>、<a href="https://movie.douban.com/subject/25895901/">海街日记 (2015)</a>、<a href="https://movie.douban.com/subject/26694988/">比海更深 (2016)</a>、<a href="https://movie.douban.com/subject/27622447/">小偷家族 (2018)</a></strong></li></ul></li><li>2019喜欢的电视剧：<br><ul><li><a href="https://movie.douban.com/subject/30122641/"><strong>难以置信 Unbelievable (2019)</strong></a>: 剧里最后导演还是给了一个暖心的结局，看到法官宣判的时候真的是很感动。看完想想现实生活中或许不会有那么多像剧中那么认真工作的警探，或许成千上万的犯罪，到最后只能石沉大海，令人惋惜。感觉社会还是需要对性侵案件、女性权益给予更多的关注吧。</li><li><a href="https://movie.douban.com/subject/30424374/"><strong>爱，死亡和机器人 第一季 Love, Death &amp; Robots Season 1 (2019)</strong></a>: 这CG，这脑洞，网飞还是厉害。</li><li><a href="https://movie.douban.com/subject/33444115/"><strong>我们这一天 第四季 This Is Us Season 4 (2019)</strong></a>: 从第一季第一集开始，每一集都喜欢的剧。</li></ul></li></ul><hr><h2 id="新年愿望"><a href="#新年愿望" class="headerlink" title="新年愿望"></a>新年愿望</h2><ol><li>搭建一个自己的博客，坚持写（或许每月一篇） </li><li>每周跑步10km</li><li>自学日语（2019年断断续续背了一些单词了，希望2020过完可以能到N3或者N2的水平）</li><li>至少读24本书，完成阅读任务</li><li>至少看50部电影</li><li>自学pr，剪出一个自己满意的vlog（我看悬）</li><li>保证每天的8h睡眠考试周及前一周除外</li><li>去一个想去的地方旅行（我看悬）</li><li>有空的时候练练字（不强求）</li></ol><h3 id="2020的阅读任务"><a href="#2020的阅读任务" class="headerlink" title="2020的阅读任务"></a>2020的阅读任务</h3><ol><li>至少读5本非虚构类的书</li><li>每个月读一个从来没有读过的作家的作品</li><li>至少读2本英文原版书</li><li>至少读一本往年诺奖得主的作品</li></ol><hr><h2 id="附："><a href="#附：" class="headerlink" title="附："></a>附：</h2><p>2019读书列表-36 (<del>划线图书</del>为两星及以下，✭为四星及以上)：<br>✔ 风中的纸屑 周国平 (Wed, Jan 2, 2019)<br>✔ 国境以南 太阳以西   村上春树 (Fri, Jan 4, 2019) ✭<br>✔ 自卑与超越 A·阿德勒 (Sun, Jan 6, 2019)✭<br>✔ 观念的水位 刘瑜 (Thu, Jan 10, 2019)✭<br>✔ 孩子你慢慢来 龙应台 (Sat, Jan 12, 2019)<br>✔ 月光落在左手上 余秀华 (Tue, Jan 22, 2019)✭<br>✔ 幽灵代笔 大卫·米切尔 (Thu, Jan 24, 2019)<br>✔ 伍尔夫读书心得 弗吉尼亚·伍尔夫 (Sun, Jan 27, 2019)<br>✔ 人类简史 (Wed, Jan 30, 2019)<br>✔ 流星旅行车 重松清 (Fri, Feb 1, 2019)<br>✔ 顾城的诗 顾城的画 顾城 (Sat, Feb 2, 2019)<br>✔ 毛姆读书随笔 毛姆 (Sun, Feb 3, 2019)<br>✔ 我的职业是小说家 村上春树 (Tue, Feb 12, 2019)✭<br>✔ 蛙 莫言 (Mon, Feb 25, 2019) ✭<br>✔ 我们爱过又忘记 余秀华 (Wed, Feb 27, 2019)<br>✔ 活着 余华 (Sat, Mar 2, 2019) ✭<br>✔ 人间词话 王国维 (Wed, Mar 13, 2019)<br>✔ 围城 钱钟书 (Mon, Mar 18, 2019) ✭<br>✔ 蝇王 戈尔丁 (Sun, Mar 24, 2019)<br>✔ 全球通史 斯塔夫里阿诺斯 (Fri, Mar 29, 2019)<br>✔ 朝花夕拾 鲁迅 (Sun, Mar 31, 2019)✭<br>✔ 内在的从容 周国平 (Mon, Apr 1, 2019)<br>✔ 狂人日记 鲁迅 (Mon, Apr 1, 2019)✭<br>✔ 1973年的弹子球 村上春树 (Tue, Apr 2, 2019)✭<br>✔ 夜半蜘蛛猴 村上春树 (Thu, Apr 4, 2019)<br>✔ 维罗妮卡决定去死 保罗·柯艾略 (Sat, Apr 13, 2019)✭<br>✔ 历史深处的忧虑:近距离看美国 1 (Tue, Aug 13, 2019) ✭<br>✔ 故事新编 鲁迅 (Sat, Aug 31, 2019)<br>✔ 黄金时代 王小波 (Fri, Oct 4, 2019)✭<br>✔ 如何阅读一本书 (Sat, Dec 14, 2019)✭<br>✔ 我的孤独是一座花园 阿多尼斯 (Thu, Dec 26, 2019)✭<br>✔ 远山淡影 石黑一雄 (Sat, Dec 28, 2019)<br>✔ 82年生的金智英 (Sun, Dec 29, 2019)<br>✔ 五味 汪曾祺✭<br>✔ 动物农场 乔治·奥威尔✭<br>✔ 世界尽头与冷酷仙境 村上春树✭</p><p>2019观影列表-62 (<del>划线电影</del>为两星及以下，✭为四星及以上)：<br>✔ 天堂电影院 朱塞佩·托纳多雷(Tue, Jan 1, 2019) ✭<br>✔ 四个春天 陆庆屹 (Sat, Jan 5, 2019) ✭<br>✔ 入殓师 泷田洋二郎(Sun, Jan 6, 2019)<br>✔ 控方证人 比利·怀德 (Tue, Jan 8, 2019)✭<br>✔ 比海更深 是枝裕和 (Fri, Jan 11, 2019)✭<br>✔ 如父如子 是枝裕和 (Sat, Jan 12, 2019)✭<br>✔ 步履不停 是枝裕和 (Sun, Jan 13, 2019)✭<br>✔ 无人知晓 是枝裕和 (Tue, Jan 15, 2019)✭<br>✔ 奇迹 是枝裕和 (Fri, Jan 18, 2019)✭<br>✔ 阿甘正传 (Tue, Jan 22, 2019)<br>✔ 一个小忙 (Mon, Jan 28, 2019)✭<br>✔ 爱在黎明破晓前 理查德·林克莱特 (Tue, Jan 29, 2019)✭<br>✔ 摇摇晃晃的人间 范俭 (Wed, Jan 30, 2019)✭<br>✔ 小花的味增汤 (Sat, Feb 2, 2019)<br>✔ 爱在午夜降临前 理查德·林克莱特 (Sun, Feb 3, 2019) ✭<br>✔ 爱在日落黄昏时 理查德·林克莱特 (Sat, Feb 2, 2019)<br>✔ 寻梦环游记 (Wed, Feb 6, 2019)✭<br>✔ 流浪地球 郭帆 (Thu, Feb 7, 2019)✭<br>✔ 比利·林恩的中场战事 李安 (Sat, Feb 9, 2019)<br>✔ 龙猫 宫崎骏 (Sat, Feb 9, 2019)<br>✔ 凉宫春日的消失 (Tue, Feb 12, 2019)<br>✔ 飞越疯人院 (Wed, Feb 13, 2019)✭<br>✔ 怦然心动 (Thu, Feb 14, 2019)<br>✔ 大话西游之大圣娶亲 (Sat, Feb 16, 2019)<br>✔ 大话西游之月光宝盒 刘镇伟 (Fri, Feb 22, 2019)✭<br>✔ 未麻的部屋 今敏 (Wed, Feb 27, 2019)✭<br>✔ 网络迷踪 (Thu, Feb 28, 2019)✭<br>✔ 绿皮书 (Mon, Mar 4, 2019)<br>✔ 生门 (Wed, Mar 13, 2019) ✭<br>✔ 过春天 (Sat, Mar 16, 2019)<br>✔ 徒手攀岩 (Mon, Mar 18, 2019)✭<br>✔ 触不可及 (Thu, Mar 21, 2019)<br>✔ 海市蜃楼 (Fri, Mar 29, 2019)<br>✔ <del>下一站，天国 是枝裕和 (Sat, Mar 30, 2019)</del><br>✔ 祈祷落幕时 福泽克明 (Sun, Apr 7, 2019)<br>✔ 信笺故事 (Sat, Apr 13, 2019) ✭<br>✔ 摄影机不要停 (Fri, Apr 26, 2019)<br>✔ <del>那些年，我们一起追过的女孩 九把刀(Tue, May 7, 2019)</del><br>✔ 源代码 (Sat, May 25, 2019)<br>✔ 何以为家 (Tue, May 28, 2019)<br>✔ 蜘蛛侠：平行宇宙 (Tue, Jun 18, 2019)<br>✔ 钢的琴 张猛 (Tue, Jun 18, 2019)✭<br>✔ 狮子王 (Thu, Jul 18, 2019)<br>✔ 盗钥匙的方法 (Mon, Jul 29, 2019)✭<br>✔ 何者 (Tue, Jul 30, 2019)✭<br>✔ 寄生虫 奉俊昊 (Wed, Sep 4, 2019)✭<br>✔ 燃烧 李沧东 (Sun, Sep 1, 2019)✭<br>✔ 唐人街探案 (Sat, Sep 28, 2019)<br>✔ 第三度嫌疑人 是枝裕和 (Tue, Oct 15, 2019)✭<br>✔ 小丑 (Fri, Oct 18, 2019)<br>✔ 别告诉她 王子逸 2019 (Sun, Dec 15, 2019)✭<br>✔ 哈利波特与魔法石 (Mon, Dec 16, 2019)<br>✔ 哈利波特与密室 (Mon, Dec 16, 2019)<br>✔ 哈利波特与阿兹卡班的囚徒 (Tue, Dec 17, 2019) ✭<br>✔ 哈利波特与火焰杯(Tue, Dec 17, 2019)<br>✔ 哈利波特与凤凰社(Tue, Dec 17, 2019)<br>✔ 哈利波特与混血王子(Tue, Dec 18, 2019)<br>✔ 哈利波特与死亡圣器（上）(Tue, Dec 18, 2019)<br>✔ 哈利波特与死亡圣器（下）(Tue, Dec 18, 2019)✭<br>✔ 幻之光 是枝裕和(Tue, Dec 29, 2019)<br>✔ 喜剧之王 周星驰 1999 (Thu, Dec 26, 2019)✭<br>✔ 大佛普拉斯 2017 (Sat, Dec 28, 2019) ✭</p>]]></content>
    
    
    <summary type="html">Happy New Year</summary>
    
    
    
    <category term="生活记录" scheme="https://onesmallstep.vip/categories/%E7%94%9F%E6%B4%BB%E8%AE%B0%E5%BD%95/"/>
    
    
    <category term="ToDoList" scheme="https://onesmallstep.vip/tags/ToDoList/"/>
    
    <category term="Record" scheme="https://onesmallstep.vip/tags/Record/"/>
    
  </entry>
  
  <entry>
    <title>写在这个博客的开始</title>
    <link href="https://onesmallstep.vip/2019/12/31/The_Beginning/"/>
    <id>https://onesmallstep.vip/2019/12/31/The_Beginning/</id>
    <published>2019-12-31T06:58:02.000Z</published>
    <updated>2019-12-31T06:58:02.000Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><hr><h2 id="为什么要开这个博客"><a href="#为什么要开这个博客" class="headerlink" title="为什么要开这个博客"></a>为什么要开这个博客</h2><p>&emsp;2019年的某一天，我在听博客时，听到了主持人推荐了比尔盖茨的<a href="https://www.gatesnotes.com/">博客</a>。他的博客内容很丰富，也充满了生活气。他分享读书和观影的快乐，也分享他对一些时事问题的看法，倒完全不像是一个程序员大佬的博客的样子，这突然让我有一种眼前一亮的感觉。后来我又看了Netflix上一部关于比尔·盖茨的<a href="https://movie.douban.com/subject/34807113/" title="Inside Bill&#39;s Brain: Decoding Bill Gates">纪录片</a>。从纪录片中我看到比尔之所以成功、伟大，不仅仅是因为他拥有一个比常人聪明的大脑，还因为他拥有着一般人所没有的执着和努力。他说，“每次遇到坎坷，大多数人会说，‘算了，好，我不干了’，但是我都会选择让自己更加努力。”<br><br>&emsp;比尔·盖茨，一个曾经的全球首富，拥有着全球最好的财富和最好的资源，本可以安享悠闲的晚年生活，现在却依旧坚持为慈善事业而奔波、读书、学习。他现在仍然会写博客来记录自己的生活和想法，这一点让我特别敬佩，也给了我很多的启示。我希望自己能够向他学习，虽然我知道自己<del>或许</del>永远也不可能成为一个特别出色的人，但至少我可以从现在开始追赶前人的轨迹，即使只是一小步。我希望自己也能拥有魄力和坚持下去的毅力，所以就从经验这个博客开始吧，即使只是一小步。<br><br>&emsp;纪录片里，比尔·盖茨的妈妈对受挫的比尔说：<em>成功的意义并不在于你能得到什么，甚至也不是你能够给予什么，而是，你能成为一个什么样的人。</em></p><hr><h2 id="博客的板块"><a href="#博客的板块" class="headerlink" title="博客的板块"></a>博客的板块</h2><h3 id="学习笔记："><a href="#学习笔记：" class="headerlink" title="学习笔记："></a>学习笔记：</h3><p>&emsp;之所以想把自己的学习笔记放在这里，一方面是为了方便自己的查阅、归档和整理；另一方面也是因为自己在上课的时候每次找相关资料都找不到，每次作业和project都要靠自己慢慢摸索，特别苦恼，所以想把学习中踩过的坑和绕过的弯分享给大家，希望同专业的同学们也有个参考。</p><h3 id="感悟记录："><a href="#感悟记录：" class="headerlink" title="感悟记录："></a>感悟记录：</h3><p>&emsp;读书、观影后的思考，生活中的感悟，以及一些毫无价值的碎碎念。</p><h3 id="照片分享："><a href="#照片分享：" class="headerlink" title="照片分享："></a>照片分享：</h3><p>&emsp;希望美的东西可以被更多的人看到</p><h3 id="体验推荐"><a href="#体验推荐" class="headerlink" title="体验推荐"></a>体验推荐</h3><p>&emsp;各种各样（自己正好买过、或者用过）的产品的使用体验和推荐。</p><hr><h2 id="版权相关"><a href="#版权相关" class="headerlink" title="版权相关"></a>版权相关</h2><p>本博客中的文章均为原创，允许转载，但转载或以任何方式使用，请在醒目位置注明转自本<a href="http://onesmallstep.vip">博客</a>，未经本人书面授权不能用于商业用途，谢谢！</p><p>本博客相册中的所有图片均为本人拍摄，转载或使用前请联系<a href="zhaojiyang1996@qq.com">博主</a></p><hr><h2 id="致谢-amp-参考资料"><a href="#致谢-amp-参考资料" class="headerlink" title="致谢&amp;参考资料"></a>致谢&amp;参考资料</h2><p>在这个博客的搭建过程中，我参考了一些资料以及网友的教程，在此特别感谢这些热心人的分享。同时，留下这些链接也可以给想要从零开始自己搭建博客的同学提供一些参考资料。</p><ul><li><a href="https://www.bilibili.com/video/av44544186">手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo</a></li><li><a href="https://www.bilibili.com/video/av24897960">手把手教你搭建属于自己的hexo+github博客</a></li><li><a href="https://github.com/jerryc127/hexo-theme-butterfly">Hexo Butterfly主题</a></li><li><a href="https://www.bilibili.com/video/av59872892">[苹果]使用Github和JsDelivr搭建一个无限制的高速图床。</a><br></li><li><a href="https://www.zhihu.com/question/31377141">Github 怎么绑定自己的域名</a><br></li><li><a href="https://www.youtube.com/watch?v=mPGi1IHQxFM&vl=en">How to add a Custom Domain On Github Pages</a></li></ul>]]></content>
    
    
    <summary type="html">关于这个博客的现在和未来</summary>
    
    
    
    
    <category term="Record" scheme="https://onesmallstep.vip/tags/Record/"/>
    
  </entry>
  
</feed>
