<?xml version="1.0" encoding="utf-8"?>
<!-- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
-->
<?xml-stylesheet type="text/xsl" href="http://study.ywicc.edu.cn/roller/roller-ui/styles/rss.xsl" media="screen"?><rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
  <title>博客之家</title>
  <link>http://study.ywicc.edu.cn/roller</link>
    <atom:link rel="self" type="application/rss+xml" href="http://study.ywicc.edu.cn/roller/home/feed/entries/rss" />
  <description>开源内容发布服务</description>
  <language>en-us</language>
  <copyright>Copyright 2018</copyright>
  <lastBuildDate>Sat, 10 Feb 2018 19:59:34 +0800</lastBuildDate>
  <generator>Apache Roller Weblogger 6.1.1 (1648933689878:dave)</generator>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/ldquo-linux%E7%B3%BB%E7%BB%9F%E5%BA%94%E7%94%A8-rdquo-%E7%9F%AD%E8%A7%86%E9%A2%91%E9%9B%86</guid>
    <title>&amp;ldquo;Linux系统应用&amp;rdquo;短视频集</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/ldquo-linux%E7%B3%BB%E7%BB%9F%E5%BA%94%E7%94%A8-rdquo-%E7%9F%AD%E8%A7%86%E9%A2%91%E9%9B%86</link>
    <pubDate>Thu, 1 Sep 2022 18:06:27 +0800</pubDate>
    <category>网络文摘</category>
    <category>linux</category>
    <category>操作系统</category>
<description>&lt;p&gt;介绍如何在日常工作和学习中实际使用Linux操作系统的短视频集，适合从Python入门应用开发的学习者&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Python与Linux系统 &lt;a href=&quot;https://www.bilibili.com/video/BV1oK411J7eC&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV1oK411J7eC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Python与Linux系统软件包管理 &lt;a href=&quot;https://www.bilibili.com/video/BV17K4y1v7Po&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV17K4y1v7Po&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Python与Linux系统远程开发 &lt;a href=&quot;https://www.bilibili.com/video/BV1oC4y147cD&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV1oC4y147cD&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Python与Linux系统云主机 &lt;a href=&quot;https://www.bilibili.com/video/BV1vf4y19794&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV1vf4y19794&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Python3.9源码在Linux系统下的编译 &lt;a href=&quot;https://www.bilibili.com/video/BV1C54y127Dp&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV1C54y127Dp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;i3窗口管理器 &lt;a href=&quot;https://www.bilibili.com/video/BV15N411o7KN&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV15N411o7KN&lt;/a&gt;&lt;/li&gt;&lt;li&gt;i3窗口管理器进阶配置 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1Zp4y1H77X&quot;&gt;https://www.bilibili.com/video/BV1Zp4y1H77X&lt;/a&gt;&lt;/li&gt;&lt;li&gt;i3窗口管理器功能扩展 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1oV411i7JV&quot;&gt;https://www.bilibili.com/video/BV1oV411i7JV&lt;/a&gt;&lt;/li&gt;&lt;li&gt;fcitx输入法平台 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV18K4y1S7vc&quot;&gt;https://www.bilibili.com/video/BV18K4y1S7vc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;openbox窗口管理器 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1SN411X7ra&quot;&gt;https://www.bilibili.com/video/BV1SN411X7ra&lt;/a&gt;&lt;/li&gt;&lt;li&gt;idesk桌面组件 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV12y4y187ZF&quot;&gt;https://www.bilibili.com/video/BV12y4y187ZF&lt;/a&gt;&lt;/li&gt;&lt;li&gt;xfce桌面环境 &lt;a href=&quot;https://www.bilibili.com/video/BV1gh411D7vf&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV1gh411D7vf&lt;/a&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1gh411D7vf&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Manjaro发行版的安装 &lt;a href=&quot;https://www.bilibili.com/video/BV17K4y1K7ur&quot; target=&quot;_blank&quot;&gt;https://www.bilibili.com/video/BV17K4y1K7ur&lt;/a&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV17K4y1K7ur&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Manjaro软件包管理和中文化配置 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1Gv41177GE&quot;&gt;https://www.bilibili.com/video/BV1Gv41177GE&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Manjaro自启动程序配置 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1AQ4y1Z7wj&quot;&gt;https://www.bilibili.com/video/BV1AQ4y1Z7wj&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Manjaro桌面环境的切换 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1Xv411L75q&quot;&gt;https://www.bilibili.com/video/BV1Xv411L75q&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Manjaro使用Arch用户软件仓库(AUR) &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1p54y157ve&quot;&gt;https://www.bilibili.com/video/BV1p54y157ve&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;font class=&quot;f000&quot;&gt;Arch发行版的最简明安装指南 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1u84y1F719&quot;&gt;https://www.bilibili.com/video/BV1u84y1F719&lt;/a&gt; &lt;/font&gt;&lt;/li&gt;&lt;li&gt;Arch使用包管理命令pacman &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1JA41137Qb&quot;&gt;https://www.bilibili.com/video/BV1JA41137Qb&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arch使用多重启动加载器GRUB &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1Zf4y1b7kK&quot;&gt;https://www.bilibili.com/video/BV1Zf4y1b7kK&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arch使用AUR辅助工具yay &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1nB4y1M7Eh&quot;&gt;https://www.bilibili.com/video/BV1nB4y1M7Eh&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arch使用平铺式窗口管理器i3-gaps &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1NX4y1w7wU&quot;&gt;https://www.bilibili.com/video/BV1NX4y1w7wU&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arch使用远程桌面协议(RDP) &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1x64y1X7FT&quot;&gt;https://www.bilibili.com/video/BV1x64y1X7FT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arch使用最新Python3.10开发环境 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1Ah411r7gL&quot;&gt;https://www.bilibili.com/video/BV1Ah411r7gL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arch用于游戏娱乐 &lt;a target=&quot;_blank&quot; href=&quot;https://www.bilibili.com/video/BV1zy4y1L7Bq&quot;&gt;https://www.bilibili.com/video/BV1zy4y1L7Bq&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/vue</guid>
    <title>搭建Vue开发环境</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/vue</link>
    <pubDate>Tue, 30 Aug 2022 13:28:10 +0800</pubDate>
    <category>教程</category>
    <category>vue</category>
    <category>前端</category>
    <category>编程</category>
<atom:summary type="html">机房搭建Vue开发环境说明</atom:summary><description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;机房搭建Vue开发环境说明&lt;/p&gt;&lt;p&gt;1、JS运行环境Node.js &lt;a href=&quot;https://nodejs.org/zh-cn/&quot; target=&quot;_blank&quot;&gt;https://nodejs.org/zh-cn/&lt;/a&gt; 下载安装长期维护版16.17.0&lt;br&gt;输入终端命令确认安装成功&lt;br&gt;&lt;/p&gt;&lt;pre&gt;node -v&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;2、Git &lt;a href=&quot;https://git-scm.com/&quot; target=&quot;_blank&quot;&gt;https://git-scm.com/&lt;/a&gt; 下载安装最新版&lt;br&gt;输入终端命令确认安装成功&lt;br&gt;&lt;/p&gt;&lt;pre&gt;git --version&lt;/pre&gt;&lt;p&gt;3、Visual Studio Code &lt;a href=&quot;https://visualstudio.microsoft.com/zh-hans/&quot; target=&quot;_blank&quot;&gt;https://visualstudio.microsoft.com/zh-hans/&lt;/a&gt; 下载安装最新版&lt;br&gt;打开扩展面板搜索并安装Prettier、Volar、ESLint&lt;br&gt;打开设置面板点击右上角按钮编辑settings.json&lt;br&gt;&lt;/p&gt;&lt;pre&gt;{&lt;br&gt;&amp;nbsp; &quot;editor.tabSize&quot;: 2,&lt;br&gt;&amp;nbsp; &quot;editor.defaultFormatter&quot;: &quot;esbenp.prettier-vscode&quot;,&lt;br&gt;&amp;nbsp; &quot;editor.formatOnSave&quot;: true,&lt;br&gt;&amp;nbsp; &quot;prettier.semi&quot;: false,&lt;br&gt;&amp;nbsp; &quot;prettier.singleQuote&quot;: true,&lt;br&gt;&amp;nbsp; &quot;prettier.trailingComma&quot;: &quot;none&quot;,&lt;br&gt;&amp;nbsp; &quot;update.enableWindowsBackgroundUpdates&quot;: false,&lt;br&gt;&amp;nbsp; &quot;update.mode&quot;: &quot;none&quot;,&lt;br&gt;}&lt;/pre&gt;4、浏览器安装Vue开发工具&lt;br&gt;Win10自带Edge浏览器点击“扩展”&amp;gt;“打开 Microsoft Edge 加载项”搜索并安装Vue Devtools&lt;br&gt;Chrome浏览器下载扩展包解压，在扩展管理中启用开发模式后即可安装&amp;nbsp;&lt;a href=&quot;https://github.com/vuejs/devtools/releases/download/v6.1.3/devtools-chrome.zip&quot; target=&quot;_blank&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;https://github.com/vuejs/devtools/releases/download/v6.1.3/devtools-chrome.zip&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;5、配置npm镜像并安装全局包&lt;br&gt;输入终端命令&lt;br&gt;&lt;/p&gt;&lt;pre&gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
npm config set registry https://registry.npmmirror.com&lt;br&gt;npm install -g http-server
npm install -g eslint&lt;br&gt;npm install -g vue-eslint-parser&lt;br&gt;npm install -g @vue/cli&lt;br&gt;npm install -g webpack&lt;br&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/100/entry/smart-vpn-client</guid>
    <title>安装通用客户端程序连接学校VPN</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/100/entry/smart-vpn-client</link>
    <pubDate>Sat, 23 Jul 2022 07:41:30 +0800</pubDate>
    <category>指南</category>
    <category>vpn</category>
    <category>网络服务</category>
<atom:summary type="html">Smart VPN Client 是一个通用的客户端程序，可以配置并连接到学校VPN，相比系统自带的VPN功能更为方便快捷。</atom:summary><description>&lt;p&gt;Smart VPN Client 是一个通用的客户端程序，可以配置并连接到学校VPN，相比系统自带的VPN功能更为方便快捷。&lt;br&gt;&lt;/p&gt;&lt;p&gt;请访问以下链接下载 Windows 版安装包 &lt;a href=&quot;https://www.draytek.com/products/smart-vpn-client/&quot; target=&quot;_blank&quot;&gt;https://www.draytek.com/products/smart-vpn-client/&lt;/a&gt;&lt;br&gt;&lt;br&gt;解压缩后运行其中的可执行文件 SmartVPNClient_5.6.0.exe，按提示完成安装并重启，即可在开始菜单找到并运行 Draytek Smart VPN Client，选择“设定档” &amp;gt; “新增”添加VPN连接，在编辑设定档窗口中点击“进阶选项”，输入设定档名“VPN_YWU”，选择类型为“L2TP over IPSec”，输入学校VPN的IP地址、用户账号密码和预共享密码，点击“确定”：&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;（注意：截图中的配置有一处错误，请启用“变更默认路由到此VPN隧道”）&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/16a0892c-02dc-4bfd-be23-71ff5d31058c&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/16a0892c-02dc-4bfd-be23-71ff5d31058c&quot; alt=&quot;smartvpn1.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;现在切换到“连线”选项卡即可执行连接操作：&lt;br&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/04680a09-1fb6-49a6-9780-a4d0252c2cf3&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/04680a09-1fb6-49a6-9780-a4d0252c2cf3&quot; alt=&quot;smartvpn2.png&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/d456d226-6ccd-432b-babf-3dc81d0225b0&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/d456d226-6ccd-432b-babf-3dc81d0225b0&quot; alt=&quot;smartvpn3.png&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/100/entry/vpn</guid>
    <title>连接学校VPN问题的处理</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/100/entry/vpn</link>
    <pubDate>Mon, 12 Jul 2021 23:46:15 +0800</pubDate>
    <category>指南</category>
    <category>vpn</category>
    <category>网络服务</category>
<description>&lt;p&gt;Windows确认设置了下列注册表项：&lt;br&gt;&lt;/p&gt; 
  &lt;pre&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters]
&quot;ProhibitIpSec&quot;=dword:00000000&lt;/pre&gt; 
  &lt;pre&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]
&quot;AssumeUDPEncapsulationContextOnSendRule&quot;=dword:00000002&lt;/pre&gt; 
  &lt;p&gt;并确认启用了下列服务：&lt;/p&gt; 
  &lt;ul&gt; 
    &lt;li&gt;IPsec Policy Agent 手动&lt;br&gt;&lt;/li&gt; 
    &lt;li&gt;Remote Access Auto Connection Manager 手动&lt;br&gt;&lt;/li&gt; 
    &lt;li&gt;Remote Access Connection Manager 应设为自动&lt;br&gt;&lt;/li&gt; 
    &lt;li&gt;Secure Socket Tunneling Protocol Service 手动&lt;br&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;div&gt; 
    &lt;div&gt;MacOS新版本：https://discussionschinese.apple.com/thread/253582522&lt;/div&gt; 
    &lt;pre&gt;$ sudo touch /etc/ppp/options
$ sudo vi /etc/ppp/options
plugin L2TP.ppp
# l2tpnoipsec  # 这一行先注释掉，不行再启用&lt;/pre&gt; 
  &lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-crawler</guid>
    <title>Python 网络爬虫：批量下载图片</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-crawler</link>
    <pubDate>Fri, 25 Oct 2019 08:51:39 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">网络爬虫即通过编写程序来自动化访问互联网，快速地获取海量的有价值信息，这是Python语言的又一个重要应用领域</atom:summary><description>&lt;p&gt;网络爬虫即通过编写程序来自动化访问互联网，快速地获取海量的有价值信息，这是Python语言的又一个重要应用领域。Python网络爬虫程序通常使用Requests软件包来发送HTTP请求，数据科学发行版Anaconda已经直接附带了Requests，对于Python官方版则可以使用以下pip命令安装Requests：&lt;/p&gt; 
  &lt;pre&gt;pip install requests&lt;/pre&gt; 
  &lt;p&gt;这里将在Jupyter笔记本中演示一个批量下载图片的网络爬虫，它会根据指定的搜索词在百度搜索相应的图片——例如想要搜索“国画”，用户可以在浏览器中输入以下网址打开相应的结果页面：
&lt;a href=&quot;http://image.baidu.com/search/flip?tn=baiduimage&amp;amp;word=%E5%9B%BD%E7%94%BB&quot; target=&quot;_blank&quot;&gt;http://image.baidu.com/search/flip?tn=baiduimage&amp;amp;word=国画&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/75473ae5-eb9f-4a5e-857d-4033fa58a25b&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;网络爬虫程序则可以代替浏览器来访问相同的网址，再找出其中所有原图片的网址，发送相应的HTTP请求去获取并保存图片文件。以下代码块首先导入requests模块，调用其中的get函数向指定网址发送HTTP请求，得到包含结果页面的响应对象：&lt;/p&gt; 
  &lt;pre&gt;import requests
url = &quot;http://image.baidu.com/search/flip?tn=baiduimage&amp;amp;word=国画&quot;
r = requests.get(url)&lt;/pre&gt; 
  &lt;p&gt;以下代码块使用了标准库的re模块，通过正则表达式从结果页面中找出所有原图片的网址：&lt;/p&gt; 
  &lt;pre&gt;import re
po = re.compile(r&apos;&quot;objURL&quot;:&quot;(.+?)&quot;&apos;)
po.findall(r.text)&lt;/pre&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;div class=&quot;cell text_cell rendered selected&quot; tabindex=&quot;2&quot;&gt; 
    &lt;div class=&quot;inner_cell&quot;&gt; 
      &lt;div class=&quot;text_cell_render rendered_html&quot; tabindex=&quot;-1&quot;&gt; 
        &lt;p&gt;以下代码块实际执行批量下载图片操作，首先使用标准库os模块中的函数创建保存目录，然后逐一请求每个图片网址，并将返回的数据写入文件——图片文件名是根据网址生成的，这样可以避免重复下载：&lt;/p&gt; 
        &lt;pre&gt;import os
imgdir = &quot;img&quot;
if not os.path.exists(imgdir):
&amp;nbsp;&amp;nbsp;&amp;nbsp; os.mkdir(imgdir)

po = re.compile(r&apos;&quot;objURL&quot;:&quot;(.+?)&quot;&apos;)
urls = po.findall(r.text)
for url in urls:
&amp;nbsp;&amp;nbsp;&amp;nbsp; imgpath=os.path.join(imgdir, requests.utils.quote(url,&quot;&quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.exists(imgpath):&amp;nbsp; # 如果图片文件已存在则提示已下载
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(url,&quot;已下载&quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&amp;nbsp; # 否则发送请求获取图片数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r = requests.get(url)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if r.status_code == 200:&amp;nbsp; # 如果请求成功则将响应内容写入文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(&quot;开始下载:&quot;, url)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with open(imgpath, &apos;wb&apos;) as f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.write(r.content)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(&quot;无法下载:&quot;, url)&lt;/pre&gt; 
        &lt;p&gt; &lt;/p&gt; 
        &lt;div class=&quot;text_cell_render rendered_html&quot; tabindex=&quot;-1&quot;&gt; 
          &lt;p&gt;下载的图片可在Jupyter页面中点击显示，或是在系统资源管理器中打开相应文件夹来查看（Windows中的Jupyter根目录即C盘用户目录下的当前用户主目录）。&lt;/p&gt; 
          &lt;p&gt;你可能会发现对于某些图片链接爬虫程序将提示“无法下载”，实际编写爬虫程序时将会涉及到计算机网络的许多技术细节，还需要花费更多的时间才能熟练掌握。&lt;/p&gt; 
          &lt;p&gt;有关Requests的详细使用方法可参阅官方中文文档 &lt;a href=&quot;http://cn.python-requests.org/zh_CN/latest/&quot; target=&quot;_blank&quot;&gt;http://cn.python-requests.org/zh_CN/latest/&lt;/a&gt;&lt;/p&gt; 
        &lt;/div&gt; 
      &lt;/div&gt; 
    &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 10.5pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;o:DocumentProperties&gt;&lt;o:Revision&gt;1&lt;/o:Revision&gt;&lt;o:Pages&gt;1&lt;/o:Pages&gt;&lt;o:Lines&gt;1&lt;/o:Lines&gt;&lt;o:Paragraphs&gt;1&lt;/o:Paragraphs&gt;&lt;/o:DocumentProperties&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;o:OfficeDocumentSettings&gt;&lt;/o:OfficeDocumentSettings&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;w:WordDocument&gt;&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;&lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;&lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;&lt;w:DocumentKind&gt;DocumentNotSpecified&lt;/w:DocumentKind&gt;&lt;w:DrawingGridVerticalSpacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;&lt;w:PunctuationKerning&gt;&lt;/w:PunctuationKerning&gt;&lt;w:View&gt;Normal&lt;/w:View&gt;&lt;w:Compatibility&gt;&lt;w:DontGrowAutofit/&gt;&lt;w:BalanceSingleByteDoubleByteWidth/&gt;&lt;w:DoNotExpandShiftReturn/&gt;&lt;w:UseFELayout/&gt;&lt;/w:Compatibility&gt;&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;&lt;/w:WordDocument&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;w:LatentStyles DefLockedState=&quot;false&quot;  DefUnhideWhenUsed=&quot;true&quot;  DefSemiHidden=&quot;true&quot;  DefQFormat=&quot;false&quot;  DefPriority=&quot;99&quot;  LatentStyleCount=&quot;260&quot; &gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Normal&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 7&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 8&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;heading 9&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 7&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 8&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index 9&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 7&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 8&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toc 9&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Normal Indent&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;footnote text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;annotation text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;header&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;footer&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;index heading&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;caption&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;table of figures&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;envelope address&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;envelope return&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;footnote reference&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;annotation reference&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;line number&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;page number&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;endnote reference&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;endnote text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;table of authorities&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;macro&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;toa heading&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Bullet&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Number&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Bullet 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Bullet 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Bullet 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Bullet 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Number 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Number 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Number 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Number 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Title&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Closing&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Signature&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Default Paragraph Font&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text Indent&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Continue&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Continue 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Continue 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Continue 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Continue 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Message Header&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Subtitle&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Salutation&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Date&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text First Indent&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text First Indent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Note Heading&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text Indent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Body Text Indent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Block Text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Hyperlink&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;FollowedHyperlink&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Strong&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Emphasis&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Document Map&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Plain Text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;E-mail Signature&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Normal (Web)&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Acronym&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Address&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Cite&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Code&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Definition&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Keyboard&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Preformatted&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Sample&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Typewriter&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;HTML Variable&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Normal Table&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;annotation subject&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;No List&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;1 / a / i&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;1 / 1.1 / 1.1.1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Article / Section&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Simple 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Simple 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Simple 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Classic 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Classic 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Classic 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Classic 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Colorful 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Colorful 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Colorful 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Columns 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Columns 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Columns 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Columns 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Columns 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 7&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid 8&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 7&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table List 8&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table 3D effects 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table 3D effects 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table 3D effects 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Contemporary&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Elegant&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Professional&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Subtle 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Subtle 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Web 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Web 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Web 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Balloon Text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Grid&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Table Theme&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Placeholder Text&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;No Spacing&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;List Paragraph&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Quote&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Intense Quote&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3 Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid Accent 1&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3 Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid Accent 2&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3 Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid Accent 3&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3 Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid Accent 4&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3 Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid Accent 5&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Shading Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light List Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Light Grid Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 1 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Shading 2 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 1 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium List 2 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 1 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 2 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Medium Grid 3 Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Dark List Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Shading Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful List Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;w:LsdException Locked=&quot;false&quot;  Priority=&quot;99&quot;  SemiHidden=&quot;false&quot;  Name=&quot;Colorful Grid Accent 6&quot; &gt;&lt;/w:LsdException&gt;
&lt;/w:LatentStyles&gt;&lt;/xml&gt;&lt;![endif]--&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-data</guid>
    <title>Python 数据可视化示例</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-data</link>
    <pubDate>Thu, 24 Oct 2019 08:56:05 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">数据处理与分析的结果可以通过图形工具包展示为生动直观的图表，Python中最常用的图表工具软件包是数学绘图库Matplotlib，本示例将使用Matplotlib对之前皇帝的寿命数据进行可视化。</atom:summary><description>&lt;p&gt;数据处理与分析的结果可以通过图形工具包展示为生动直观的图表，Python中最常用的图表工具软件包是数学绘图库Matplotlib，Anaconda发行版已经直接附带了Matplotlib，对于Python官方版则可以使用以下pip命令安装Matplotlib：&lt;/p&gt; 
  &lt;pre&gt;pip install matplotlib 
&lt;/pre&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;p&gt;以下代码导入绘图子模块matplotlib.pyplot（按惯例以plt作为别名）并创建了必要的中文字体属性对象： &lt;/p&gt; 
  &lt;pre&gt;import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.font_manager import FontProperties
cfont = FontProperties(fname=r&quot;C:\Windows\Fonts\simhei.ttf&quot;)  # 创建中文字体属性，自带字库不支持中文
&lt;/pre&gt; 
  &lt;p&gt;接下来的语句块将基于之前皇帝寿命DataFrame中的数据绘制一个直方图： &lt;/p&gt; 
  &lt;pre&gt;plt.style.use(&quot;seaborn&quot;)
plt.title(&quot;皇帝的寿命：区间分布&quot;, fontproperties=cfont, fontsize=18)
plt.hist(df.寿命, range=(0, 100), edgecolor=&quot;blue&quot;)
&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/3c07e52a-8ceb-4d88-82be-e387c60f1516&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;可以看到数据值是呈正态分布的，占比最高的是30到40岁区间——总共有62位皇帝的寿命处在这个范围之内。&lt;/p&gt; 
  &lt;p&gt;下面的继续尝试绘制不同类型的图表，以便研究一下皇帝寿命的变化趋势，首先使用以下语句块对DataFrame进行修改：&lt;/p&gt; 
  &lt;pre&gt;df[&quot;出生年份&quot;] = df.生卒.apply(
&amp;nbsp;&amp;nbsp;&amp;nbsp; lambda x: int(x.split(&quot;年&quot;, 1)[0].replace(&quot;前&quot;, &quot;-&quot;)))
df = df.sort_values(&quot;出生年份&quot;)
df[&quot;平均寿命&quot;] =df.寿命.rolling(20).mean()
df.head()&lt;/pre&gt; 
  &lt;p&gt;以上语句块先添加了一个“出生年份”列，即通过对生卒列处理得到的整数（公元前为负值）；再按出生年份排序；最后再添加一个“平均寿命”列，即连续20位皇帝寿命的移动平均值。可以看到现在数据将按出生年份排序，平均寿命列的前19行为空值（Pandas以NaN表示空值，即Not a Number）。&lt;/p&gt;
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/1282f360-f24e-438b-85d6-c8280d9ce88e&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;现在可以使用以下语句块绘制新的图表：plot方法用于绘制折线图，第一行根据出生年份和寿命值绘图，第三个参数为表示绿色圆点的样式字符串，相当于画散点图；第二行根据出生年份和平均寿命值绘图，样式为红色实线：&lt;/p&gt; 
  &lt;pre&gt;plt.plot(df.出生年份, df.寿命, &quot;go&quot;)
plt.plot(df.出生年份, df.平均寿命, &quot;r-&quot;)
plt.title(&quot;皇帝寿命：变化趋势&quot;, fontproperties=cfont, fontsize=18);
&lt;/pre&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/7dc69a18-3e78-4c7a-8cbc-6f68b3c9aa42&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;你可以从这张图中一眼看出皇帝寿命与朝代兴衰的显著关联，一图胜千言。&lt;/p&gt; 
  &lt;p&gt;Matplotlib支持绘制各种类型的图表，实际工作中应当根据数据的特点选择最能说明问题的图表类型。有关Matplotlib的更多信息请访问项目官网 &lt;a href=&quot;https://matplotlib.org/&quot; target=&quot;_blank&quot;&gt;https://matplotlib.org/&lt;/a&gt; &lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-visual</guid>
    <title>Python 数据分析示例</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-visual</link>
    <pubDate>Wed, 23 Oct 2019 22:50:19 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">数据分析处理是Python语言的一个重要应用领域，对于此类需求通常使用的软件包是Pandas，下面的示例是对中国历史上皇帝们的寿命数据进行简单的统计分析</atom:summary><description>&lt;p&gt;数据分析处理是Python语言的一个重要应用领域，对于此类需求通常使用的软件包是Pandas，数据科学发行版Anaconda已经直接附带了Pandas，对于Python官方版则可以使用以下pip命令安装Pandas：&lt;/p&gt; 
  &lt;pre&gt;pip install pandas&lt;/pre&gt; 
  &lt;p&gt; 下面的示例是使用Jupyter笔记本对中国历史上皇帝们的寿命数据进行简单的统计分析，练习所用的数据文件为emperor.csv（这是一种以逗号作为分隔符的通用纯文本数据格式）： &lt;a href=&quot;http://study.ywicc.edu.cn/x/07ltKL&quot; target=&quot;_blank&quot;&gt;http://study.ywicc.edu.cn/x/07ltKL&lt;/a&gt;&lt;/p&gt; 
  &lt;pre&gt;# 导入pandas模块，按惯例以pd作为别名
import pandas as pd
# 读取CSV格式的数据返回一个数据网格DataFrame
df = pd.read_csv(&quot;http://study.ywicc.edu.cn/x/07ltKL&quot;)
df.shape&amp;nbsp; # 数据网格的形状即行数与列数&lt;/pre&gt; 
  &lt;p&gt;以上语句块读取CSV文件返回一个数据网格（DataFrame）对象，即302行乘5列的二维表。&lt;/p&gt; 
  &lt;p&gt;使用DataFrame对象的head方法则可以预览前几行的内容（默认5行）：&lt;/p&gt; 
  &lt;pre&gt;df.head()&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/7d4f7dc9-e6eb-45da-96a4-630f04324bf6&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;对于已生成的 DataFrame，还可以进行种调整和查询操作，以下语句块对列标签进行了修改，然后列出寿命达到80岁的皇帝：&lt;/p&gt; 
  &lt;pre&gt;df.columns = [&quot;序号&quot;, &quot;名号&quot;, &quot;寿命&quot;, &quot;生卒&quot;, &quot;朝代&quot;]
df[df.寿命 &amp;gt;= 80]&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/71f0178c-9768-4618-992f-912f9d6f7f7d&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;以下语句块筛选出明清两朝的皇帝，调用tail方法预览最后10行：&lt;/p&gt; 
  &lt;pre&gt;mingqing = df[df.朝代.isin([&quot;明&quot;, &quot;清&quot;])]
mingqing.tail(10)
&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/c87a318a-129a-40ca-a286-0d1f47c28aa8&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;以下语句块比较明清两朝的皇帝寿命——聚合输出分组总计数、最低值、最高值、平均值、中位数：&lt;/p&gt; 
  &lt;pre&gt;compare = mingqing.groupby(&quot;朝代&quot;).寿命.agg([&quot;count&quot;, &quot;min&quot;, &quot;max&quot;, &quot;mean&quot;, &quot;median&quot;])
compare
&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/c98d2ba4-47dd-44c1-898b-d73e0603673b&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;可以看到使用Pandas进行数据分析是相当方便快捷的，这个示例只对Pandas的功能进行了非常简要的介绍，学习者可以查阅官方文档了解更多使用技巧 &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/&quot; target=&quot;_blank&quot;&gt;https://pandas.pydata.org/pandas-docs/stable/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-gui-note</guid>
    <title>Python GUI 程序：记事本</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-gui-note</link>
    <pubDate>Wed, 23 Oct 2019 08:21:58 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">本示例程序 mynote.pyw 实现了一个简易的记事本，可以像 Windows 系统自带的记事本一样编辑文本文件。</atom:summary><description>&lt;div&gt;本示例程序 mynote.pyw 实现了一个简易的记事本，可以像 Windows 系统自带的记事本一样编辑文本文件。程序使用的可视化部件有菜单（Menu）、带滚动条的文本区（ScrolledText）以及多种对话框和消息框等，它们放在tkinter之下不同的子模块中，用法都相当简单，学习者可以查看帮助信息自行理解。&lt;br /&gt;&lt;/div&gt; 
  &lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;简易记事本&quot;&quot;&quot;
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
from tkinter.filedialog import askopenfilename, asksaveasfilename
from tkinter.messagebox import askokcancel, showinfo
appname = &quot;简易记事本&quot;


def main():
    def c_new():  # 新建文件
        var_filename.set(&quot;&quot;)
        root.title(f&quot;未命名 - {appname}&quot;)
        text.delete(1.0, &quot;end&quot;)

    def c_open():  # 打开文件
        filename = askopenfilename()
        if filename:
            var_filename.set(filename)
            root.title(f&quot;{filename} - {appname}&quot;)
            with open(filename) as f:
                text.delete(1.0, &quot;end&quot;)
                text.insert(1.0, f.read())

    def c_save():  # 保存文件
        filename = var_filename.get()
        if not filename:
            filename = asksaveasfilename()
        if filename:
            var_filename.set(filename)
            root.title(f&quot;{filename} - {appname}&quot;)
            with open(filename, &quot;w&quot;) as f:
                content = text.get(1.0, &quot;end-1c&quot;)
                f.write(content)

    def c_exit():  # 退出
        if askokcancel(&quot;退出&quot;, &quot;你确定要退出吗？&quot;):
            root.destroy()

    root = tk.Tk()
    root.title(f&quot;未命名 - {appname}&quot;)
    root.protocol(&quot;WM_DELETE_WINDOW&quot;, c_exit)  # 关闭根窗口时执行c_exit函数
    var_filename = tk.StringVar(root)  # 字符串变量
    menu = tk.Menu(root)  # 创建根窗口下属的主菜单
    root[&quot;menu&quot;] = menu
    m_file = tk.Menu(menu)  # 创建主菜单下属的文件菜单
    menu.add_cascade(label=&quot;文件&quot;, menu=m_file)
    m_file.add_command(label=&quot;新建&quot;, command=c_new)  # 文件菜单添加菜单命令项
    m_file.add_command(label=&quot;打开...&quot;, command=c_open)
    m_file.add_command(label=&quot;保存&quot;, command=c_save)
    m_file.add_separator()  # 添加分隔线
    m_file.add_command(label=&quot;退出&quot;, command=c_exit)
    text = ScrolledText(root, width=100, height=40)  # 创建滚动文本区
    text.pack()
    text.focus()
    root.mainloop()


if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;div&gt; 
    &lt;p&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-gui-clock</guid>
    <title>Python GUI 程序：数字时钟</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-gui-clock</link>
    <pubDate>Tue, 22 Oct 2019 22:02:59 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">运行以下示例程序 myclock.pyw 将显示一个简易的数字时钟</atom:summary><description>&lt;p&gt;计算机用户日常接触的大部分应用程序都是“图形用户界面”（GUI）程序。与 GUI 相对的概念是“命令行界面”（CLI），GUI 程序比 CLI 程序要复杂许多，通常人们会使用专门的 GUI 工具包来进行 GUI 程序的开发。Python 标准库自带了 GUI 工具包 tkinter，学习者常用的 IDLE 和 turtle 实际上都是基于 tkinter 实现的。tkinter 的特点是简单轻便，可以用于在不同系统平台上快速开发风格一致的基本 GUI 程序。GUI 的各种构成元素统称为“可视化部件”（Widget），每一种部件都对应某一种特定类型，编程时首先需要生成特定类型的部件对象，然后调用对象的方法即可任意控制图形界面的外观和行为了。&lt;br /&gt;&lt;/p&gt; 
  &lt;div&gt; 
    &lt;p&gt;运行以下示例程序 myclock.pyw 将显示一个简易的数字时钟： &lt;br /&gt;&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt; 
    &lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;简易数字时钟&quot;&quot;&quot;
import tkinter as tk  # 图形用户界面模块tkinter
import time  # 时间模块time


def tick():
    &quot;&quot;&quot;走时函数&quot;&quot;&quot;
    now = time.strftime(&quot;%H:%M:%S&quot;)  # 根据当前时间值格式化字符串
    label.config(text=now)  # 根据时间字符串更新标签文本
    label.after(200, tick)  # 200毫秒后再次调用tick函数


if __name__ == &quot;__main__&quot;:
    root = tk.Tk()  # 创建根窗口
    root.title(&quot;简易数字时钟&quot;)  # 窗口标题
    root.geometry(&quot;400x160&quot;)   # 窗口尺寸
    root.resizable(0, 0)  # 窗口大小不可调整
    label = tk.Label(root, fg=&quot;blue&quot;, font=(&quot;Courier&quot;, 30, &quot;bold&quot;))  # 创建标签
    label.place(relx=0.5, rely=0.5, anchor=tk.CENTER)  # 放置标签到居中位置
    tick()  # 调用tick函数
    root.mainloop()  # 启动窗口主事件循环接收所有事件&lt;/code&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/pre&gt; 
  &lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-%E4%B8%8E-jupyter-%E5%B7%A5%E5%85%B7%E5%BA%93-calysto</guid>
    <title>Python 与 Jupyter 工具库 Calysto</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-%E4%B8%8E-jupyter-%E5%B7%A5%E5%85%B7%E5%BA%93-calysto</link>
    <pubDate>Sun, 20 Oct 2019 11:08:23 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">Calysto 是一个小巧的 Python 工具库，用它可以简单方便地通过 Jupyter 笔记本页面进行图形绘制和模拟演示。</atom:summary><description>&lt;p&gt;Calysto 是一个小巧的 Python 工具库，用它可以简单方便地通过 Jupyter 笔记本页面进行图形绘制和模拟演示。 Calysto 项目发布页面为 &lt;a href=&quot;https://pypi.org/project/calysto/&quot; target=&quot;_blank&quot;&gt;https://pypi.org/project/calysto/&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;&lt;br /&gt;你可以在系统终端窗口输入以下命令来安装 Calysto 软件包：&lt;/p&gt; 
  &lt;pre&gt;pip install calysto
conda install cairo  # Windows下还需要安装cairo&lt;/pre&gt; 
  &lt;p&gt;&lt;br /&gt;安装完成后导入包内的图形模块 calysto.graphics 中的所有对象和显示模块 calysto.display 中的两个函数：&lt;/p&gt; 
  &lt;pre&gt;from calysto.graphics import *
from calysto.display import display, clear_output&lt;/pre&gt; 
  &lt;p&gt;&lt;br /&gt;下面是一个绘制图形对象的示例，首先创建一个 Canvas 画布对象以及任意多个图形对象例如 Circle 圆形，Text 文本，Polygon 多边形等，然后调用画布对象的 draw 方法在画布上绘制图形对象，最后调用 display 函数在 Jupyter 笔记本页面中显示画布：&lt;/p&gt; 
  &lt;pre&gt;canvas = Canvas((500, 200))  # 创建画布，位置参数指定大小是多少个像素
# 创建圆形，位置参数指定圆心，半径，关键字参数有填充颜色，线条颜色等
circle = Circle((100, 100), 30, fill=&quot;red&quot;, stroke=&quot;green&quot;)
circle.stroke_width(3)  # 也可调用对象的方法，例如stroke_width()改变线条宽度
canvas.draw(circle)
# 创建文本，位置参数指定文本，起点，可以使用style关键字参数设置任意CSS样式
text = Text(&quot;画布上的文本&quot;, (180, 100), fill=&quot;blue&quot;, stroke=&quot;red&quot;, style=&quot;font-weight:bold;font-size:30px;font-style:italic&quot;)
canvas.draw(text)
# 创建多边形，位置参数指定所有顶点
polygon = Polygon([(400, 100), (430, 100), (480, 130), (460, 150), (420, 150)])
canvas.draw(polygon)
display(canvas)  # 显示画布&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/270b2298-52ea-4dcc-9168-e7075a516efe&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;图形模块中还定义了 Turtle 海龟对象，可以在 Jupyter 笔记本页面中控制海龟进行绘图，但具体实现上与标准库的 turlte 模块有所差别，例如并不能填充海龟画出的封闭区域，也不会显示海龟的移动过程（不过通过刷新画布也是可以生成动效的）。&lt;/p&gt; 
  &lt;pre&gt;import time  # 导入标准库time模块用于定时操作
canvas = Canvas((400, 200))
tt = Turtle(canvas, (0, 100))  # 创建海龟，位置参数指定所在画布，起始点
tt.stroke = &quot;red&quot;  # 绘制红色36芒星
tt.stroke_width = 2
for _ in range(36):
    tt.forward(180)
    tt.right(170)
tt.penup()
tt.goto(220, 100)  # 动态绘制蓝色36芒星
tt.stroke = &quot;blue&quot;
tt.pendown()
for _ in range(36):
    tt.forward(180)
    tt.right(170)
    clear_output(wait=True)  # 添加刷新画布的代码
    display(canvas)
    time.sleep(.25)&lt;/pre&gt; 
  &lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/f832913c-7caf-47b4-857c-59d3765b050d&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;&lt;br /&gt;Calysto 没有提供很完善的文档，学习者可以自行研究，例如它的绘图模块是通过另一个第三方包 svgwtrite 在网页中输出 SVG 图形来实现的，因此可以参看相应文档了解详情 &lt;a href=&quot;https://svgwrite.readthedocs.io&quot; target=&quot;_blank&quot;&gt;https://svgwrite.readthedocs.io&lt;/a&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/100/entry/%E6%B5%81%E6%B5%AA%E5%9C%B0%E7%90%83-%E6%AF%94%E9%82%BB%E6%98%9F%E5%B9%B6%E9%9D%9E%E7%90%86%E6%83%B3%E5%AE%B6%E5%9B%AD</guid>
    <title>流浪地球：比邻星并非理想家园</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/100/entry/%E6%B5%81%E6%B5%AA%E5%9C%B0%E7%90%83-%E6%AF%94%E9%82%BB%E6%98%9F%E5%B9%B6%E9%9D%9E%E7%90%86%E6%83%B3%E5%AE%B6%E5%9B%AD</link>
    <pubDate>Fri, 8 Feb 2019 15:03:29 +0800</pubDate>
    <category>文摘</category>
    <category>科幻</category>
<atom:summary type="html">在大众看来，科学家往往不是好的科幻电影观众，他们会太过注意影片中的科学细节，而不能享受故事的乐趣。但我要为此辩护一句，除去电影院，科学家有多少机会去观察一个未来的世界呢？更何况，只有优秀的科幻电影才会引人思考背后的科学问题，蹩脚的科幻电影不过是蹩脚的电影而已，而《流浪地球》毫无疑问是会引起科学工作者思考的有趣影片。</atom:summary><description>&lt;p&gt;来源：&lt;a href=&quot;https://www.cnbeta.com/articles/science/816409.htm&quot; target=&quot;_blank&quot;&gt;https://www.cnbeta.com/articles/science/816409.htm&lt;/a&gt; &lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;在大众看来，科学家往往不是好的科幻电影观众，他们会太过注意影片中的科学细节，而不能享受故事的乐趣。但我要为此辩护一句，除去电影院，科学家有多少机会去观察一个未来的世界呢？更何况，只有优秀的科幻电影才会引人思考背后的科学问题，蹩脚的科幻电影不过是蹩脚的电影而已，而《流浪地球》毫无疑问是会引起科学工作者思考的有趣影片。&lt;/p&gt; 
  &lt;p&gt;在观看电影的过程中，我试着将自己当作一个“电影宇宙”的观察者，思考《流浪地球》宇宙观中的科学问题。下面我想和大家分享一下我对《流浪地球》中几个科学问题的思考。&lt;/p&gt; 
  &lt;p&gt;&lt;b&gt;一、太阳的变化&lt;/b&gt;&lt;/p&gt; 
  &lt;p&gt;在电影《流浪地球》中，太阳亮度的增加是地球不得不背井离乡，远遁太空的原因，但现实世界中的太阳，真的会发生这样的变化吗？&lt;/p&gt; 
  &lt;p&gt;绝大多数人可能从未想过，有一天太阳会改变。在过去的46亿年里，太阳一直持续稳定地为地球提供能量。这种能量来自于太阳核心发生的氢元素聚变反应——每4个氢原子核通过一系列的中间反应最终形成1个氦原子核。而1个氦原子的质量略小于4个氢原子之和，这中间的质量差别按照爱因斯坦的质能方程E=mc2，
 
转化成了太阳的能量。这些能量中的绝大部分以光的形式发出，剩下的则由中微子携带。每一秒钟太阳会将六亿吨的氢原子转化为氦原子，产生的能量中有极其微小的一部分被地球接收到，供给地球上的生命所需。&lt;/p&gt; 
  &lt;p&gt;太阳自身有非常稳定的调节机制，保证光热的稳定输出：如果太阳内部的热核聚变反应因为某种原因略微加速，就会引起内部温度升高。这种升温会使得太阳整体微微地膨胀，从而使得核心温度和压力回复正常。对于太阳来说，这种调节在很短的时间里就可以完成。太阳自身发光的不稳定程度只有大约千分之一，造成的影响远远小于不同季节带来的差别。宇宙中相当多的恒星做不到像太阳这样稳定的调节，例如，我们熟知的猎户座第二亮星——参宿四就会因为不断地进行膨胀收缩，而在数百天时间里亮度变化超过2倍。&lt;/p&gt; 
  &lt;p&gt;在过去的40亿年里，太阳的整体亮度上升了大约20%。这种变化对于地球的生命演化产生了重要的影响，但是，在一个单一物种存续的时间（百万年到千万年）里，太阳的变化不会产生显著效应。如果太阳按照物理规律演化，那么在未来的10亿年里，太阳的能量输出将上升10%，这可能会引发地球上失控的温室效应。但这是非常长的时间尺度，在这之前人类自己引发的全球变暖就会造成严重的影响。&lt;/p&gt; 
  &lt;p&gt;在《流浪地球》的原著中，科学家观察到太阳核心的演化加速了，并且在地球逃离到木星附近时就已转变成为了一颗红巨星，完全吞噬了金星和水星。从天文学的角度来看，太阳确实会在未来的某个时刻开始向红巨星转化。这是因为太阳核心的氢元素在聚变燃烧后会转化为暂时无法聚变的氦元素，沉积在太阳中心，形成一个致密的核。当这个致密的核变大，原本在太阳核心发生的氢核聚变燃烧，就转变为在致密的氦核之外发生。这种转变会使得太阳失去稳定性调节机制，能量产出不断增加，并且体积开始膨胀，变得更红。天文学上称处于这个阶段的恒星为“红巨星”。在这种演化的末期，红巨星中心积累了足够高的温度，最终会使得氦构成的核心开始聚变，失控的氦核心燃烧会在数秒的短暂时间内释放出巨大的能量，这被称作“氦闪”。&lt;/p&gt; 
  &lt;p&gt;在原著中，太阳一直没有发生明显可见的变化，直到氦闪发生。地球之所以迫切需要逃离也是因为要躲避“氦闪”。但在实际的恒星演化图景中，氦闪仅仅是太阳在第一次红巨星演化的终点，早在氦闪发生之前，太阳就已经变成了非常巨大并且灼热的红巨星了。氦闪因为发生在太阳核心，实际上地球上的观察者也并不会看到像原著一样震撼的爆发现象。在电影版《流浪地球》中，太阳的变化已经不像原著中那样戏剧化，变得较为和缓。&lt;/p&gt; 
  &lt;p&gt;不过，请大家务必放心，天文学家目前对于太阳这样质量的单独恒星演化了解得相当清楚，无论从理论上还是观测上，都不支持太阳会在未来的数百年里发生电影中那样的变化。由人类自己造成的全球变暖问题可能才是现实中地球最大的危机。&lt;/p&gt; 
  &lt;p&gt;&lt;b&gt;二、推进地球的动力&lt;/b&gt;&lt;/p&gt; 
  &lt;p&gt;在《流浪地球》的故事中，地球的旅途分为四个阶段。首先，通过转向引擎，使得地球停止自转；第二步，地球的推进引擎启动，地球开始脱离自身的轨道。因为推进引擎只能提供很小的加速度，地球在逃离太阳之前仍然会绕着太阳转很多圈，逐步地改变轨道的形状，从圆形轨道变成一个扁扁的椭圆轨道，最终逃离太阳的引力束缚，飞向太空；第三步，地球会用500年时间加速到光速的千分之五，也就是1500公里/秒的速度。地球会用这个速度滑行1300年；第四步，在接近目的地时，地球会用另一个500年减速，泊入新的太阳的轨道。这个新的太阳就是距离太阳最近的恒星——4.2光年之外的比邻星。整个过程持续大约2500年。&lt;/p&gt; 
  &lt;p&gt;牛顿第三定律告诉我们：如果你向后抛出一些东西，你就会获得向前运动的加速度。如果地球想要逃离太阳，它需要向前进的反方向抛弃自己一部分的质量。这些被抛弃的物质在被抛出时相对地球的速度越快，地球获得的前进加速度也越多。&lt;/p&gt; 
  &lt;p&gt;虽然流浪地球的最快速度只有光速的千分之五，但对于人类目前的技术能力，依然是一个艰巨的挑战。人类目前最快的宇宙飞船，旅行者1号当前的速度大约是17公里/秒。流浪地球的最终速度会是旅行者1号的90倍。考虑到《流浪地球》故事开始的年代距离今天不远，在人类已经进行概念设计的未来火箭能源中，最为可能在《流浪地球》时代实现的是核动力引擎。&lt;/p&gt; 
  &lt;p&gt;在第二次世界大战结束后不久，美国核物理学家乌拉姆曾提出一个大胆的飞船设想——利用原子弹产生的威力推进飞船前进。在这个蓝图中，太空飞船实际上是向后放出一系列氢弹，让它们在太空中爆炸。在此基础上，泰德·泰勒和弗里曼·戴森提出了著名的猎户座计划。只要带上一些原子弹，人类就可以很容易地将巨大的飞船送到火星。而之后由英国人提出的代达罗斯计划更加宏伟，以氢聚变为能量源，飞船可以在50年的时间里将人类送到临近的恒星——巴纳德。在代达罗斯计划的蓝图中，飞船将携带超过5万吨的氦3和氘作为燃料，将一个大约500吨的飞船送到另一颗恒星。考虑到地球上很难收集到如此多的氦3和氘，代达罗斯计划的设计者们实际上希望在月球或者木星上开采这些燃料。&lt;/p&gt; 
  &lt;p&gt;对于推进流浪地球来说，要想收集到足够推进整个地球的氦3和氘则更加困难。影片实际上提到流浪地球的推进引擎的能量来源是“重元素聚变”。是的，不仅仅是轻元素可以聚变，事实上，在恒星演化晚期，碳、氮、氧、硅等元素也可以通过核聚变转化为更重的元素，并释放能量。对地球来说，最好的燃料应该是氧和硅，它们加起来占了地壳质量的74%。所以在影片中，我们看到燃料采集车直接挖取山石。在影片的科学设定下，这些山石可能只需要简单的处理就可以作为引擎的核聚变燃料。&lt;/p&gt; 
  &lt;p&gt;在恒星内部，氧（16O）有多种聚变方式。最为常见的是两个氧原子核（16O
 ）聚变产生一个 硅原子核（28Si）和一个 氦原子核（4He），同时产生9.6Mev 
能量——大概相当于2个氧原子总质量的万分之三。相比之下，在太阳内部发生的由4个氢原子核聚变为一个氦原子的聚变反应生产能量的效率要高得多，可以将起始的氢原子的千分之七的质量转化为能量。当然，硅和氦也可以进一步地聚变，产生更多的能量，但总的来看，能量释放效率依然不及氢聚变的效率。&lt;/p&gt; 
  &lt;p&gt;如果我们假设氧聚变产生的所有能量，都用来加速产物中的硅，
 使其直接喷射出去， 
那么后者可以达到光速的3%左右。我们还记得流量地球最终需要达到光速的千分之五，简单地套用火箭公式来计算地球最终消耗掉的质量，我们会发现地球在加速过程中需要损失掉自己20%的质量。这对地球来说可不是一个小事，地球的结构会因此发生显著的变化。不过，通过更加合理地设计地球喷射引擎，用核聚变的能量来发电，并用电磁力驱动轻离子喷射，而非直接喷射核聚变产物，地球将可以把绝大多数的质量存留下来。不过，这仍然会永久地改变地球地壳中的元素构成。&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;https://static.cnbetacdn.com/article/2019/0208/40433932726574b.jpg&quot; data-original=&quot;https://static.cnbetacdn.com/article/2019/0208/40433932726574b.jpg&quot; style=&quot;display: block;&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;不过，不管怎么说，物理学基本定律尚未阻止人类带着地球脱离太阳系。&lt;/p&gt; 
  &lt;p&gt;星际旅行是科幻小说长盛不衰的母题，但常见的科幻设定都可以分为两类：上策是利用“虫洞”或者“空间折叠”来打破爱因斯坦的相对论限制，实现超越光速地旅行；下策是通过光速飞船来完成恒星间的迁徙。刘慈欣则独辟蹊径，将地球整体作为飞船。这可以最大限度的保存人类的生命，而且所依靠的技术并未太过超出物理现实。正是这种高配飞船加低配引擎的组合，制造出了电影中磅礴的场面和悲壮的故事。&lt;/p&gt; 
  &lt;p&gt;&lt;b&gt;三、为什么要靠近木星&lt;/b&gt;&lt;/p&gt; 
  &lt;p&gt;《流浪地球》影片中，地球在靠近木星的过程中，被木星的引力捕获，产生了灾难性的后果。不过，为什么地球在逃亡的旅途上需要靠近木星呢？我想这主要是为了借助木星的引力弹弓效应来进行加速。&lt;/p&gt; 
  &lt;p&gt;下图是我从《漫步到宇宙尽头》中摘取的一个示例图。在开始的时候，飞船以速度v飞向行星，在行星的引力作用下，飞船的飞行方向完全改变，速度增加了2U。这很像是迎着火车前进的方向扔一个棒球，在碰撞后，棒球完全被反弹回来，并且从火车身上获得了新的动能。在引力弹弓变轨过程中，行星将动能传递给了飞船，并且改变了飞船的速度方向。&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;https://n.sinaimg.cn/tech/transform/126/w550h376/20190208/m_nJ-hsqyiwu2904022.jpg&quot; alt=&quot;　　图注：引力弹弓效应：飞船以速度V，飞向速度为U的行星，在行星的引力作用下，飞船的飞行方向完全改变，速度增加了2U。飞船在这个过程中借助行星引力获得了 “加速”效果。&quot; data-original=&quot;https://n.sinaimg.cn/tech/transform/126/w550h376/20190208/m_nJ-hsqyiwu2904022.jpg&quot; style=&quot;display: block;&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;引力弹弓效应：飞船以速度V，飞向速度为U的行星，在行星的引力作用下，飞船的飞行方向完全改变，速度增加了2U。飞船在这个过程中借助行星引力获得了 “加速”效果。&lt;/p&gt; 
  &lt;p&gt;引力弹弓效应早在上世纪七八十年代，就被广泛地引用于太阳系的深空探测。这其中最为著名的当属旅行者号的“伟大航路（grand
 
tour）”。在1980年前后，木星、土星、天王星和海王星形成一个比较独特的排列：它们都会运行到太阳系的同一侧。这种175年一遇的特殊行星排列，给了旅行者号多次借助行星引力弹弓效应的机会。旅行者1号和2号得以一次访问太阳系的好几颗行星，并且可以达到很高的航速，飞出太阳系。&lt;/p&gt; 
  &lt;p&gt;流浪地球计划毫无疑问也是想要借助木星的引力弹弓效应来加快速度。不过，和旅行者号不同，流浪地球有相当强劲的核动力引擎。借助木星的引力弹弓效应，流浪地球可以获得10km/s左右的加速，这相比于流浪地球最终1500km/s的航速微不足道。虽然，借助木星的引力弹弓，地球可以省几年的航行时间，但考虑到总的流浪旅途长达2500年，这种风险似乎并不值得。地球也许不需要靠木星那么近，完全可以借助木星进行一个比较温和的引力加速。事实上只要和木星距离拉开到30倍的月地距离，木星在地球上产生的潮汐效应，就和月球对地球的潮汐效应差不多了。&lt;/p&gt; 
  &lt;p&gt;在影片中，地球之所以被木星捕获，是因为木星突然出现了“引力增幅”。需要指出，对于现实物理世界来说，一个天体的引力，完全由其质量决定，不会出现突然的增加。所以，对于今天的深空探测来说，计算飞船的轨道并不算是难事。除了最初的几次实验，人类飞行器在历史上几乎没有在借助行星引力加速时出现过重大失误。&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;https://static.cnbetacdn.com/article/2019/0208/452fb6bb81e9b92.jpg&quot; data-original=&quot;https://static.cnbetacdn.com/article/2019/0208/452fb6bb81e9b92.jpg&quot; style=&quot;display: block;&quot; /&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;木星出现“引力增幅”的设定，事实上很难解释；图片来自网络&lt;/p&gt; 
  &lt;p&gt;&lt;b&gt;四、点燃木星&lt;/b&gt;&lt;/p&gt; 
  &lt;p&gt;在影片的高潮阶段，地球落向木星。主人公突然想到：木星大气主要是由氢气组成的，而地球大气则包含20%的氧气。为了使地球脱离木星的引力，救援队点燃了木星和地球大气的混合气体，产生了巨大的冲击波，将地球推离了木星。&lt;/p&gt; 
  &lt;p&gt;这个桥段大概是让我最觉得“感觉不太对”的地方了。氢和氧气混合爆燃，其本质上仍然是化学燃烧。如果说氧的聚变反应可以将氧的质量的万分之三转化为能量。那么氢和氧的化学燃烧过程，只可以将这些燃料质量的百亿分之一转化为能量。&lt;/p&gt; 
  &lt;p&gt;而地球上大气层里所有的氧气占地球总质量不过千万分之二。即使地球上所有的氧气都已经和木星混合，并且充分燃烧，其燃烧产生的能量完全用于加速地球，地球也只会获得微小的加速度。此外，我们很难期待发生在木星表面的爆炸冲击波有非常精确的指向性，恰好能将能量聚焦在远在数千公里之外的地球身上。乐观估计，也许只有百分之几的能量可以用于加速地球。这一点点的推力，是否恰好可以将地球推离木星的引力陷阱呢？在现实世界里，我持非常悲观的态度。但也许“无巧不成书”才是构成传奇的基础吧。&lt;/p&gt; 
  &lt;p&gt;&lt;b&gt;五、比邻星是否是合适的家园&lt;/b&gt;&lt;/p&gt; 
  &lt;p&gt;流浪地球的目的地是比邻星。比邻星是距离地球最近的恒星，但很难说它是一个理想的新家园。最大的问题在于：比邻星过于暗淡，只有太阳质量的十分之一，勉强达到核心发生核聚变的标准。这样的恒星会展现出很大的不稳定性，表现在高频率的恒星耀斑爆发。太阳也会有耀斑爆发，在很短的时间里向宇宙空间释放大量能量，并且伴以大量的物质抛射。在耀斑强烈的时候，地球上的无线电通讯会受到其干扰，但不会对人类生活造成太大的影响。但在比邻星轨道，这种耀斑爆发有可能造成灾难性后果。这是因为比邻星太过暗淡，地球如果要想充分接收比邻星的能量，让冰冻的海洋融化，需要非常靠近比邻星，其轨道距离只有目前日地距离的1/20。一旦耀斑爆发，地球因为距离更近，也将受到更大的影响。在2018年，科学家观察到了比邻星一次超级耀斑爆发，从地球上观察，比邻星在耀斑爆发时亮度比起平时增加了68倍。地球如果泊入这样的恒星轨道，在耀斑爆发时，地球生态圈可能受到毁灭性打击。&lt;/p&gt; 
  &lt;p&gt;另外，比邻星处于一个三合星系统。和比邻星相邻的两颗恒星倒是和太阳很类似，但是它们之间的距离非常近。如果地球进入任何一颗恒星的轨道，难免不受到另一颗恒星的引力影响，很难处于稳定状态。这样看来，比邻星也许只能作为流浪地球的一个中途补给站。地球可以在这里获得燃料补充，但无法将这里当做久居之地。&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;https://n.sinaimg.cn/tech/transform/749/w550h199/20190208/aQ0n-hsqyiwu2902815.jpg&quot; alt=&quot;　　图注：比邻星是离地球最近的恒星，一个三星系统，它也许并非理想家园（图中太阳和比邻星三星比例，从左到右为：太阳，半人马alpha-A，半人马Alphea-B， 比邻星）；图片来自网络&quot; data-original=&quot;https://n.sinaimg.cn/tech/transform/749/w550h199/20190208/aQ0n-hsqyiwu2902815.jpg&quot; style=&quot;display: block;&quot; /&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;比邻星是离地球最近的恒星，一个三星系统，它也许并非理想家园（图中太阳和比邻星三星比例，从左到右为：太阳，半人马alpha-A，半人马Alphea-B， 比邻星）；图片来自网络&lt;/p&gt; 
  &lt;p&gt;在太阳临近的5秒差距（大约16光年）内有52颗恒星，这些恒星都可以作为流浪地球最终的备选之地。例如，距离太阳12光年的Tau
 
Ceti也许就是一个不错的选择，其亮度大概是太阳的一半，而且看起来非常稳定。这颗恒星目前已经被发现拥有5颗行星，其中一颗甚至可能有适宜的温度，可以支持液态水存在。&lt;/p&gt; 
  &lt;p&gt;我真切地希望，在流浪地球的旅途中，联合政府不要忘记资助天文学家的工作，他们的研究一定会为地球最终家园的选择提供可靠的资料。&lt;/p&gt; 
  &lt;p&gt;文/李然 （国家天文台星云计划研究员）&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/100/entry/%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%94%E7%94%A8%E4%B8%AD%E7%AE%A1%E7%90%86%E5%AD%A6%E9%99%A2email</guid>
    <title>在客户端应用中管理学院Email</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/100/entry/%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%94%E7%94%A8%E4%B8%AD%E7%AE%A1%E7%90%86%E5%AD%A6%E9%99%A2email</link>
    <pubDate>Fri, 21 Sep 2018 13:40:36 +0800</pubDate>
    <category>指南</category>
    <category>email</category>
    <category>电子邮件</category>
    <category>网络服务</category>
<atom:summary type="html">如何在手机或桌面版的电子邮件应用中配置学院Email</atom:summary><description>&lt;p&gt;你可以通过网页方式访问&lt;a href=&quot;http://email.ywicc.edu.cn&quot; target=&quot;_blank&quot;&gt;学院电子邮件服务&lt;/a&gt;，也可以使用手机或桌面版的Email客户端来收发邮件，所需的设置参数如下：发信使用SMTP服务器smtp.ywicc.edu.cn（端口587），收信使用IMAP服务器imap.ywicc.edu.cn（端口143）或POP3服务器pop3.ywicc.edu.cn（端口110），登录用户名为邮箱地址，安全类型设置为“STARTTLS(接受所有证书)”，关于IMAP和POP3收信方式的区别可以参看这个&lt;a title=&quot;IMAP和POP3&quot; href=&quot;http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=28&amp;amp;&amp;amp;no=331&quot; target=&quot;_blank&quot;&gt;说明页面&lt;/a&gt;（推荐用IMAP）。&lt;/p&gt; 
  &lt;p&gt;以下示例在手机的电子邮件应用中添加学院电子邮箱账户——首先输入邮箱地址和密码，点击“手动设置”，账户类型选择“IMAP账户”：&amp;nbsp;&lt;/p&gt; 
  &lt;p&gt;&lt;img style=&quot;width: 100%;&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/3ef9a5e6-6e19-4985-b17d-a756ab2e915b&quot;&gt;&lt;/p&gt; 
  &lt;p&gt;收信使用IMAP服务器imap.ywicc.edu.cn，安全类型“TLS(接受全部证书)”，端口143；发信使用SMTP服务器smtp.ywicc.edu.cn，安全类型“TLS(接受全部证书)”，端口587：&lt;/p&gt; 
  &lt;p&gt;&lt;img style=&quot;width: 100%;&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/b6236385-2edc-49e2-8397-2df297998ae1&quot;&gt;&lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;p&gt;设置额外账户选项如检查频率，即可完成设置开始收发邮件：&lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;p&gt;&lt;img style=&quot;width: 100%;&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/5b79f9c7-8f75-48fe-ab29-db9b7cab6bca&quot;&gt;&lt;br&gt;&lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;以下示例是在Windows版电子邮件客户端Foxmail中添加学院电子邮箱账号的参考配置——邮箱类型选择POP3，收件加密方式为SSL，发件为StartTLS：&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/7e910f75-f4b3-47f2-b579-f7ae8a17f090&quot; alt=&quot;foxmail.png&quot; style=&quot;width: 100%;&quot;&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/%E7%BB%8F%E6%B5%8E%E5%AD%A6%E4%BA%BA-python-%E5%BC%80%E5%90%AF%E7%BC%96%E7%A8%8B%E5%A4%A7%E4%BC%97%E5%8C%96%E7%9A%84%E6%96%B0%E6%97%B6%E4%BB%A3</guid>
    <title>经济学人：Python 开启编程大众化的新时代</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/%E7%BB%8F%E6%B5%8E%E5%AD%A6%E4%BA%BA-python-%E5%BC%80%E5%90%AF%E7%BC%96%E7%A8%8B%E5%A4%A7%E4%BC%97%E5%8C%96%E7%9A%84%E6%96%B0%E6%97%B6%E4%BB%A3</link>
    <pubDate>Thu, 2 Aug 2018 21:14:06 +0800</pubDate>
    <category>综合</category>
    <category>python</category>
    <category>编程</category>
<atom:summary type="html">Python 创造者 Guido van Rossum 宣布退位是信息科技圈近期的重要事件，《经济学人》杂志也为此发表了一篇专题文章。</atom:summary><description>&lt;div&gt;Python 创造者 Guido van Rossum 宣布退位是信息科技圈近期的重要事件，《经济学人》杂志也为此发表了一篇专题文章，以下是我的翻译版……&lt;/div&gt; 
  &lt;div&gt; 
    &lt;h2&gt;Python 开启编程大众化的新时代&lt;/h2&gt; 
    &lt;p&gt;原文链接 &lt;a href=&quot;https://www.economist.com/science-and-technology/2018/07/19/python-has-brought-computer-programming-to-a-vast-new-audience&quot; target=&quot;_blank&quot;&gt;Python has brought computer programming to a vast new audience&lt;/a&gt;&lt;/p&gt; 
    &lt;p&gt;&lt;img src=&quot;https://www.economist.com/sites/default/files/imagecache/640-width/images/print-edition/20180721_STD001_0.jpg&quot; /&gt; &lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;1989年12月，一位荷兰计算机科学家 Guido van Rossum 决定利用圣诞假期进行一项计划——因为对其他编程语言的缺点感到不满，他想自己再创造一个。他的原则很简单：首先，它要流畅易读，每行语句意义完整，不是以花括号嵌套而是以强制空格缩进来确保结构清晰；其次，它要让用户能够自建功能模块并组成软件包，以便他人重复利用；第三，它还要有一个“简短、独特又略显神秘的”名字。最终，他以自己喜欢的英国喜剧组合 Monty Python 为其命名，并将软件包仓库称为“奶酪商店”。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;自他完成这个圣诞假期小发明至今已过去将近30年，Van Rossum 就如同电影《万世魔星》（Monty Python and the Life of Brian）中那个意外当上弥赛亚的角色一样，成为被众人所拥戴的科技时代英雄。“我当初完全没打算创造一个会被广泛应用的编程语言，”他解释道。但在最近一年里，美国人在 Google 上搜索 Python 的次数比搜索电视明星金·卡戴珊的次数还要多，这个数值自2010年以来已经翻了三倍，而其他编程语言的搜索频率都趋于平缓或是下降（见图表）。&lt;/p&gt; 
    &lt;p&gt;&lt;img src=&quot;https://www.economist.com/sites/default/files/imagecache/640-width/images/print-edition/20180721_STC872.png&quot; /&gt; &lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt;Python 语言不仅在专业开发者中越来越受欢迎——据知名的编程技术论坛 Stack Overflow 统计，有近40%的开发者已经在使用它，还有另外25%准备要使用它——另据已向4500万人提供编程语言教学的网站 Codecademy 统计，学习需求增长幅度最大的语言同样是 Python，许多过去对编程感到无从入手的人开始有机会初窥门径了。在被称为“Pythonistas”的狂热爱好者们共同努力下，加入“奶酪商店”的软件包已超过14.5万个，涵盖了从天文观测到游戏开发等等无数的领域。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;虽然支持者的热情令 Van Rossum 感到高兴，然而担任如此庞大开源项目的“终身仁慈独裁者”带来的压力也令他感到疲倦，他害怕自己变成一个偶像。“我为名声所累，” 他说，像《万世魔星》中的 Brian 那样想要赶走追随自己的崇拜者，“有时我感觉自己说的每句话都被当成了金科玉律。”所以他在7月12日宣布放弃决策权，让 Python 社区自行决定未来之路。&lt;/p&gt; 
    &lt;h3&gt;意外崛起的数据大师&lt;/h3&gt; 
  &lt;/div&gt; 
  &lt;div&gt;Python 并非完美无缺。其他一些语言或是有更高的性能，或是更适合特定的领域。C 和 C++ 是“底层开发”的不二之选，允许用户更灵活地控制计算机处理器内部的运行过程。Java 在构建庞大而复杂的企业级应用方面广受欢迎。JavaScript 则是开发 Web 浏览器端应用的首选语言。还有许多其他语言为了特定目的被创造出来。但是 Python 独有的杀手级特性——简洁自然的语法，便于学习和分享，从而积累起不计其数的第三方包——使它成为出色的通用编程语言。众多的使用者和广泛的使用领域突显了它的多才多艺——CIA 用它编写黑客工具，Pixar 用它创作动画电影，Google 用它爬取网页信息，Spotify 用它生成推荐歌单……&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;对于 Python 爱好者来说最具吸引力的是那些实现“人工智能”（AI）的软件包。使用者可以构建模拟大脑结构的神经网络，从海量数据中提炼出特定的模式。Van Rossum 称 Python 已成为 AI 研究者的首选语言，在这一领域开发出不计其数的第三方包。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;当然并非所有 Python 爱好者都有这样的雄心。Codecademy 的老板 Zach Sims 认为许多用户访问他的网站学习编程技能是为他们在传统上被视为“非技术性的”工作提供助力。例如营销人员可以编程构建统计模型来衡量促销活动的有效性。大学教师可以编程检查学生成绩分布情况。（甚至也包括《经济学人》的记者——他们在网上搜集数据通常也会使用 Python 编程来实现。）&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;对于长久以来一直依赖电子表格处理数据的从业者而言，Python 更是具有特殊价值。美国花旗银行（Citigroup）已经为实习分析师引入 Python 速成培训。据就业网站 eFinancialCareers 的报告，近三年来 Python 被职业技能清单提及的次数增长了四倍。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;对这些技能的渴求并非没有风险。投顾公司 Bain &amp;amp; Company 的合伙人 Cesar Brea 警告称，在他的行业中最可怕的事情就是“某人掌握了一种新工具，但并不清楚其内部原理”。如果没有适当的监督，一个胡乱摆弄 AI 库的新手可能做出完全错误的决策。波士顿投顾集团的合伙人 Bernd Ziegler 则声称，他的公司会将此类分析工作保留给专门的数据团队来进行。&lt;/p&gt; 
    &lt;h3&gt;Rossum 的万能机器人&lt;/h3&gt; 
  &lt;/div&gt; 
  &lt;div&gt;要解决技能不足的问题，必须要有更全面完整的编程教育。Python 在2014年就已成为美国大学最流行的入门编程语言，但其教学还仅限于科学/技术/工程/数学专业（STEM）。一个更激进的提议是更早地普及编程教学——从小学就开始！公益性编程教育机构 Code.org 的负责人 Hadi Partovi 指出已有40%的美国学校开设了编程课，在2013年还只有10%。美国10至12岁的孩子约有三分之二已在 Code.org 开通账号，美国90%的父母希望自己的孩子能学习计算机科学知识。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;所有人都在猜测 Python 的兴盛还会持续多久。有好几种编程语言也曾辉煌一时，后来却销声匿迹——当然并非“如尼尼微和推罗一般”彻底消亡，只是退居幕后。1960年代 Fortran 语言曾统治世界。Basic 和 Pascal 作为新手的入门语言也一度广受欢迎。Partovi 本人则将 JavaScript 作为 Code.org 的主打课程，因为它仍然是开发交互式网页的业界标准。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;没有哪一种编程语言能真正做到“万能”。保持专业化仍然很重要。但无论如何，在多年之前的那个圣诞节，Van Rossum 开创了值得纪念的事业。他不是弥赛亚，但他确实是一个非常聪明的人。&lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-3-6-5-%E7%89%88%E6%9C%AC%E5%8F%91%E5%B8%83</guid>
    <title>Python 3.6.5 版本发布</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-3-6-5-%E7%89%88%E6%9C%AC%E5%8F%91%E5%B8%83</link>
    <pubDate>Fri, 30 Mar 2018 17:09:16 +0800</pubDate>
    <category>综合</category>
    <category>python</category>
    <category>编程</category>
<atom:summary type="html">官方发布Python 3.6.5，Python版本号相关说明。</atom:summary><description>&lt;div&gt;Python 3.6.5 版本于2018年3月28日发布了，可以在官方发布页面下载 &lt;a href=&quot;https://www.python.org/downloads/release/python-365/&quot; target=&quot;_blank&quot;&gt;https://www.python.org/downloads/release/python-365/&lt;/a&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;小版本号“5”表示它是 Python 3.6 这个主要版本的第 5 个“维护版本”，安装后会取代之前的 3.6.4 版本。维护版本主要是对已发现的各种问题进行修正，并不增加新的语言特性——对于学习者而言，不更新也没有关系——虽然 3.6.5 这个版本号还是挺酷的……&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;Python 3.6.5 的详细修正记录可以查看以下页面 &lt;a href=&quot;https://docs.python.org/3.6/whatsnew/changelog.html#python-3-6-5-final&quot; target=&quot;_blank&quot;&gt;https://docs.python.org/3.6/whatsnew/changelog.html#python-3-6-5-final&lt;/a&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;Python 3.6 版本的后续发布日程参见以下页面 &lt;a href=&quot;http://www.python.org/dev/peps/pep-0494&quot; target=&quot;_blank&quot;&gt;http://www.python.org/dev/peps/pep-0494&lt;/a&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;下一个主要版本 Python 3.7 的发布计划参见以下页面 &lt;a href=&quot;https://www.python.org/dev/peps/pep-0537&quot; target=&quot;_blank&quot;&gt;https://www.python.org/dev/peps/pep-0537&lt;/a&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;如果你想要在程序中获取 Python 版本号，可以使用标准库 platform 模块的 python_version 函数：&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;pre&gt;In [1]: from platform import python_version

In [2]: python_version()
Out[2]: &apos;3.6.5&apos;&lt;/pre&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-function</guid>
    <title>编程入门07：Python函数定义</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-function</link>
    <pubDate>Tue, 20 Mar 2018 21:01:52 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">如何自定义函数，函数的参数传递。</atom:summary><description>你己经接触过很多的函数，现在让我们尝试定义自己的函数——这需要使用def关键字。函数定义好后即可调用，以下是在交互模式中定义并调用了一个非常简单的函数：&lt;br /&gt; 
  &lt;pre&gt;In [1]: def welcome():
   ...:     &quot;&quot;&quot;输出欢迎信息&quot;&quot;&quot;
   ...:     print(&quot;欢迎光临！&quot;)
   ...:     

In [2]: welcome()
欢迎光临！

In [3]: type(welcome)
Out[3]: function

In [4]: help(welcome)
Help on function welcome in module __main__:

welcome()
    输出欢迎信息


In [5]: 
&lt;/pre&gt; 
  &lt;p&gt;你可以发现函数并不神秘，只是把一段程序定义为一个对象以便重复使用而已——另外请注意用三个引号引起来的字符串，这样的字符串允许分行，当放在函数体最前面时则会成为这个函数的“文档字符串”（Docstring），help函数所显示的帮助信息就来自相应对象的文档字符串。至于函数返回值的功能则是使用return关键字实现的，如果函数没有return语句，则默认没有返回值。&lt;br /&gt;&lt;br /&gt;接下来让我们再用海龟绘图来练习复杂一些的函数：新建文件turtledraw.pyw，定义一个五角星函数star5p，并在之后的代码中调用这个函数：&lt;br /&gt; &lt;/p&gt; 
  &lt;pre&gt;&quot;&quot;&quot;自定义的海龟绘图函数集
&quot;&quot;&quot;
import turtle as tt


def star5p():
    &quot;&quot;&quot;画一颗五角星
    &quot;&quot;&quot;
    t = tt.Turtle()  # 生成一个单独的海龟对象
    t.hideturtle()
    t.speed(0)
    t.color(&quot;purple&quot;)
    t.penup()
    t.begin_fill()  # 启用填充区域
    cnt = 0
    while cnt &amp;lt; 5:
        t.forward(20)
        t.left(72)
        t.forward(20)
        t.right(144)
        cnt += 1
    t.end_fill()


tt.TurtleScreen._RUNNING = True  # 画一个五边形
tt.color(&quot;pink&quot;)
tt.penup()
tt.begin_fill()
tt.setpos(-25, -75)
tt.pendown()
cnt = 0
while cnt &amp;lt; 5:
    tt.forward(100)
    tt.left(72)
    cnt += 1
tt.end_fill()
star5p()  # 调用函数画一颗五角星
tt.done()
&lt;/pre&gt; 
  &lt;p&gt;函数在所属模块空间内分隔出一个子空间——例如star5p函数生成了一个单独的海龟对象变量t。这个变量t只在star5p函数中存在，离开这个函数就不能再使用了，而star5p函数内则可以使用在外面定义的海龟对象变量tt——变量存在并发挥作用的范围称为变量的“作用域”（Scope）。&lt;/p&gt; 
  &lt;p&gt;上面程序中定义的star5p函数很不灵活，不管调用多少次都只从原点开始画一颗同样的五角星，让我们来加以改进——定义函数时加上参数变量列表：x和y变量指定五角星的坐标位置；size变量指定五角星的边长，angle变量指定五角星的倾角，在函数调用时作为参数传入的值将赋给这些变量，参数变量作用域限于函数内部：&lt;br /&gt; &lt;/p&gt; 
  &lt;pre&gt;&quot;&quot;&quot;自定义的海龟绘图函数集
&quot;&quot;&quot;
import turtle as tt

def star5p(x, y, size=20, angle=0):
    &quot;&quot;&quot;在指定位置画一颗五角星
    &quot;&quot;&quot;
    t = tt.Turtle()  # 生成一个单独的海龟对象
    t.hideturtle()
    t.speed(0)
    t.color(&quot;white&quot;)
    t.penup()
    t.setpos(x, y)
    t.right(angle)
    t.begin_fill()  # 启用填充区域
    cnt = 0
    while cnt &amp;lt; 5:
        t.forward(size)
        t.left(72)
        t.forward(size)
        t.right(144)
        cnt += 1
    t.end_fill()


def test():
    &quot;&quot;&quot;测试绘图函数：随机画十颗五角星
    &quot;&quot;&quot;
    from random import randint
    tt.TurtleScreen._RUNNING = True
    tt.setup(width=720, height=480, startx=None, starty=None)
    tt.hideturtle()
    tt.speed(0)
    tt.bgcolor(&quot;purple&quot;)
    tt.penup()
    cnt = 0
    while cnt &amp;lt; 10:
        x = randint(-300, 300)
        y = randint(-200, 200)
        s = randint(10, 30)
        a = randint(0, 72)
        star5p(x, y, s, a)  # 带参数调用五角星函数
        cnt += 1
    tt.done()


if __name__ == &quot;__main__&quot;:  # 运行模块时调用测试绘图函数
    test()
&lt;/pre&gt; 
  &lt;p&gt;现在的star5p函数有4个参数，前两个参数在调用时是必须传入的，后两个参数在定义时赋了默认值，在调用时如果不传入就会使用默认值——如果只传入三个参数，则第三个参数必须使用“变量名=值”的形式例如“angle=10”以避免歧义。上面的程序还定义了一个test函数，实现随机绘制十颗五角星：&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/47ecf222-ca49-4835-82f2-5046a093c314&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/47ecf222-ca49-4835-82f2-5046a093c314&quot; alt=&quot;07_draw.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;程序文件turtledraw.pyw实际上就是一个自定义模块，可以使用import语句引入。模块在主名称空间中运行时__name__变量的取值是默认的&amp;quot;__main__&amp;quot;，被引入时__name__变量的取值则是模块名&amp;quot;turtledraw&amp;quot;，模块就可以据此判断自己是被运行还是被引入，从而决定是否执行test函数——推荐大家今后也都使用这样的模式，整个程序由独立的函数构成，并在最后调用一个作为入口的“主函数”。&lt;br /&gt; &lt;/p&gt; 
  &lt;pre&gt;In [1]: import turtledraw as td

In [2]: help(td)
Help on module turtledraw:

NAME
    turtledraw - 自定义的海龟绘图函数集

FUNCTIONS
    star5p(x, y, size=20, angle=0)
        在指定位置画一颗五角星
    
    test()
        测试绘图函数

FILE
    d:\test\pystudy\turtledraw.pyw



In [3]: td.__name__
Out[3]: &apos;turtledraw&apos;

In [4]: 
&lt;/pre&gt; 
  &lt;h3&gt;编程小提示：程序项目&lt;/h3&gt; 
  &lt;p&gt;任何IDE都有“工程”或“项目”（Project）的概念，实际上就是建立专门的文件夹来组织相关的程序文件。例如Spyder中创建项目是在主菜单中选择Projects &amp;gt; New Project...，你可以创建一个名为pyStudy的项目，把你编写的所有程序文件都放进去。以后Spyder启动时会自动打开最近的项目并将“工作目录”设为项目所在的文件夹，而不再使用默认的用户文件夹。&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/b40d3941-561f-424d-862d-62e370310197&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/b40d3941-561f-424d-862d-62e370310197&quot; alt=&quot;07_project.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-turtle</guid>
    <title>编程入门06：Python海龟绘图</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-turtle</link>
    <pubDate>Thu, 15 Mar 2018 09:23:47 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">使用标准库的turtle模块绘制图形。</atom:summary><description>现在让我们开始尝试“图形用户界面”（GUI）程序的编写——Python标准库中有个turtle模块，可以生成标准的应用程序窗口进行图形绘制。turtle的绘图方式非常简单直观——想象有一只尾巴上蘸着颜料的小海龟在电脑屏幕上爬行，随着它的移动就能画出线条来，turtle程序窗口的绘图区域使用直角坐标系，海龟的初始位置在窗口绘图区正中的(0,0)点，头朝x轴的正方向。你可以先在交互模式中引入模块并练习其中的函数：&lt;br /&gt; 
  &lt;pre&gt;In [1]: import turtle as tt

In [2]: tt.setup()  # 设置画布，这将立即显示绘图窗口

In [3]: tt.forward(100)  # 前进100像素，这将画出一条横向线段

In [4]: tt.right(90)  # 右转90度，这将改变海龟的朝向

In [5]: tt.forward(100)  # 这将画出一条纵向线段

In [6]: tt.goto(0,0)  # 前往原点，这将完成一个等腰直角三角形

In [7]: tt.bye()  # 关闭绘图窗口&lt;/pre&gt;&lt;br /&gt;
利用tutle模块能够更生动地学习流程控制概念，以下程序可以画出一个五角星——画一条线段并右转144度，如此重复五次：&lt;br /&gt; 
  &lt;pre&gt;import turtle as tt
tt.TurtleScreen._RUNNING = True  # 启动绘图，在IDE中运行加这句可避免报错
cnt = 0
while cnt &amp;lt; 5:
    tt.forward(200)
    tt.right(144)
    cnt += 1
tt.done()  # 结束绘图，这将不会关闭窗口
&lt;/pre&gt;&lt;br /&gt;
以下程序连续画了500条线段，每一条线段的颜色都随机，每一条线段都比前一条长1个像素，每画一条线段之后都向右转91度——于是我们得到了一个繁复的彩色螺旋图案：&lt;br /&gt; 
  &lt;pre&gt;import turtle as tt
from random import randint
tt.TurtleScreen._RUNNING = True
tt.speed(0)  # 绘图速度为最快
tt.bgcolor(&quot;black&quot;)  # 背景色为黑色
tt.setpos(-25, 25)  # 改变初始位置，这可以让图案居中
tt.colormode(255)  # 颜色模式为真彩色
cnt = 0
while cnt &amp;lt; 500:
    r = randint(0, 255)
    g = randint(0, 255)
    b = randint(0, 255)
    tt.pencolor(r, g, b)  # 画笔颜色每次随机
    tt.forward(50 + cnt)
    tt.right(91)
    cnt += 1
tt.done()&lt;/pre&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/2df66c07-23ed-4c5f-9b5c-f2809f6bfcef&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/2df66c07-23ed-4c5f-9b5c-f2809f6bfcef&quot; alt=&quot;06_turtle.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;/p&gt; 
  &lt;p&gt;接下来让我们灵活运用turtle模块的交互功能，把上次编写的命令行式猜数游戏改造成图形界面的——请把程序文件命名为guessnum.pyw，这样当你在操作系统中直接双击时就不会再打开黑色的命令行窗口。获取用户输入可以使用对话框，反馈信息则可以直接显示在窗口绘图区域中：&lt;br /&gt; &lt;/p&gt; 
  &lt;pre&gt;from random import randint
import turtle as tt

tt.TurtleScreen._RUNNING = True
tt.setup(width=800, height=450, startx=None, starty=None)  # 设置自定义的窗口大小
tt.hideturtle()  # 隐藏画笔图标
tt.color(&quot;blue&quot;)  # 画笔颜色为蓝色
tt.penup()  # 抬起画笔，移动时不画线
tt.setpos(-300, 0)  # 设置初始位置
myfont = (&quot;黑体&quot;, 16, &quot;normal&quot;)  # 定义字体

target = randint(1, 100)
tt.write(&quot;我想了一个1到100之间的整数，请你猜猜看吧：&quot;, font=myfont)  # 输出文本
guess = 0
answer = &quot;&quot;
while guess != target:
    # 使用对话框获取用户输入
    guess = tt.simpledialog.askinteger(&quot;猜数游戏&quot;, &quot;请输入一个整数：&quot;)
    if guess == target:
        answer = &quot;你猜对了！游戏结束。&quot;
    elif not guess:  # 用户没有输入数字则中断循环
        tt.clear()  # 清空画布以便输出新文本
        tt.write(&quot;你放弃了，游戏结束。&quot;, font=myfont)
        break
    elif guess &amp;gt; target:
        answer = &quot;你猜大了，再猜一次：&quot;
    else:
        answer = &quot;你猜小了，再猜一次：&quot;
    tt.clear()
    tt.write(answer, font=myfont)
tt.done()&lt;/pre&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/2c598d38-c0d8-46fe-a3ff-3004c1d23655&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/2c598d38-c0d8-46fe-a3ff-3004c1d23655&quot; alt=&quot;06_turtle_guess.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;/p&gt; 
  &lt;p&gt;海龟绘图很有趣，你可以查看官方在线文档以了解turtle模块的更多细节 &lt;a href=&quot;https://docs.python.org/zh-cn/3/library/turtle.html&quot; target=&quot;_blank&quot;&gt;https://docs.python.org/zh-cn/3/library/turtle.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;h3&gt;编程小提示：模块的运行&lt;/h3&gt; 
  &lt;p&gt;Python标准库中还有一个turtledemo模块，这是turtle绘图功能演示程序，输入以下系统命令即可运行turtledemo模块：&lt;br /&gt; &lt;/p&gt; 
  &lt;pre&gt;python -m turtledemo&lt;/pre&gt;&lt;br /&gt;只要模块中定义了可运行对象（实现功能或用于测试），模块就是可运行的。实际上，你也可以输入以下系统命令来运行turtle模块：&lt;br /&gt;&lt;br /&gt; 
  &lt;pre&gt;python -m turtle&lt;/pre&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-flow</guid>
    <title>编程入门05：Python流程控制</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-flow</link>
    <pubDate>Fri, 9 Mar 2018 12:45:49 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">Python程序使用选择和循环等特殊流程结构。</atom:summary><description>&lt;div&gt;编程时可以使用三种流程结构：按照先后顺序执行全部指令，是最普通的“顺序结构”；根据特定条件选择执行部分指令，称为“选择结构”；根据特定条件循环执行部分指令，叫做“循环结构”——流程控制语句就是用于判断条件并实现特殊流程结构的语句，而条件的判断需要进行逻辑运算或者叫“布尔运算”（得名于乔治·布尔，十九世纪英国数学家，数理逻辑学的创立者），这种运算的结果只有两种：“真”和“假”，Python有专门的关键词来表示这两个值：True和False，属于布尔类型（bool）。返回值为布尔类型的表达式就称为布尔表达式。布尔表达式中可以使用比较运算符：等于（==）、不等于（!=）、大于（&amp;gt;）、小于（&amp;lt;）、大于等于（&amp;gt;=）和小于等于（&amp;lt;=）。&lt;/div&gt; 
  &lt;pre&gt;In [1]: 1+1==2
Out[1]: True

In [2]: 1+1&amp;gt;2
Out[2]: False

In [3]: &quot;hello&quot;==&quot;Hello&quot;&amp;nbsp; # 字符串比较是基于字符的编码值
Out[3]: False

In [4]: &quot;hello&quot;&amp;gt;&quot;Hello&quot;&amp;nbsp; # 小写字母排在大写字母后面，所以编码值更大
Out[4]: True

In [5]: &quot;猫&quot;&amp;gt;&quot;狗&quot;&amp;nbsp; # 使用ord函数可以查看字符的编码值
Out[5]: True&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;布尔表达式中还可以使用布尔运算符：“与”（and）“或”（or）和“非”（not），以及成员运算符“在……之内”（in）——这两种运算都非常简单直观（如果你想知道更多细节，就输入help(&amp;quot;and&amp;quot;)、help(&amp;quot;in&amp;quot;)）：&lt;/div&gt; 
  &lt;pre&gt;In [6]: 1==1 and 2==2
Out[6]: True

In [7]: 1==1 and 2&amp;lt;1
Out[7]: False

In [8]: 1==1 or 2&amp;lt;1
Out[8]: True

In [9]: not 1==1
Out[9]: False

In [10]: &quot;o&quot; in &quot;Hello&quot;
Out[10]: True

In [11]: &quot;h&quot; in &quot;Hello&quot;
Out[11]: False

In [12]: &quot;h&quot; not in &quot;Hello&quot;
Out[12]: True&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;此外，True和False其实就是1和0，如果你输入True+True，会发现返回值是2……深入学习下去你就会知道，任何对象其实都可以拿来判断真假……&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;了解布尔运算之后，我们来编写一个包含条件判断和特殊流程结构的程序：猜数游戏——电脑随机生成一个1到100之间的整数，然后根据用户的猜测输出反馈信息。&lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;新建文件并保存为 guess_number.py，开始编写程序：用random模块的randint函数随机生成整数；用input函数接收用户输入字符串并用int函数转成整数；然后进行条件判断——“如果”猜对就输出“猜对了”，if语句就是用来实现这种选择结构的；if语句中还可以加上else关键词实现所谓双分支选择结构——“如果”猜对就输出“猜对了”，“否则”就输出“猜错了”；你还可以再加上elif关键词——“如果”猜对就输出“猜对了”，“否则如果”猜大了就输出“猜大了”，“否则”就输出“猜小了”——你可以使用多个elif来实现更多分支，每个分支都可以包含多行子语句。程序写出来是这样的：&lt;/div&gt; 
  &lt;pre&gt;from random import randint
target = randint(1, 100)
answer = &quot;&quot;
guess = int(input(&quot;我想了一个1到100之间的整数，请你猜猜看吧：&quot;))
if guess == target:
    answer = &quot;你猜对了！&quot;
elif guess &amp;gt; target:
    answer = &quot;你猜大了。&quot;
else:
    answer = &quot;你猜小了。&quot;
print(answer)&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;这个程序等你输入一个数字并输出反馈后就立即结束了，接下来让我们加以改进：允许用户多次输入直到猜对为止，while语句就是用来实现这种循环结构的——“只要”还没猜对，就接收用户输入并输出反馈。在input语句之前添加while语句，然后选定之后的所有语句按Tab键缩进将它们变成while语句的子语句，每次判断条件成立都会执行一遍这些语句（想要了解while语句的更多细节，当然还是用老办法：help(&amp;quot;while&amp;quot;)）。改进后的程序是这样的：&lt;/div&gt; 
  &lt;pre&gt;from random import randint
target = randint(1, 100)
print(&quot;我想了一个1到100之间的整数，请你猜猜看吧：&quot;, end=&quot;&quot;)
guess = 0
answer = &quot;&quot;
while guess != target:
    guess = int(input())
    if guess == target:
        answer = &quot;你猜对了！游戏结束。&quot;
    elif guess &amp;gt; target:
        answer = &quot;你猜大了，再猜一次：&quot;
    else:
        answer = &quot;你猜小了，再猜一次：&quot;
    print(answer, end=&quot;&quot;)&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;这个程序就能实现猜测任意次数直到猜对为止了。&lt;/p&gt; 
    &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/f9d21684-0b13-4901-83a9-03d131c3f41e&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/f9d21684-0b13-4901-83a9-03d131c3f41e&quot; alt=&quot;05_guess.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
    &lt;p&gt; &lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt;你可能会注意到Spyder右上方面板中有一个变量浏览器选项卡，其中会显示程序中变量当前的取值。如果在左边编辑器面板特定语句的行号上双击添加一个“中断点”（Breakpoint）然后选择“调试”（Debug），程序将会开始运行并在这一行暂停，这时你就可以“单步”（Step）执行，详细查看语句的整个执行流程——当程序运行结果不符合预期时，开发者就会进行这种调试工作来寻找其中的原因。&lt;/div&gt; 
  &lt;div&gt; 
    &lt;h3&gt;编程小提示：代码格式规范&lt;/h3&gt; 
    &lt;p&gt;“Python增强建议”（PEP）是面向开发者的一系列官方指导文档，其中的PEP8 &lt;a href=&quot;https://www.python.org/dev/peps/pep-0008/&quot; target=&quot;_blank&quot;&gt;https://www.python.org/dev/peps/pep-0008/&lt;/a&gt; 描述了Python程序的代码格式规范（每级缩进应为四个空格，逗号之后应加空格，变量名应使用小写字母等等），遵循这个规范可以使你写的代码更专业、更美观、可读性也更强。正如PEP20即“Python之禅”所言：“Readability counts”&amp;nbsp; &lt;a href=&quot;https://www.python.org/dev/peps/pep-0020/&quot; target=&quot;_blank&quot;&gt;https://www.python.org/dev/peps/pep-0020/&lt;/a&gt;&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt;所有这些规范其实并不需要强记——你可以让Spyder自动检查代码格式：在主菜单中点击Tools &amp;gt; Preferences &amp;gt; Editor &amp;gt; Code Introspection/Analysis，勾选其中的Real-time code style analysis并确定。这时打开的程序文件中如果存在不规范的格式，语句左侧就会出现黄色感叹号图标，你可以移动鼠标到图标上查看浮动提示，遵照提示修改就可以得到完全符合PEP8规范的程序代码了。&lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-package</guid>
    <title>编程入门04：Python第三方包</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-package</link>
    <pubDate>Mon, 5 Mar 2018 08:39:10 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">Python第三方包和开源软件生态系统。</atom:summary><description>&lt;div&gt; 
    &lt;div&gt;从概念上说，Python中的“包”（Package）是模块的容器，其中可以包含一个或多个相关的模块。世界各地开发者基于Python编写的各种软件也是以一种标准的包形式进行分享的，称为“第三方包”。官方专门建立了“Python包索引”（PyPI） &lt;a href=&quot;https://pypi.python.org/&quot; target=&quot;_blank&quot;&gt;https://pypi.python.org/&lt;/a&gt; 用来统一发布第三方包，相当于是Python软件的免费应用市场。于是在Python标准库之上又积累起浩如烟海的“第三方库”，形成了充满活力的开源软件生态系统。如果想利用Python进行真正的编程工作，你应当根据不同的任务选择安装适合的第三方包。&lt;/div&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;官方推荐使用pip命令来管理Python包，pip其实也是一个软件包，Python 3.4以上已经附带，不必再单独安装。pip包的发布页 &lt;a href=&quot;https://pypi.python.org/pypi/pip&quot; target=&quot;_blank&quot;&gt;https://pypi.python.org/pypi/pip&lt;/a&gt;&lt;/div&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;有些Python包的体积很大，从位于境外的官方源下载需要较长时间。你可以设置从中国大陆的镜像源（例如阿里云）下载软件包，这样速度会快上许多。如果你用的操作系统是Win7-10，请在资源管理器地址栏输入C:\ProgramData打开这个隐藏目录，在其中创建pip文件夹，再在其中创建pip.ini文件并复制粘贴以下内容，即配置好了镜像源：&lt;/div&gt; 
    &lt;pre&gt;[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[list]
format = columns&lt;/pre&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;以上配置还指定了包列表的显示格式，pip详细配置说明可以在文档中查看 &lt;a href=&quot;https://pip.pypa.io/en/stable/user_guide/#configuration&quot; target=&quot;_blank&quot;&gt;https://pip.pypa.io/en/stable/user_guide/#configuration&lt;/a&gt;&lt;/div&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;现在让我们打开命令提示符窗口（注意打开方式：右击命令提示符图标，选择以管理员身份运行，否则安装包时可能提示没有足够权限）输入以下pip命令查看已安装的包名称及版本：&lt;/div&gt; 
    &lt;pre&gt;pip list&lt;/pre&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;你可以看到默认已有两个包：pip和setuptools，它们是用来安装和管理其他第三方包的。&lt;/div&gt; 
    &lt;div&gt; 
      &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/ccbaaa42-079e-44c0-87ef-8676921759c7&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/ccbaaa42-079e-44c0-87ef-8676921759c7&quot; alt=&quot;04_pip.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
      &lt;p&gt;接下来再尝试输入以下pip命令，安装之前提到过的Spyder：&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/ccbaaa42-079e-44c0-87ef-8676921759c7&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;pre&gt;pip install spyder&lt;/pre&gt; 
    &lt;div&gt; 
      &lt;p&gt;包的下载和安装需要花费一段时间，当提示完成后你可以再次查看已安装包，会发现实际上增加了几十个包——因为Spyder需要其他几十个第三方包的支持，pip会自动下载并安装所有需要的包。&lt;/p&gt; 
      &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/d7879c05-0b84-410e-8b85-3994e43dd571&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/d7879c05-0b84-410e-8b85-3994e43dd571&quot; alt=&quot;04_pip_install.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt; 
      &lt;p&gt;现在你就可以输入spyder3命令启动Spyder了，启动时请选择允许访问网络（Spyder会联网检查版本更新），这个命令对应的可执行文件是Python安装目录下Scripts\spyder3.exe，你可以将其发送到桌面快捷方式，点击桌面图标即可启动。今后我们将会抛弃简陋的IDLE，改用Spyder这个很好很强大的开源IDE继续学习进程。&lt;/p&gt; 
      &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/40600786-c83a-43ac-be3c-03ccd6ed5d57&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/40600786-c83a-43ac-be3c-03ccd6ed5d57&quot; alt=&quot;04_spyder.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
    &lt;/div&gt; 
    &lt;p&gt;如果Spyder发布了新版本，使用加-U参数的pip install命令即可安装新版——不过镜像源同步新版本需要一些时间，如果你想第一时间安装新版，可以再用-i参数临时指定从官方源下载：&lt;/p&gt; 
    &lt;pre&gt;pip install -U spyder -i https://pypi.python.org/simple&lt;/pre&gt; 
    &lt;div&gt; 
      &lt;p&gt;以上演示了pip命令的基本操作，你可以随时使用这个工具来获取Python生态圈中数以万计的第三方包，令编程像搭积木一样方便快捷。&lt;/p&gt;
    &lt;/div&gt; 
    &lt;div&gt; 
      &lt;h3&gt;编程小提示：IPython&lt;/h3&gt; 
      &lt;p&gt;你可能已注意到Spyder默认布局右下角的交互模式面板（使用主工具栏的面板最大化按钮可以让某个面板占满整个工作区），其中的提示符和官方版的并不一样，因为Spyder集成了一个提供增强版交互模式的第三方包——IPython。你可以输入“?”来查看IPython的帮助信息（或是在“?”之后再输入特定变量名查看具体帮助信息），可以按上下方向键切换输入过的命令，还可以在任何时候按Tab键启用代码自动补全并根据输入更新代码提示，操作比IDLE省力很多。&lt;/p&gt; 
      &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/07d5d1d0-b4a8-4e18-bdc1-54bc6098d9f9&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/07d5d1d0-b4a8-4e18-bdc1-54bc6098d9f9&quot; alt=&quot;04_spyder_ipython.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div&gt;IPython还提供了一些“魔法”命令，如清除屏幕内容命令cls、重置名称空间命令reset等都很好用。&lt;/div&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;此外你只要先输入一个“!”，就可以直接运行任何可执行程序例如pip，不必再打开操作系统的命令提示符窗口了。&lt;/div&gt; 
    &lt;pre&gt;In [3]: !pip list
Package                  Version  
------------------------ ---------
alabaster                0.7.10   
astroid                  1.6.1    
Babel                    2.5.3    
bleach                   2.1.2    
certifi                  2018.1.18
chardet                  3.0.4    
cloudpickle              0.5.2    
colorama                 0.3.9    
decorator                4.2.1    
docutils                 0.14     
entrypoints              0.2.3    
html5lib                 1.0.1    
idna                     2.6      
imagesize                1.0.0    
ipykernel                4.8.2    
ipython                  6.2.1    
ipython-genutils         0.2.0    
isort                    4.3.4    
jedi                     0.11.1   
Jinja2                   2.10     
jsonschema               2.6.0    
jupyter-client           5.2.2    
jupyter-core             4.4.0    
lazy-object-proxy        1.3.1    
MarkupSafe               1.0      
mccabe                   0.6.1    
mistune                  0.8.3    
nbconvert                5.3.1    
nbformat                 4.4.0    
numpydoc                 0.7.0    
packaging                17.1     
pandocfilters            1.4.2    
parso                    0.1.1    
pickleshare              0.7.4    
pip                      9.0.1    
prompt-toolkit           1.0.15   
psutil                   5.4.3    
pycodestyle              2.3.1    
pyflakes                 1.6.0    
Pygments                 2.2.0    
pylint                   1.8.2    
pyparsing                2.2.0    
PyQt5                    5.9.2    
python-dateutil          2.6.1    
pytz                     2018.3   
pyzmq                    17.0.0   
QtAwesome                0.4.4    
qtconsole                4.3.1    
QtPy                     1.3.1    
requests                 2.18.4   
rope                     0.10.7   
setuptools               28.8.0   
simplegeneric            0.8.1    
sip                      4.19.8   
six                      1.11.0   
snowballstemmer          1.2.1    
Sphinx                   1.7.1    
sphinxcontrib-websupport 1.0.1    
spyder                   3.2.7    
testpath                 0.3.1    
tornado                  4.5.3    
traitlets                4.3.2    
urllib3                  1.22     
wcwidth                  0.1.7    
webencodings             0.5.1    
wrapt                    1.10.11  

In [4]: 
&lt;/pre&gt; 
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
    &lt;div&gt;想要详细了解IPython的增强功能，请查看在线文档 &lt;a href=&quot;http://ipython.readthedocs.io/en/stable/&quot; target=&quot;_blank&quot;&gt;http://ipython.readthedocs.io/en/stable/&lt;/a&gt;&lt;/div&gt; 
  &lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-module</guid>
    <title>编程入门03：Python模块与库</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-module</link>
    <pubDate>Sun, 25 Feb 2018 19:32:29 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">Python中模块与库的概念说明。</atom:summary><description>&lt;p&gt;
现在我们已经用过id()、input()、print()等多个函数，这些都是默认可用的对象。Python官方还提供了更多的可重用对象，它们分门别类地放在不同的“模块”（Module）之中，你可以在需要的时候“引入”（Import）特定的模块。引入模块之后，默认的主“名称空间”（Namespace）中就会增加指向模块对象的变量，可以使用“模块变量.成员变量”的形式对模块中的对象进行“引用”（Reference）——“.”称为引用运算符，可以读作“的”。&lt;/p&gt; 
  &lt;p&gt;现在我们尝试引入数学模块math，以使用其中的数学工具：&lt;/p&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; dir()  # dir函数查看主名称空间中的变量列表，默认已存在7个变量
[&apos;__annotations__&apos;, &apos;__builtins__&apos;, &apos;__doc__&apos;, &apos;__loader__&apos;, &apos;__name__&apos;, &apos;__package__&apos;, &apos;__spec__&apos;]
&amp;gt;&amp;gt;&amp;gt; import math  # 引入math模块，也可以同时引入多个模块（用逗号分隔）
&amp;gt;&amp;gt;&amp;gt; dir()  # 主名称空间中增加了math变量
[&apos;__annotations__&apos;, &apos;__builtins__&apos;, &apos;__doc__&apos;, &apos;__loader__&apos;, &apos;__name__&apos;, &apos;__package__&apos;, &apos;__spec__&apos;, &apos;math&apos;]
&amp;gt;&amp;gt;&amp;gt; math  # math变量指向math模块
&amp;lt;module &apos;math&apos; (built-in)&amp;gt;
&amp;gt;&amp;gt;&amp;gt; math.sqrt(4)  # 平方根函数
2.0
&amp;gt;&amp;gt;&amp;gt; math.exp(2)  # 自然常数幂函数
7.38905609893065
&amp;gt;&amp;gt;&amp;gt; math.pi  # 圆周率常数
3.141592653589793
&amp;gt;&amp;gt;&amp;gt; math.e  # 自然常数
2.718281828459045
&amp;gt;&amp;gt;&amp;gt; dir(math)  # dir函数查看math模块的成员
[&apos;__doc__&apos;, &apos;__loader__&apos;, &apos;__name__&apos;, &apos;__package__&apos;, &apos;__spec__&apos;, &apos;acos&apos;, &apos;acosh&apos;, &apos;asin&apos;, &apos;asinh&apos;, &apos;atan&apos;, &apos;atan2&apos;, &apos;atanh&apos;, &apos;ceil&apos;, &apos;copysign&apos;, &apos;cos&apos;, &apos;cosh&apos;, &apos;degrees&apos;, &apos;e&apos;, &apos;erf&apos;, &apos;erfc&apos;, &apos;exp&apos;, &apos;expm1&apos;, &apos;fabs&apos;, &apos;factorial&apos;, &apos;floor&apos;, &apos;fmod&apos;, &apos;frexp&apos;, &apos;fsum&apos;, &apos;gamma&apos;, &apos;gcd&apos;, &apos;hypot&apos;, &apos;inf&apos;, &apos;isclose&apos;, &apos;isfinite&apos;, &apos;isinf&apos;, &apos;isnan&apos;, &apos;ldexp&apos;, &apos;lgamma&apos;, &apos;log&apos;, &apos;log10&apos;, &apos;log1p&apos;, &apos;log2&apos;, &apos;modf&apos;, &apos;nan&apos;, &apos;pi&apos;, &apos;pow&apos;, &apos;radians&apos;, &apos;sin&apos;, &apos;sinh&apos;, &apos;sqrt&apos;, &apos;tan&apos;, &apos;tanh&apos;, &apos;tau&apos;, &apos;trunc&apos;]
&lt;/pre&gt; 
  &lt;p&gt;每个模块都拥有自己的名称空间，这样变量名只需在本名称空间中不重复即可。用模块名称作为dir函数的参数，就可以查看模块名称空间中的变量列表。如果想要知道每个函数如何使用，则可以使用help函数：&lt;/p&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; help(math.exp)
Help on built-in function exp in module math:

exp(...)
    exp(x)
    
    Return e raised to the power of x.
&lt;/pre&gt; 
  &lt;p&gt;接下来尝试引入用于子进程管理的模块subprocess，这次增加了as关键词，可以指定变量名称而不使用默认名称：&lt;/p&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import subprocess as sp  # 引入subprocess模块，自定义变量名sp（模块名太长引用起来不方便）
&amp;gt;&amp;gt;&amp;gt; sp.call(&quot;cmd&quot;)  # call函数调用命令提示符程序cmd.exe（可以调用任何可执行程序）
&lt;/pre&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/42e9add5-ffa0-4822-9b0f-e5a16343ffc2&quot;&gt;&lt;img alt=&quot;python03_sp.png&quot; src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/42e9add5-ffa0-4822-9b0f-e5a16343ffc2&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;再来尝试用于生成随机数的模块random，这次再换一种写法——直接将其中的某个变量引入主名称空间（也可以同时引入用逗号分隔的多个变量）：&lt;/p&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; from random import randint  # 从random模块引入randint方法
&amp;gt;&amp;gt;&amp;gt; help(randint)  # 查看randint的说明：随机返回指定开区间内的整数
Help on method randint in module random:

randint(a, b) method of random.Random instance
    Return random integer in range [a, b], including both end points.

&amp;gt;&amp;gt;&amp;gt; randint(1,6)  # 随机生成1到6之间的整数，即模拟掷骰子
5
&amp;gt;&amp;gt;&amp;gt; randint(1,6)
2
&lt;/pre&gt; 
  &lt;p&gt;这样引入的变量就能象input、print那样直接使用了，如果写成“from random import *”则会将模块中的所有成员引入主名称空间，不过实际编程中不建议这样做。&amp;nbsp;&lt;/p&gt; 
  &lt;p&gt;模块的集合被称为“库”（Library），Python官方提供的所有模块共同组成了庞大的“Python标准库”。在IDLE主菜单中点击 Help &amp;gt; Python Docs &amp;gt; The Python Standard Library 查看Python标准库的详细说明，官网也提供了在线版本 &lt;a href=&quot;https://docs.python.org/3/library/index.html&quot; target=&quot;_blank&quot;&gt;https://docs.python.org/3/library/index.html&lt;/a&gt;&amp;nbsp;你可以先通读该页面建立起对Python标准库的大致印象，今后有需要时就能知道可以引入什么模块，再用dir函数配合help函数查看具体用法。&lt;/p&gt; 
  &lt;p&gt;你可能注意到了主名称空间默认存在的7个变量中有一个“__builtins__”，它指向一个名为builtins的模块，只要你dir一下就会找到input、print等等熟悉的名字——这些函数之所以默认可用，就是因为Python解释器自动引入了builtins这个模块：&lt;/p&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; __builtins__
&amp;lt;module &apos;builtins&apos; (built-in)&amp;gt;
&amp;gt;&amp;gt;&amp;gt; import builtins
&amp;gt;&amp;gt;&amp;gt; id(__builtins__)
2723238745656
&amp;gt;&amp;gt;&amp;gt; id(builtins)
2723238745656
&lt;/pre&gt; 
  &lt;h3&gt;编程小提示：Python之禅&lt;/h3&gt; 
  &lt;p&gt;Python标准库中有一个小彩蛋，只要你引入this这个模块，就能看到一段“Python之禅”，这是一位Python核心开发者对于程序设计的心得感悟，文笔饶有趣味，让我们在学习Python的过程中慢慢体会其中蕴含的丰富哲理吧……&lt;/p&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import this
The Zen of Python, by Tim Peters
蟒宗之禅语，提姆彼得斯（中文是我加的，参考了几种网上的译文）

Beautiful is better than ugly.
优美胜于丑陋
Explicit is better than implicit.
明白胜于晦暗
Simple is better than complex.
简洁胜于繁复
Complex is better than complicated.
繁复胜于艰深
Flat is better than nested.
扁平胜于嵌套
Sparse is better than dense.
松散胜于聚集
Readability counts.
代码确保易读
Special cases aren&apos;t special enough to break the rules.
规则拒绝特例
Although practicality beats purity.
实用不求纯净
Errors should never pass silently.
错误不可放过
Unless explicitly silenced.
除非明确理由
In the face of ambiguity, refuse the temptation to guess.
模棱两可之间，不要随意猜测
There should be one-- and preferably only one --obvious way to do it.
必有唯一选择，明显胜过其余
Although that way may not be obvious at first unless you&apos;re Dutch.
起初无法分辨，只因你非大神
Now is better than never.
尝试好过放弃
Although never is often better than *right* now.
但须谋定而动
If the implementation is hard to explain, it&apos;s a bad idea.
实现难以解释，定是糟糕方案
If the implementation is easy to explain, it may be a good idea.
实现易于解释，或为良好方案
Namespaces are one honking great idea -- let&apos;s do more of those!
名称空间极好，诸君多加使用！&lt;/pre&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-basic</guid>
    <title>编程入门02：Python基础语法</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-basic</link>
    <pubDate>Tue, 20 Feb 2018 08:07:41 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">使用交互模式学习Python的基本语法。</atom:summary><description>&lt;div&gt;现在让我们从基础概念开始逐步探索Python的语法，编程语言包含多种指令，其中最基本的是“表达式”（Expression），表达式有特定的“值”（Value），例如：1就是一个最简单的表达式，它的值就是1，当你在交互模式下输入1，计算机会返回这个表达式的值1。使用“运算符”（Operator）可以将多个单一表达式组成复合表达式，例如：1+1，Python中的数学运算符除了加减乘除（+-*/）外还有整除（//）取余（%）和乘方（**），运算顺序遵循数学规则，括号可以改变运算顺序，但注意一律使用小括号。通过这样的层层组合，你可以输入任意数学运算式所对应的表达式，计算机总是会自动计算并返回单一的值。&lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/0efe0a69-2429-4400-a04b-2fcd0d96f9e2&quot;&gt;&lt;img alt=&quot;python02_expression.png&quot; src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/0efe0a69-2429-4400-a04b-2fcd0d96f9e2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt; 
  &lt;/div&gt; 
  &lt;div&gt;这个单一的值被称为“物件”或“对象”（Object），对象是一个非常关键的概念，你很快就会发现在Python中“一切皆对象”。每个对象都存在于计算机的内存空间，拥有唯一的编号和确定的类型，你可以用id(对象)来查看它的编号（所在的内存地址），用type(对象)来查看它的类型（所属的“类”名称）：&lt;/div&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; id(1)
1756786144
&amp;gt;&amp;gt;&amp;gt; id(5%2)
1756786144
&amp;gt;&amp;gt;&amp;gt; id(2)
1756786176
&amp;gt;&amp;gt;&amp;gt; type(1)
&amp;lt;class &apos;int&apos;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; type(2)
&amp;lt;class &apos;int&apos;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; id(1.0)
2705425373944
&amp;gt;&amp;gt;&amp;gt; type(1.0)
&amp;lt;class &apos;float&apos;&amp;gt;&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;你可以看到1是整数类型（int），带有小数点的1.0则是浮点类型（float），浮点类型用于表示实数。其实我们还接触过字符串类型（str），在任意长度的字符序列前后加上引号就定义了一个字符串，字符串支持加法（通过连接生成新字符串）和乘法（通过重复生成新字符串）：&lt;/div&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; &quot;你好&quot;
&apos;你好&apos;
&amp;gt;&amp;gt;&amp;gt; &quot;你好&quot;+&quot;世界！&quot;
&apos;你好世界！&apos;
&amp;gt;&amp;gt;&amp;gt; &quot;你好世界！&quot;*3
&apos;你好世界！你好世界！你好世界！&apos;
&amp;gt;&amp;gt;&amp;gt; type(&quot;你好世界！&quot;*3)
&amp;lt;class &apos;str&apos;&amp;gt;&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;和数学中一样，你可以用“变量”（Variable）来代表某个数值，这称为变量“赋值”（Assign），变量名可以使用字母（区分大小写）、数字（但不能以数字开头）和下划线，也可以使用任何全角字符包括所有汉字（但建议不要用全角字符）。变量不能和Python语言的关键词重名，否则执行时会报语法错误，你可以输入help(&amp;quot;keywords&amp;quot;)查看关键词列表。变量赋值语句的基本写法是：变量名=表达式，注意“=”应该读作“赋值”（Python中的等于号是==），一个变量也就是一个单一表达式：&lt;/div&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; x=1
&amp;gt;&amp;gt;&amp;gt; x+2
3
&amp;gt;&amp;gt;&amp;gt; x,y=1,100  # 同时给多个变量赋值
&amp;gt;&amp;gt;&amp;gt; x
1
&amp;gt;&amp;gt;&amp;gt; y
100
&amp;gt;&amp;gt;&amp;gt; x=x+1  # x原值加1再赋值给x
&amp;gt;&amp;gt;&amp;gt; x
2
&amp;gt;&amp;gt;&amp;gt; x+=1  # x原值加1再赋值给x的简洁写法
&amp;gt;&amp;gt;&amp;gt; x
3
&amp;gt;&amp;gt;&amp;gt; x,y=y,x  # 对调两个变量所指的对象，其他编程语言基本都需要三条指令才能实现这个操作……
&amp;gt;&amp;gt;&amp;gt; x
100
&amp;gt;&amp;gt;&amp;gt; y
3
&amp;gt;&amp;gt;&amp;gt; type(x)
&amp;lt;class &apos;int&apos;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; x=&quot;你好世界！&quot;
&amp;gt;&amp;gt;&amp;gt; x*2
&apos;你好世界！你好世界！&apos;
&amp;gt;&amp;gt;&amp;gt; y=x  # 两个变量指向了同一个对象
&amp;gt;&amp;gt;&amp;gt; id(x)
2565766974768
&amp;gt;&amp;gt;&amp;gt; id(y)
2565766974768
&amp;gt;&amp;gt;&amp;gt; 类型=type
&amp;gt;&amp;gt;&amp;gt; 类型(y)
&amp;lt;class &apos;str&apos;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; 类型(id)
&amp;lt;class &apos;builtin_function_or_method&apos;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; 类型(类型)
&amp;lt;class &apos;type&apos;&amp;gt;&lt;/pre&gt; 
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt; 
  &lt;div&gt;现在你可能会猜到了，这些id(1)、type(1)，还有我们已经接触过的print(&amp;quot;Hello World!&amp;quot;)也属于复合表达式，id、type、print也是指向某个对象的变量，这种对象是可以做“调用”（Call）运算的，在Python中分为“函数”（function）、“方法”（method）和“类型”（type）等类型，相当于数学中函数的概念。函数名就相当于运算符，参加运算的表达式放在函数名之后的括号里，称为“参数”（Parameter），如果有多个参数就用逗号分隔，而运算的结果就是函数的返回值。例如max函数可以从多个数中找出最大值：&lt;/div&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; max
&amp;lt;built-in function max&amp;gt;
&amp;gt;&amp;gt;&amp;gt; max(1,3,9,2)
9
&amp;gt;&amp;gt;&amp;gt; type(max)
&amp;lt;class &apos;builtin_function_or_method&apos;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; type(max(1,3,9,2))
&amp;lt;class &apos;int&apos;&amp;gt;&lt;/pre&gt; 
  &lt;div&gt; 
    &lt;p&gt;函数能完成各种复杂的功能。例如之前看到的input函数，可以接受一个字符串参数，执行时会显示此字符串作为提示，然后将用户在按回车键之前输入的全部内容作为字符串返回，也可以写成不带参数的input()，执行时就不显示任何提示。print函数同样可以不带参数，这将输出一个空行；也可以带任意多个参数，这将输出以空格分隔的多个值。注意：print函数输出的内容并不是它的返回值，print函数无返回值——或者可以说print函数返回值为“空”，Python专门定义了一个关键词None来代表空值（类型为NoneType），当返回值为空时不显示任何东西，如果你想强制输出空值，可以print(None)：&lt;/p&gt; 
    &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; None
&amp;gt;&amp;gt;&amp;gt; print(None)
None
&amp;gt;&amp;gt;&amp;gt; print(1,2,3)
1 2 3
&amp;gt;&amp;gt;&amp;gt; print(print(1,2,3))  # 内层print输出三个参数的值，外层print输出内层print返回的空值
1 2 3
None&lt;/pre&gt; 
  &lt;/div&gt; 
  &lt;div&gt;&lt;br /&gt;总而言之，Python语言中的变量就是贴在对象上的标签，所以它还有一个更笼统的叫法——标识符（Identifier）。变量没有确定的类型，它所指向的对象有确定的类型。在Python关键词以外的任何名称例如print也就是一个指向具体对象的变量而已，你完全可以把它指向别的对象（当然不建议这样做）：&lt;/div&gt; 
  &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; p=print  # p和print都指向同一个函数对象
&amp;gt;&amp;gt;&amp;gt; p(x)
你好世界！
&amp;gt;&amp;gt;&amp;gt; print=10  # print指向一个整数对象了
&amp;gt;&amp;gt;&amp;gt; print(x)  # 如果尝试调用运算，会提示类型错误“int对象是不能调用的”
Traceback (most recent call last):
&amp;nbsp; File &quot;&amp;lt;pyshell#26&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;
&amp;nbsp; &amp;nbsp; print(x)
TypeError: &apos;int&apos; object is not callable
&lt;/pre&gt; 
  &lt;h3&gt;* 编程小提示：Python解释器的源码&lt;/h3&gt; 
  &lt;div&gt;官方Python解释器是用C语言编写的，称为CPython，你可以在这里查看CPython的源代码 &lt;a href=&quot;https://github.com/python/cpython&quot; target=&quot;_blank&quot;&gt;https://github.com/python/cpython&lt;/a&gt;&lt;/div&gt; 
  &lt;div&gt;如果你想知道所有内建函数是怎样实现的，可以打开这个C文件，例如其中的builtin_print函数就对应Python中的print函数 &lt;a href=&quot;https://github.com/python/cpython/blob/master/Python/bltinmodule.c&quot; target=&quot;_blank&quot;&gt;https://github.com/python/cpython/blob/master/Python/bltinmodule.c&lt;/a&gt;&lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/python-idle</guid>
    <title>编程入门01：Python程序运行</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/python-idle</link>
    <pubDate>Thu, 15 Feb 2018 13:40:13 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">Python程序的运行方式。</atom:summary><description>&lt;div&gt; 
    &lt;p&gt;你已尝试过使用Python解释器，这是一个命令行程序，必须通过键盘输入完成所有操作。人们通常都会使用某种“集成开发环境”（Integrated Development Environment，简称IDE），在更方便的图形用户界面中编写、运行和调试程序。Python官方发行版带有一个简单的IDE叫做IDLE，意思是“集成开发与学习环境” （Integrated Development and Learning Environment），打开方法是点击Python 3.6程序组中的IDLE菜单项。IDLE窗体带有标准的菜单栏，在基本的命令行操作之外还提供编辑器等增强功能，它会调用下层的Python解释器来具体执行指令。&lt;/p&gt; 
    &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/00d19d0b-5f1b-4171-87f8-b80f87c069f8&quot;&gt;&lt;img alt=&quot;python01_idle.png&quot; src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/00d19d0b-5f1b-4171-87f8-b80f87c069f8&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt;我们使用IDLE来编写一段由7行语句组成的程序，计算1累加至n的结果。它的结构更为完整：首先接收用户的“输入”，然后进行特定的“处理”，最终将处理结果“输出”（注意#后的文本是注释，用来对语句进行说明，可以不必输入）&lt;/div&gt; 
  &lt;pre&gt;n = int(input(&quot;计算1累加至n，请输入n：&quot;))    # 获取输入的字符串，转换为整数，赋值给变量n
x = 1    # 变量x赋值1
result = 0    # 变量result赋值0
while x &amp;lt;= n:    # 当x小于等于n时循环执行子语句
&amp;nbsp; &amp;nbsp; result += x    # result原值加x
&amp;nbsp; &amp;nbsp; x += 1    # x原值加1
print(&quot;1累加至{}的结果是{}&quot;.format(n, result))    # 输出包含n和result的字符串&lt;/pre&gt; 
  &lt;div&gt;用户在&amp;gt;&amp;gt;&amp;gt;提示符后输入语句，系统即时反馈结果，这叫“交互模式”。交互模式下必须执行完一条语句再输入下一条语句，如果以复制粘贴的方式输入了多条语句，执行时就会提示语法错误“存在多条语句”（SyntaxError: multiple statements found while compiling a single statement）&lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;交互模式下输入的语句会临时保存，你可以按Alt-P和Alt-N前后切换已输入的语句，在回车执行之前可以修改当前语句。交互模式可以用于查看信息，例如输入help()打开帮助界面，输入dir()列出当前空间所有对象的名称；交互模式也适合用来进行测试，它会自动输出语句的“返回值”，例如你想知道2的20次方是多少，输入2**20就好了，不需要输入print(2**20)。&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;首行末尾带冒号，后面跟多行缩进子句的算一条“复合语句”，在交互模式下，复合语句要按两次回车键才会执行，例如累加程序中从while开始的三行语句就是一条复合语句，如果不按两次回车结束复合语句而继续输入后面的语句，执行时也会提示语法错误。（注意：缩进的统一规范为4个空格）&lt;/p&gt; 
    &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/428a8b2b-6027-4613-bfe1-84ba602a0387&quot;&gt;&lt;img alt=&quot;python01_interact.png&quot; src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/428a8b2b-6027-4613-bfe1-84ba602a0387&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;如果你的程序需要保留并重复使用，应该按Ctrl+N（或点菜单栏“File”&amp;gt;“New File”）新建一个.py文件来编写程序代码并保存到指定的文件夹，例如D:\Test\accumulate.py，然后按F5（或点菜单栏“Run”&amp;gt;“Run Module&amp;quot;）执行这个文件，这是Python程序运行的标准模式。&lt;/p&gt; 
    &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/32a69054-6da6-44f4-98c0-a1c895fc5376&quot;&gt;&lt;img alt=&quot;python01_run.png&quot; src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/32a69054-6da6-44f4-98c0-a1c895fc5376&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;/div&gt; 
  &lt;div&gt; 
    &lt;p&gt;你的程序也能直接在操作系统中运行：要运行已保存的accumulate.py文件，就打开系统命令行窗口切换到accumulate.py文件所在目录再输入python accumulate.py（如果文件不在当前目录，就要加上路径）；或者在文件夹窗口中双击accumulate.py文件（在这种方式下程序结束时会自动关闭命令行窗口，所以如果你想看清输出内容，可以在末尾再加一行语句input(&amp;quot;按回车键退出程序&amp;quot;)）&lt;/p&gt; 
  &lt;/div&gt; 
  &lt;h3&gt;* 编程小提示：Python的IDE介绍&lt;/h3&gt; 
  &lt;div&gt;IDLE其实就是一个用Python写的程序，你可以在Python安装目录的Lib\idlelib的文件夹下找到idle.pyw文件，双击一下试试看（.pyw是指窗口模式Python文件，系统执行此类文件时将不会打开黑色的命令行窗口）&amp;nbsp;&lt;a href=&quot;https://docs.python.org/3/library/idle.html&quot; target=&quot;_blank&quot;&gt;https://docs.python.org/3/library/idle.html&lt;/a&gt;&lt;/div&gt; 
  &lt;div&gt;你还可以使用更专业的IDE，例如同样用Python写的Spyder（上次提到的Anaconda就集成了这个IDE） &lt;a href=&quot;https://github.com/spyder-ide/spyder&quot; target=&quot;_blank&quot;&gt;https://github.com/spyder-ide/spyder&lt;/a&gt;&lt;/div&gt; 
  &lt;div&gt;以及用Java写的PyCharm，也有很多人在使用 &lt;a href=&quot;https://www.jetbrains.com/pycharm/download&quot; target=&quot;_blank&quot;&gt;https://www.jetbrains.com/pycharm/download&lt;/a&gt;&lt;/div&gt; 
  &lt;div&gt;个人觉得对新人最友好的IDE是Visual Studio，2017版正式加入了Python语言支持 &lt;a href=&quot;https://www.visualstudio.com/zh-hans/vs/&quot; target=&quot;_blank&quot;&gt;https://www.visualstudio.com/zh-hans/vs/&lt;/a&gt;&lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/01/entry/hello-world</guid>
    <title>编程入门00：Python软件安装</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/01/entry/hello-world</link>
    <pubDate>Sat, 10 Feb 2018 19:59:34 +0800</pubDate>
    <category>教程</category>
    <category>python</category>
    <category>教学</category>
    <category>编程</category>
<atom:summary type="html">&lt;p&gt;
开始Python语言学习之旅，轻松学编程。
&lt;/p&gt;</atom:summary><description>&lt;p&gt;“轻松学编程”系列教程从今天开始更新，欢迎加入计算机编程学习之旅——“程序”（Program）是指控制计算机运行的指令序列，“编程”（Programming）就是针对特定的任务而编写特定的程序。在信息化社会中，编程已成为一项基本技能，不论你从事何种工作，只要用得着计算机，学会编程都能带来很大的帮助。编程需要使用某种编程语言，例如Python——这是一种被广泛使用的编程语言，在科学计算、数据处理和人工智能等许多领域都发挥着重要的作用，并且其语法简洁、自然而优雅，非常适合作为初学者的入门语言。Python的创造者是荷兰人 &lt;a href=&quot;https://gvanrossum.github.io/&quot; target=&quot;_blank&quot;&gt;Guido van
Rossum&lt;/a&gt;，Python的官方网站是 &lt;a href=&quot;https://www.python.org/&quot; target=&quot;_blank&quot;&gt;https://www.python.org/&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/59291e7c-866a-43b9-8e6b-8cae3ccd0ac5&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/59291e7c-866a-43b9-8e6b-8cae3ccd0ac5&quot; alt=&quot;00.jpg&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;使用Python首先需要安装Python软件，最基本的Python软件是Python语言解释器——它能把Python语言翻译为底层的机器语言。Python软件可以在官方网站下载，现在推荐学习Python 3，请不要下载Python 2，两者的语法有不少差异。&lt;/p&gt; 
  &lt;p&gt;当前（2018年2月）最新正式稳定版本是3.6.4，官方下载页面提供了适用于不同操作系统的安装程序&amp;nbsp;&lt;a href=&quot;https://www.python.org/downloads/release/python-364/&quot; target=&quot;_blank&quot;&gt;https://www.python.org/downloads/release/python-364/&lt;/a&gt;&lt;br /&gt;Python 3.6.4 Windows 64位 安装程序 &lt;a href=&quot;https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.exe&quot;&gt;https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.exe&lt;/a&gt;&lt;br /&gt;Python 3.6.4 Windows 32位 安装程序 &lt;a href=&quot;https://www.python.org/ftp/python/3.6.4/python-3.6.4.exe&quot;&gt;https://www.python.org/ftp/python/3.6.4/python-3.6.4.exe&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;注意：Windows XP系统无法使用最新版本，只能安装3.4.4 &lt;a href=&quot;https://www.python.org/downloads/release/python-344/&quot; target=&quot;_blank&quot;&gt;https://www.python.org/downloads/release/python-344/&lt;/a&gt;&lt;br /&gt;Python 3.4.4 Windows 64位 安装程序 &lt;a href=&quot;https://www.python.org/ftp/python/3.4.4/python-3.4.4.amd64.msi&quot;&gt;https://www.python.org/ftp/python/3.4.4/python-3.4.4.amd64.msi&lt;/a&gt;&lt;br /&gt;Python 3.4.4 Windows 32位 安装程序 &lt;a href=&quot;https://www.python.org/ftp/python/3.4.4/python-3.4.4.msi&quot;&gt;https://www.python.org/ftp/python/3.4.4/python-3.4.4.msi&lt;/a&gt;&lt;/p&gt; 
  &lt;p&gt;Python的下一个主要版本3.7正在开发中，已于2017年9月发布第一个预览版，预计于2018年6月发布正式版。&lt;/p&gt; 
  &lt;p&gt;Python还有其他发行版，主要是在官方版之上集成了许多第三方软件包省得一个个单独安装，例如Anaconda &lt;a href=&quot;https://www.anaconda.com/download/&quot; target=&quot;_blank&quot;&gt;https://www.anaconda.com/download/&lt;/a&gt;，如果你安装其他发行版就不需再装官方版。&lt;/p&gt; 
  &lt;p&gt;下图显示的是在Windows 10系统中运行Python 3.6.4安装程序，请注意要选择添加环境变量（Add Python 3.6 to PATH）再开始安装（Install Now）——这个选项默认并没有勾选，如果你不添加环境变量，将来你在Windows命令提示符窗口输入python、pip等命令时会提示找不到这些命令，除非你切换路径到这些命令文件所在的目录（或是在命令前面加上路径）。&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/78ec2ab3-fbca-464e-a044-9de43571dac3&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/78ec2ab3-fbca-464e-a044-9de43571dac3&quot; alt=&quot;python_install.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;为了方便使用，推荐你选择自定义安装（Customize installation），在高级选项窗口中勾选为所有用户安装（Install for all users）、添加环境变量（Add Python to environment variables）以及预编译标准库（Precompile standard library），如有必要还可以自定义安装位置（Customize install location）再开始安装（Install）。&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/256190b2-6cf0-40cb-abe7-e2aec20e4893&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/256190b2-6cf0-40cb-abe7-e2aec20e4893&quot; alt=&quot;python_options.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;安装完成后，你就可以在开始菜单找到并点击Python 3.6程序组的Python 3.6菜单项（Win10系统在开始菜单输入python即可筛选出此菜单项）打开Python解释器窗口编写程序了，你可以看到Python解释器就是一个可执行文件（python.exe）。按照惯例，请输入下面的语句并按回车键执行：&lt;/p&gt; 
  &lt;pre&gt;print(&quot;Hello World!&quot;)&lt;/pre&gt; 
  &lt;p&gt;这行语句的字面意思很容易理解：打印“Hello World!”，我们看到计算机立即准确地执行了这行语句：在屏幕上输出“Hello World!”&amp;nbsp;&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/46106dec-ddeb-4f0f-901e-23b7ab6309d6&quot;&gt;&lt;img src=&quot;http://study.ywicc.edu.cn/roller/01/mediaresource/46106dec-ddeb-4f0f-901e-23b7ab6309d6&quot; alt=&quot;python_program.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;祝贺你，你完成了Hello World程序的编写，迈出了编程之路的第一步！&lt;/p&gt; 
  &lt;h3&gt;* 编程小提示：Hello World 程序&lt;/h3&gt; 
  &lt;p&gt;“Hello World 程序”是指在计算机屏幕上输出“Hello World”这行字符串的计算机程序。这通常是每一种计算机语言中最基本最简单的程序，亦通常是初学者尝试编写的第一个程序。&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;https://helloworldcollection.github.io/&quot; target=&quot;_blank&quot;&gt;The Hello World Collection&lt;/a&gt; 是一个专门收集 Hello World 程序的因特网页面，目前已有571种程序语言和76种人类语言。&lt;/p&gt; 
  &lt;div id=&quot;qb-sougou-search&quot; style=&quot;display: none;&quot;&gt; opacity: 0;&amp;quot;&amp;gt; 
    
    
    
    
    
    
    
    
    
    
    
    &lt;p&gt;搜索&lt;/p&gt; 
    &lt;p class=&quot;last-btn&quot;&gt;复制&lt;/p&gt; 
    &lt;iframe&gt;&lt;/iframe&gt; 
  &lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/%E8%AE%A9%E5%AD%A9%E5%AD%90%E5%AD%A6%E7%BC%96%E7%A8%8B-%E4%B8%AD%E5%9B%BD%E5%AE%B6%E9%95%BF%E7%83%AD%E6%83%85%E4%B8%8D%E9%AB%98</guid>
    <title>让孩子学编程？中国家长热情不高</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/%E8%AE%A9%E5%AD%A9%E5%AD%90%E5%AD%A6%E7%BC%96%E7%A8%8B-%E4%B8%AD%E5%9B%BD%E5%AE%B6%E9%95%BF%E7%83%AD%E6%83%85%E4%B8%8D%E9%AB%98</link>
    <pubDate>Mon, 29 Jan 2018 09:44:25 +0800</pubDate>
    <category>网络文摘</category>
    <category>教育</category>
    <category>编程</category>
    <category>计算机</category>
<atom:summary type="html">教孩子学习计算机编程理应成为风险投资者和教育初创公司的下一个重头戏。中国政府对此表示支持，认为培养编程人才对于中国成为技术强国至关重要。然而，中国家长反应平淡。</atom:summary><description>&lt;div&gt;袁莉&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;陈鲲杰四岁开始学钢琴，七岁练跆拳道，10岁上奥数班。中国孩子上这些课外辅导班已经司空见惯。去年11岁时，他开始学习编程，这在同龄人中并不常见。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;陈鲲杰的父亲陈宇表示，陈鲲杰的数学很好，也擅长打游戏，学编程的话，他能一边学一边玩。陈宇在中国东南部城市福州市一所职高担任思想品德课老师。他表示，他不介意儿子成为腾讯控股有限公司(Tencent Holdings Ltd., 0700.HK, 简称﹕腾讯)的一名游戏程序员。腾讯是全球最大的网络游戏公司。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;教孩子学习计算机编程理应成为风险投资者和教育初创公司的下一个重头戏。中国政府对此表示支持，认为培养编程人才对于中国成为技术强国至关重要。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;然而，让孩子学习编程还没有引起中国家长的重视，他们倒是很乐意花钱让孩子接受数学和英语辅导。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;风险投资人张丽君说，对学生和整个行业而言，编程大概是唯一有可能成为与英语同样重要的课程，但没人知道这一天何时到来。张丽君过去五年都在投资教育初创企业。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;她表示，家长对编程的反应比较冷淡。这是可以理解的。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;关键在于，编程不是中国高考的考试科目，而英语和数学是高考科目。在中国，只有通过高考才有机会上大学。中国家庭通常只有一个孩子，他们愿意花重金提高子女考入重点大学的机会，并将此视为未来能够谋得一份好职业和进入更高社会阶层的途径。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;北京大学(Peking University)对4万多个中国家庭进行的一项调查显示，2016-17学年，全国学前和基础教育阶段家庭教育支出总体规模约人民币1.9万亿元（合2,983亿美元）。调查显示，其中三分之一的开支用于上英语和数学等课外辅导班。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;陈宇夫妇不确定陈鲲杰的在线编程课还能坚持多久。作为一名小学五年级学生，他已经有太多家庭作业，周一到周五基本上每天写作业要写到晚上11点多。明年陈鲲杰要小升初，这将是他学校生涯中第一次关键大考，到时候他的家庭作业将更加繁重。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;陈宇告诉笔者：作为家长，我们很纠结。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;虽然中国在所谓STEM（科学、技术、工程和数学）领域的大学毕业生数量超过其他任何一个国家，而且政府部门不乏技术专家，但是中国一直没有把编程列为中小学的必修课。而现在情况开始发生改变。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;中国政府自2015年以来已发布一系列指导意见，鼓励学校试点包括编程在内的STEM教育项目。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;不过，中国教育部的一项计划指出，制定STEM教育的国家标准以及提供教师培训、教材和其他工具是一项艰巨的任务。教育部本月宣布，编程将列入高中必修课，但没有设定最后期限。小学将在未来几年逐步开设相关课程。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;相比之下，英国在2014年通过了一项全国计算机课程大纲，包括为年龄低至五岁的儿童编写的编程课。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;去年，东部沿海省份浙江省在一个试点项目中将信息技术（包含编程）列入高考选考科目。这在教育科技行业引发了有关该行业即将进入快速发展期的热议。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;初创公司深圳市创客工场科技有限公司(Makeblock Co. Ltd., 简称：创客工场)创始人兼首席执行长王建军表示，在中国，如果政府想推广什么东西，就会迅速有所行动。创客工场的主要业务是提供学习计算机编程的教具。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;2014年，创客工场最初的业务重心放在欧洲市场，直到2016年该公司才进入中国市场。如今，创客工场的最大市场仍是欧洲，但排在第二位的中国市场正迅猛增长。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;英语教学类初创公司依然吸金力十足。提供一对一在线英语课程的VIPKID去年8月份在一轮融资中筹得2亿美元，公司估值15亿美元。STEM初创公司正在吸引投资者的注意。2017年头八个月，九笔STEM教育初创公司类交易共获得融资人民币3.16亿元（合5,000万美元），其中包括四笔专注于儿童编程的交易，相比之下，2016年全年共产生了八宗此类交易，融资金额为人民币1.78亿元。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;中国英语教育领域的先锋新东方教育科技（集团）公司(New Oriental Education &amp;amp; Technology Group Inc., EDU)本周对一家教儿童编程的初创企业投资了人民币2,000万元。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;在一家深圳工厂上班的赖倩倩去年5月份为七岁的儿子报名参加了一个网上编程课程。她说儿子很喜欢这个课程。不过，她说，她的朋友们还不太愿意让自己的孩子报名参加这种课程，同样是每小时花费人民币100元，他们更愿意选择英语或数学补习课。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;编程猫（Shenzhen Dianmao Technology Company Ltd.）首席执行长李天驰表示，更多家长需要意识到，就像过去30年大家都学英语，现在应该学的是编程。该公司提供网上编程课程，赖倩倩的儿子和11岁的陈鲲杰上的就是该公司的课程。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;李天驰说，学习编程不是为了要成为一名程序员，编程是通往未来的钥匙。&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;（本文作者袁莉是《华尔街日报》专栏作家。文中所述仅代表她的个人观点。）&amp;nbsp;&lt;/div&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/gartner-2017%E5%B9%B411%E5%A4%A7%E9%A1%B6%E5%B0%96%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF</guid>
    <title>Gartner：2017年11大顶尖信息安全技术</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/gartner-2017%E5%B9%B411%E5%A4%A7%E9%A1%B6%E5%B0%96%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF</link>
    <pubDate>Wed, 28 Jun 2017 12:56:23 +0800</pubDate>
    <category>网络安全</category>
    <category>信息安全</category>
<atom:summary type="html">近日，Gartner发布了2017年的11大顶尖信息安全技术，同时指出了这些技术对信息安全部门的意义。</atom:summary><description>&lt;h4&gt;&lt;a href=&quot;http://www.freebuf.com/author/%e7%b1%b3%e9%9b%aa%e5%84%bf&quot;&gt;米雪儿&lt;/a&gt;&lt;/h4&gt; 
  &lt;p&gt;&lt;a href=&quot;http://image.3001.net/images/20170619/14978611425572.jpeg&quot;&gt;&lt;img alt=&quot;light-dark.jpeg&quot; src=&quot;http://image.3001.net/images/20170619/14978611425572.jpeg!small&quot; width=&quot;650&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;&lt;b&gt;近日，Gartner发布了2017年的11大顶尖信息安全技术，同时指出了这些技术对信息安全部门的意义。&lt;/b&gt; &lt;/p&gt;
  &lt;p&gt;Gartner副总裁兼院士级分析师NeilMacDonald表示， &lt;/p&gt;
  &lt;blockquote&gt; 
    &lt;p&gt;“2017年，企业IT的威胁级别依然处于非常高的水平，媒体上每天都充斥着各种攻击和泄漏信息。随着攻击者的能力不断提升，企业必须提高其防御攻击的能力，安全和风险领导者必须评估和使用最新的安全技术，防止先进的攻击活动，更好地实现数字业务转型，拥抱新的计算风格，如云、移动以及DevOps。”&lt;/p&gt;
  &lt;/blockquote&gt; 
  &lt;p&gt;以下为这11项信息安全技术的具体内容： &lt;/p&gt;
  &lt;h3&gt;1. 云工作负载保护平台（Cloud Workload Protection Platform，简称CWPP）&lt;/h3&gt; 
  &lt;p&gt;现代数据中心支持运行在物理设备、虚拟机（VM）、容器以及私有云基础架构中的各种工作负载，并且几乎总是涉及一些在一个或多个公有云基础设施即服务（IaaS）提供商中运行的工作负载。 &lt;/p&gt;
  &lt;p&gt;云工作负载保护平台（CWPP）市场定义为基于主机的解决方案，主要满足现代混合数据中心架构中，服务器工作负载的保护要求。它为信息安全领导者提供了一种集成的方式，通过使用单个管理控制台和单一方式表达安全策略来保护这些工作负载，而不用考虑工作负载运行的位置。 &lt;/p&gt;
  &lt;h3&gt;&lt;font color=&quot;#000000&quot;&gt;2. 远程浏览器技术（RemoteBrowser）&lt;/font&gt;&lt;/h3&gt; 
  &lt;p&gt;几乎所有成功的攻击都源于公共互联网，而基于浏览器的攻击是用户攻击的主要来源。信息安全架构师无法阻止攻击，但是他们可以通过将终端用户互联网浏览会话与企业端点和网络隔离的方式来抑制损害。通过隔离浏览器功能，可以使恶意软件远离终端用户的系统，企业也可以通过将攻击风险转移到服务器会话中来减少攻击面，它可以在每个新的浏览器会话中重置为已知的良好状态，标记为打开的或URL访问的。 &lt;/p&gt;
  &lt;h3&gt;3. 欺骗技术（Deception）&lt;/h3&gt; 
  &lt;p&gt;欺骗（Deception）技术，顾名思义，这是一种用来摆脱攻击者的自动化工具，或为对抗攻击争取更多时间的一种欺骗手段。本质就是通过使用欺骗手段阻止或者摆脱攻击者的认知过程，扰乱攻击者的自动化工具，延迟攻击者的行为或者扰乱破坏计划。 &lt;/p&gt;
  &lt;p&gt;例如，欺骗功能会制造假的漏洞、系统、分享和缓存，诱骗攻击者对其实施攻击，从而触发攻击告警，因为合法用户是不应该看到或者试图访问这些资源的。 &lt;/p&gt;
  &lt;p&gt;Gartner预测，到2018年有10%的企业将采用欺骗工具和策略，参与到与黑客的对抗战争中。 &lt;/p&gt;
  &lt;h3&gt;4. 端点检测和响应（EDR）&lt;/h3&gt; 
  &lt;p&gt;该技术早在2014年就已经上榜了，Gartner还将其列入五种检测高级威胁的手段之一。端点检测和响应（EDR）解决方案通过监控端点的异常行为和恶意活动迹象，来增强传统的端点预防性控制措施，例如防病毒。Gartner预测，到2020年，80%的大型企业，25%的中型企业和10%的小型企业将投资EDR能力。 &lt;/p&gt;
  &lt;h3&gt;5. 网络流量分析（Networktraffic analysis，简称NTA）&lt;/h3&gt; 
  &lt;p&gt;网络流量分析（NTA）解决方案是一个有助于网络管理者进行网络规划、网络优化、网络监控、流量趋势分析等工作的工具。它通过监控网络流量、连接和对象，找出恶意的行为迹象。那些正在寻求基于网络的方法，来识别绕过周边安全性的高级攻击的企业应该考虑使用NTA技术来帮助识别、管理和分类这些事件。 &lt;/p&gt;
  &lt;h3&gt;6. 管理检测和响应（MDR）&lt;/h3&gt; 
  &lt;p&gt;管理检测和响应（MDR）提供商为寻求改进其威胁检测、事件响应和持续监控功能的买家提供服务，这些买家自身通常不具备专业的技能或资源。由于缺乏对威胁检测能力方面的投资，中小企业（SMB）和小型企业的需求特别强烈，因为MDR服务正好触及了这些企业的“sweet spot（甜蜜点）”。 &lt;/p&gt;
  &lt;h3&gt;7. 微分段（Microsegmentation）&lt;/h3&gt; 
  &lt;p&gt;一旦攻击在企业系统中站稳脚跟，他们通常会横向移动（东／西）到其他系统中。微分段是在虚拟数据中心内为实现安全目的进行隔离和分段的过程。就像潜艇中的舱室一样，微分段有助于在威胁发生时限制破坏。之前，微分段技术主要用于描述服务器之间在相同层／区域内的东西／横向通信，但是现在它已经演变为主要用于虚拟数据中心内的通信。 &lt;/p&gt;
  &lt;h3&gt;8. 软件定义边界（Software-defined perimeters，简称SDP）&lt;/h3&gt; 
  &lt;p&gt;Gartner预测，到2017年底，至少10%的企业组织（目前低于1%）将利用软件定义边界SDP技术来隔离敏感的环境，这项技术在安全保障用户的访问同时，也可以改善便利性，而使用一个固定的边界来保护企业内部网站正在逐渐过时。 &lt;/p&gt;
  &lt;p&gt;软件定义边界（Software Defined Perimeter，SDP）由云安全联盟（CSA）于2013年提出，用应用所有者可控的逻辑组件取代了物理设备，只有在设备证实和身份认证之后，SDP才提供对于应用基础设施的访问。 &lt;/p&gt;
  &lt;p&gt;SDP使得应用所有者部署的边界可以保持传统模型中对于外部用户的不可见性和不可访问性，该边界可以部署在任意的位置，如网络上、云中、托管中心中、私有企业网络上，或者同时部署在这些位置中。 &lt;/p&gt;
  &lt;h3&gt;9. 云端访问安全代理技术（Cloudaccess security brokers ，简称CASBs）&lt;/h3&gt; 
  &lt;p&gt;云端访问的安全代理（CASBs）技术是指在云服务客户与云服务提供商之间建立一个启停“安全访问云资源策略”的开关。 &lt;/p&gt;
  &lt;p&gt;CASB重点针对SaaS模式下的云服务商提升其安全性与合规性，同时也在不断丰富针对IaaS和PaaS的应用场景，填补了单个云服务的很多空白，允许首席信息安全官（CISO）同时跨越来越多的云服务做到这一点，包括基础设施即服务（IaaS）和平台即服务（PaaS）提供商。 &lt;/p&gt;
  &lt;p&gt;因此，CASB解决了CSIO要跨整个企业云服务制定政策、监控行为和管理风险这一关键要求。 &lt;/p&gt;
  &lt;h3&gt;10. 面向DevSecOps的OSS安全扫描和软件组成分析技术（OSS security scanning and software composition analysis forDevSecOps）&lt;/h3&gt; 
  &lt;p&gt;信息安全架构师必须能够将安全控制自动融入到整个DevSecOps周期中，而不需要进行手动配置，在这过程中要尽可能对DevOps团队是透明的，且不会阻碍DevOps的敏捷性，但是又要履行法律和法规合规性以及管理风险要求。为了实现这一目标，安全控制必须能够在DevOps工具链中实现自动化。软件组合分析（SCA）工具专门分析开发人员用于识别和清点OSS组件的源代码、模块、框架和库，并在应用程序运用到生产环境之前，识别任何已知的安全漏洞或是许可问题。 &lt;/p&gt;
  &lt;h3&gt;11. 容器安全（Containersecurity）&lt;/h3&gt; 
  &lt;p&gt;容器使用共享的操作系统模式。对主机操作系统的漏洞攻击可能导致所有容器都受到破坏。容器本身并不安全，但是它们就是由开发者以不安全的方式进行部署的，很少或完全没有安全团队参与，也很少有安全架构师进行指导。传统的网络和基于主机的安全解决方案对容器是无视的。容器安全解决方案保护容器的整个生命周期（从创建到生产），大多数容器安全解决方案都提供了预生产扫描和运行时间监控和保护功能。 &lt;/p&gt;
  &lt;h4&gt;关于Gartner公司&lt;/h4&gt; 
  &lt;p&gt;Gartner公司创立于1979年，拥有7,900名顾问，包括 1,700多位世界级分析专家，在全球设有90多个分支机构。Gartner首创了魔力象限，首次提出威胁情报的概念，Gartner报告已经成为IT业界了解新技术的一个重要窗口。 &lt;/p&gt;
  &lt;p&gt;&lt;b&gt;*参考来源：&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;a href=&quot;https://www.helpnetsecurity.com/2017/06/14/top-technologies-infosec/&quot;&gt;helpnetsecurity&lt;/a&gt;&lt;/b&gt;&lt;/u&gt;&lt;b&gt;，米雪儿编译，转载请注明来自FreeBuf.COM&lt;/b&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/%E9%9B%A8%E8%AF%BE%E5%A0%82-%E9%AB%98%E6%A0%A1%E6%99%BA%E6%85%A7%E6%95%99%E5%AD%A6%E5%B7%A5%E5%85%B7-mdash-mdash-%E4%BB%8E%E6%95%99%E5%B8%88%E4%B8%AD%E6%9D%A5</guid>
    <title>雨课堂：高校智慧教学工具&amp;mdash;&amp;mdash;从教师中来，到教师中去</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/%E9%9B%A8%E8%AF%BE%E5%A0%82-%E9%AB%98%E6%A0%A1%E6%99%BA%E6%85%A7%E6%95%99%E5%AD%A6%E5%B7%A5%E5%85%B7-mdash-mdash-%E4%BB%8E%E6%95%99%E5%B8%88%E4%B8%AD%E6%9D%A5</link>
    <pubDate>Wed, 21 Jun 2017 10:56:09 +0800</pubDate>
    <category>网络文摘</category>
    <category>教学</category>
<atom:summary type="html">“雨课堂”是一款轻量级的智慧教学工具，基于PPT和微信，无需下载其他软件，零成本、零使用费，可以实现低门槛的智慧教学。“</atom:summary><description>&lt;p&gt;&lt;img src=&quot;http://elearn.xupt.edu.cn/meol/data/convert/2017/3/16/315d6bc5-e90a-49fb-a914-6e1ceccd5ecd_image1.png&quot; width=&quot;640&quot; height=&quot;213&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;学堂在线的“雨课堂”由清华大学一线教师开发，可以实现课前、课中、课后全过程的教学数据收集，提供较好的课程互动手段，最大自由地开展混合式教学，旨在用最便携有效的手段来将最新的信息技术（云计算、移动互联网、数据挖掘等）融入到教学场景中，致力于为所有教学过程提供数据化、智能化的信息支持。&lt;/p&gt; 
  &lt;p&gt;“雨课堂”是一款轻量级的智慧教学工具，基于PPT和微信，无需下载其他软件，零成本、零使用费，可以实现低门槛的智慧教学。“雨课堂”一经推出就受到广大师生的好评和欢迎，成为了新时期在线教育发展的重要的标志性产品。&lt;/p&gt; 
  &lt;p&gt;2016年7月26日的《光明日报》教育周刊载文《教学信息化必须面向教改实际》，其中将高校教学信息化分为了两个阶段：一是“互联网+网络课程+平台”阶段，主要是满足高校开展网络远程教育和学生进行网络学习的需要；二是“互联网+网络视频教学+师生互动”阶段，主要是着眼于优质教学资源共享以及网络学习的需要；并专门指出，“前不久清华大学宣布推出的智能教学工具——雨课堂，将PPT、MOOC、手机微信融为一体，预示着我国高校教学信息化将进入一个新的发展阶段”。这既是教学信息化专家对“雨课堂”教学思想的高度认可，也是对其背后的技术创新和理念创新的积极肯定。&lt;/p&gt; 
  &lt;p&gt;“雨课堂”跟已有的网络教学辅助工具相比，不像MOOC那样需要单独的平台，而且学习者得到的是统一的教学内容，也不像公开课那么随意，缺乏对完整教学环节的监测；和传统的网络教学系统相比，“雨课堂”将师生和教学内容的距离拉得更近，互动更加人性、便捷、准确。&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;http://elearn.xupt.edu.cn/meol/data/convert/2017/3/16/b93fd464-6165-4f76-a1ad-c6a89629db9c_image2.png&quot; /&gt;&lt;/p&gt; 
  &lt;p&gt;图1：学生在使用雨课堂过程中的“不懂”按钮&lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;h3&gt;&lt;strong&gt;一、“雨课堂”的产品特色&lt;/strong&gt;&lt;/h3&gt; 
  &lt;p&gt;&lt;img src=&quot;http://elearn.xupt.edu.cn/meol/data/convert/2017/3/16/95e1ced4-8f82-4e57-b2b9-f5ccf425a2f1_image3.png&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;图2：雨课堂授课现场实拍&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;1、纯软件，最快部署&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;“雨课堂”作为一个智慧教学的轻量级解决方案，能够方便地在教室中实现实时接收幻灯片、实时答题、多屏互动、答疑弹幕等新的互动形式。而要实现这些功能并不需要安装和购买任何的硬件设备，只需要安装软件，在没有硬件投入的情况下，就可以平滑升级现有的多媒体教室为智慧教室。这种纯软件的部署方案，让“雨课堂”能够实现最快捷的实地实施。这也是“雨课堂”能够在发布不到半年，就快速在我国超过3000家机构和单位使用的重要原因。零硬件，快捷部署，这也是信息技术的突破为智慧教学时代带来的为人振奋的消息。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;2、简易学，迅速上手&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;“雨课堂”的软件界面全部基于PowerPoint和微信，而这两个软件恰恰是老师们分别在电脑桌面和智能手机上最最熟悉的两个软件。“雨课堂”通过增强这两个软件的既有功能，实现了在课外向学生推送视频、语音、课件到他们的手机上，实现了师生间在课上的实时沟通反馈。这一方面大大降低了师生们的学习成本，提高了软件上手的易用性，在另一方面也可以让老师们充分地利用了过往的课件资料。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;3、全周期，数据翔实&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;因为“雨课堂”在教学过程中覆盖了课前-课上-课后每一个环节，因此后台系统翔实地记录了所有的教学数据，例如有多少学生来上了课，几分几秒进入了课堂，他们对哪些幻灯片没有看懂，对哪些题目没有答对，课前的预习视频看了几遍，课后的作业是否圆满地完成，正确率如何等等。这些数据能够忠实地还原真实课堂的绝大多数教学过程，而这种全周期的数据呈现也让让教与学更加明了。老师和学生都能够通过数据来改进自己的教学和学习过程，在未来在机器学习技术和人工智能技术的引入，这些数据还将为师生个性化地分析已经发生的教学过程，为未来的教与学提供决策的依据和建议。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;4、零成本，永远免费&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;“雨课堂”是清华大学教学研究成果面向社会的一次开放尝试，基于互联网的分享精神，“雨课堂”从发布之初就秉承着免费和开放的原则，让海内外的广大教师能够免费地使用最新的教研成果。课题组希冀通过免费，通过分享，让更多的老师能够不受硬件条件的制约，不受经费条件的制约，不受部署难度的制约，跑步进入智慧教学的新时代。&lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;h3&gt;&lt;strong&gt;二、 “雨课堂”的功能要点&lt;/strong&gt;&lt;/h3&gt; 
  &lt;p&gt;“雨课堂”像一个智慧教学的工具箱，教师可以选择和搭配自己感兴趣的工具，来影响和促进自己的课堂教学，将“课前-课上-课后”三者有机地联系起来。教师只需要下载一个雨课堂的插件，就可以在正常PPT编辑的基础上，加入MOOC视频、网络视频、选择题等，发送给学生；而学生课前也只需要通过微信扫描二维码就可以进入课程。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;1、题目推送——让课堂小测变得简单&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;在“雨课堂”提供的诸多功能中，最受欢迎的功能之一就是在PPT中添加题目，进行实时的课堂测验。已经使用雨课堂超过一个学期的清华大学生命学院的杨扬老师表示，“这样能使老师和学生之间的互动更多一些，老师讲授完一个知识点，就可以实时习题推送，看同学的掌握程度。”杨老师还说，“雨课堂可以针对知识点随时问同学听懂还是没听懂，如果开小差就miss掉了。作为一门导论课的老师，我不关心多少人做对，只关心多少人参与进来思考问题。”目前，“雨课堂”能够推送的题目类型有单选题，多选题和投票题，在未来填空题、主观题等更多题型也会陆续推出，以满足不同学科教师的授课需求。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;2、发送弹幕——让课间气氛不再沉闷&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;发送弹幕是“雨课堂”十分有特色的功能。在与很多一线教师和学生访谈后，课题组发现，在实际教学中，大清早和中午的课程学生普遍容易犯困，在每节课间的铃响大家都是揉着眼睛起来的，如果课间有一些轻松的活动就会缓解这种状况，例如使用“雨课堂”来发送弹慕。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;3、课前课后推送——让课堂讲解更加高效&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;“雨课堂”的功能绝不仅限于课堂上推送PPT，而是覆盖课前、课上、课后的每一个教学环节。下课铃响，老师有几道题没讲完，回到办公室后做几页PPT，然后对着手机添加语音讲解，把“有声音的PPT”很方便地推送给大家；在课前，老师可以在PPT中添加MOOC视频、网络视频、选择题等元素，打包推送给学生预习，在同学点开PPT预习的瞬间，老师的手机也能实时看到有多少人进行了预习，每个人看了多少页PPT，选择题有多少人答对，多少人答错。这种课前推送模式，一方面可以督促学生养成预习的习惯；另一方面，也可以给老师提供许多有用的教学信息。通过课前课后的推送，老师们可以把一些相对简单的、学生可以自学的知识挪到课前去，课堂当中就可以做一些高阶的交流互动，老师们也可以集中精力讲一些比较难的知识点，或者是与学术前沿或工业界结合的比较紧密的新知识。&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;4、数据获取——让教学不再全凭经验&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;“雨课堂”通过在各个教学环节设置数据采集节点，来帮助老师获得许多有用的教学数据，这些以前所看不到的数据极大地促进教学活动由传统的“经验驱动”向“数据驱动”转型。在没有“雨课堂”的时代，一线教师想了解一个学生的学习状态是较为困难的，可能要通过小测验，通过多年的教学经验观察同学上课时候的反应、眼神、神态。试想，如果下面坐着100多人，即使很有经验的老师也无法精细化地了解每一个同学的学习状态和想法。“雨课堂”想做的就是要把整个的教学环境、教学过程用学生的手机和其他终端采集下来，让教学进入“数据时代”。&lt;/p&gt; 
  &lt;p&gt;表1：“雨课堂”在课前-课上-课后设置的数据采集环节&lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;600&quot; border=&quot;1&quot;&gt; 
    &lt;tbody&gt; 
      &lt;tr&gt; 
        &lt;td valign=&quot;top&quot; width=&quot;68&quot;&gt;课前&lt;/td&gt; 
        &lt;td valign=&quot;top&quot; width=&quot;532&quot;&gt; 
          &lt;p&gt;1. 课前老师推送预习材料到学生微信（可附上语音讲解）；&lt;/p&gt; 
          &lt;p&gt;2. 老师能看到每个学生预习的情况；&lt;/p&gt; 
        &lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
        &lt;td valign=&quot;top&quot; width=&quot;68&quot;&gt;课上&lt;/td&gt; 
        &lt;td valign=&quot;top&quot; width=&quot;532&quot;&gt; 
          &lt;p&gt;3. 课上PPT同步到学生微信，上课不再忙于抄写、拍照； &lt;/p&gt; 
          &lt;p&gt;4. 随堂限时测试，学生听课更专注； &lt;/p&gt; 
          &lt;p&gt;5. 弹幕功能，及时讨论，随时开关； &lt;/p&gt; 
          &lt;p&gt;6. 没有听懂？匿名反馈给老师；&lt;/p&gt; 
        &lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
        &lt;td valign=&quot;top&quot; width=&quot;68&quot;&gt;课后&lt;/td&gt; 
        &lt;td valign=&quot;top&quot; width=&quot;532&quot;&gt; 
          &lt;p&gt;7. 老师收集学生的答题数据； &lt;/p&gt; 
          &lt;p&gt;8. 老师课后推送复习题。&lt;/p&gt; 
        &lt;/td&gt; 
      &lt;/tr&gt; 
    &lt;/tbody&gt; 
  &lt;/table&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;h3&gt;&lt;strong&gt;三、 “雨课堂”的创新之处&lt;/strong&gt;&lt;/h3&gt; 
  &lt;p&gt;“雨课堂”从课堂教学和在线教育分别入手，最终殊途同归。总结起来，从产品的核心理念上，“雨课堂”有两个创新之处：它们分别是双通道教学和全景式记录。 &lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;1、双通道教学：&lt;/strong&gt;所谓“双通道教学”，就是通过互联网和智能设备，架起另外一个通路，使教学既能同步又能异步。同步是大家一起做一件事情。异步是大家分散各自做各自的事情。同步关注的是氛围。异步关注的是效果。将高阶知识、价值引领、效果检测、难点研讨等同步起来，将基础知识讲解、动手实验、反馈、轻讨论等放入异步通道。 &lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;http://elearn.xupt.edu.cn/meol/data/convert/2017/3/16/5341e9b5-e1c4-4e7e-ae70-dc52618daa2b_image4.png&quot; width=&quot;640&quot; height=&quot;205&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt; 图3：雨课堂“双通道教学”举例 &lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;2、全景式记录：&lt;/strong&gt;即尽可能地记录下教学过程的全部环节，以期能够在后续重现整个教学的全过程。记录教学数据的系统有很多，但像“雨课堂”这样全景式地从课前、课中到课后完整记录的系统却并不多。“雨课堂”这样做的原因有两点，因为唯有全景式记录，才能随时还原真实的教学过程，让课堂完整重现，也唯有全景式记录，才能客观科学地反映教学现状，为决策提供依据。 &lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;四、 “雨课堂”的重要意义&lt;/strong&gt; &lt;/p&gt; 
  &lt;p&gt;在2016年5月，教育部在线教育研究中心主任袁驷教授在听取了“雨课堂”的成果汇报后，用三点这样评价它：“我认为雨课堂的意义，目前能够看到三个意义： &lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;1、积云化雨：&lt;/strong&gt;雨课堂在网上布置了很多云，云通过雨下到地上，要滋润课堂教学。 &lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;2、收雨成云：&lt;/strong&gt;雨不能白下，现在把课堂的数据收集起来再返回到云上，全过程收集数据分析学习行为，这样大数据分析才更有意义，更可靠，也更科学，将来能够因材施教。 &lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;3、人人受益：&lt;/strong&gt;这样的混合教学无痕迹，把线上线下完全连通起来，而且量身订做，每个人的个性化都得到体现。”这些都是在线教育领域的权威专家对于“雨课堂”的积极肯定。 &lt;/p&gt; 
  &lt;p&gt; &lt;/p&gt; 
  &lt;h3&gt;【相关链接】&lt;/h3&gt; 
  &lt;p&gt;1、学堂在线：&lt;a href=&quot;http://www.xuetangx.com&quot;&gt;www.xuetangx.com&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;2、雨课堂：&lt;a href=&quot;http://ykt.io&quot;&gt;http://ykt.io&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;3、&lt;a href=&quot;http://news.tsinghua.edu.cn/publish/thunews/10303/2016/20160617101758935397134/20160617101758935397134_.html&quot;&gt;学堂在线推出智慧教学工具——雨课堂&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;4、&lt;a href=&quot;http://news.tsinghua.edu.cn/publish/thunews/9658/2017/20170423152435633277225/20170423152435633277225_.html&quot;&gt;混合式教学：一场头率大幅提高的思政课&lt;/a&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/%E5%8F%AF%E6%B1%97%E5%AD%A6%E9%99%A2%E7%9A%84%E6%88%90%E5%8A%9F-%E7%BB%99%E4%BA%86%E5%88%9B%E4%B8%9A%E8%80%85%E5%93%AA%E4%BA%9B%E6%80%9D%E8%80%83</guid>
    <title>可汗学院的成功，给了创业者哪些思考</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/%E5%8F%AF%E6%B1%97%E5%AD%A6%E9%99%A2%E7%9A%84%E6%88%90%E5%8A%9F-%E7%BB%99%E4%BA%86%E5%88%9B%E4%B8%9A%E8%80%85%E5%93%AA%E4%BA%9B%E6%80%9D%E8%80%83</link>
    <pubDate>Fri, 16 Jun 2017 10:21:55 +0800</pubDate>
    <category>网络文摘</category>
    <category>教学</category>
<atom:summary type="html">萨尔曼·可汗的成功带给我们的启示。</atom:summary><description>&lt;p&gt;作者：&lt;a href=&quot;https://www.huxiu.com/member/275247.html&quot;&gt;秦巴里人&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;&lt;img alt=&quot;可汗学院的成功，给了创业者哪些思考&quot; src=&quot;https://img.huxiucdn.com/article/cover/201607/14/085135785481.jpg?imageView2/1/w/800/h/600/|imageMogr2/strip/interlace/1/quality/85/format/jpg&quot; /&gt; &lt;/p&gt; 
  &lt;p&gt;前段时间一直在看萨尔曼·可汗的&lt;a href=&quot;https://book.douban.com/subject/25886309/&quot; target=&quot;_blank&quot;&gt;《翻转课堂的可汗学院：互联网时代的教育革命》&lt;/a&gt;这本书，可汗同学完整叙述了他从04年为了给表妹纳迪娅远程辅导录制视频开始至今发展成为全球性的在线教育平台的经历。 &lt;/p&gt; 
  &lt;p&gt;这本书是少有的在短时间内看完之后又再看第二遍的。在线教育这两年很火热，武少虽不是在线教育的从业者但是也关注了一些，往大了看用互联网的思维和技术手段去改造传统行业更是这两年的热点，无数的创业者在这里面去探索。你去看可汗的经历，从偶然的因素开始远程辅导，然后录制在线课程视频，这其中开始发现自己对于教育的热情，同时不断去思考真正的教育到底应该是什么样子的，现行的就是最好的么，怎么才能让学术这个教育的对象能够真正掌握思维的方式，学会把不同知识联系起来同时保有创造力。 &lt;/p&gt; 
  &lt;p&gt;可以说, 可汗学院的成功也源于可汗同学对教育本质的不断思考，对教育行业的溯源和探究，同时超越教育去关注做为教育对象的人的成长，而且敢于打破常规敢于颠覆了我们一直以来的一些既定教育模式。正式这些思考和探索, 他对教育的理解也越来越深，最后形成有真正用户价值并且切实可行的教育新模式来。 &lt;/p&gt; 
  &lt;p&gt;在看《翻转课堂的可汗学院：互联网时代的教育革命》这本书的过程中，我思考更多的就是当我们在用新思维、新技术重构或者变革或者改变一个行业的时候，我们应该怎么去构建真正有价值并且切实可行的模式。所以接下来我们讨论的就是在做在线教育的过程中，可汗是怎么去思考的，他的这些思考和实践的过程所体现出的方法论不仅对于教育领域还对其他领域都有很好的借鉴意义。 &lt;/p&gt; 
  &lt;h3&gt;一、从实际情况出发去研究教育行业本身的问题&lt;/h3&gt; 
  &lt;p&gt;前面提到可汗最早是给表妹原创辅导，在辅导中发现表妹无法理解简单的单位换算但是却能很好地掌握数学中更难的概念。这就是说明了某些因素导致了表妹对这个概念的掌握，但是这些因素被老师给忽略了。从这个点出发可汗发现有的学生就是能很快地接受并理解一个概念而有些学生要通过仔细琢磨才能理解，而现行的教育模式忽略了这些学生本身的差异性认为规定统一的教学进度老师讲完这部分考试然后就可以进行下一章教学。 &lt;/p&gt; 
  &lt;p&gt;而这恰是现行学校教育模式的根本问题，忽略学生地差异性人为规定教学进度而没有真正区探察学生对与知识和概念的掌握程度。同时老师粗暴的交流方式（老师提问希望学生立刻给出答案）并没有帮助学生反倒是禁锢了学生的思维。与此同时，包括主动学习问题，鼓励学生到方式问题都是在这种不断探究中显现出来。 &lt;/p&gt; 
  &lt;p&gt;对于这些教育问题的深入探究才让可汗对于如何能让不同学生稳固地掌握知识有了深入的认识，只有发现问题提出直至核心的问题我们才能找到方案。 &lt;/p&gt; 
  &lt;h3&gt;二、从教育这一行为的发生和教育行业的历史去发现问题&lt;/h3&gt; 
  &lt;p&gt;发现教育行业现存模式的核心问题，可汗并没有满足他又去研究神经系统科学来摸清在学习的过程中大脑的神经元是如何运作的。如果从不同的角度去学习知识更容易理解，学生如果主动参与学习过程中，同时帮助学生将新知识与已知的信息联系起来，做到这些能使得学生更好更快地理解并掌握知识。但是这些恰恰现行的标准教学模式所缺失的，把将原本关联的课程进行划分，没有充分发挥学生联想学习的能量而只是让学生被动地学习。因此可汗推出了知识地图的工具，强调知识点的关联性，让学生直观地了解到自己学到了什么以及将要学什么。 &lt;/p&gt; 
  &lt;p&gt;可汗还深入去研究现在的K12教育来源普鲁士人的实践，而且普鲁士当时推行标准教育模式的根本原因是大量炮制忠诚且易于管理的国民。但是这种标准化教学易于应用推广、以及成本考量导致后面的精熟教学模式并没能得到推广。同时以越来越陷入追求考试成绩的经典，一个孩子得了95分并不值得高兴因为还有5%的知识他并没有掌握，就有可能导致后面相关联的知识无法理解，而这些恰恰被忽略了。 &lt;/p&gt; 
  &lt;p&gt;从用户行为本身和行业发展历史去探索，这也是值得我们去借鉴的在深入分析某一领域的过程中，用户行为和行业发展历史是我们一定要去深究的从中能够得到很多启示。 &lt;/p&gt; 
  &lt;h3&gt;三、从教育对象的角度来思考&lt;/h3&gt; 
  &lt;p&gt;在实际摸索过程中，可汗发现越来越多的差生其实都能学的好。知识原本的标准化教学忽略了他们可能原本接受新知识的过程中比较慢，也没有让这些学生意识到知识之间的关联性，而且没有得到恰当的鼓励，所以导致了他们越来越放弃自己。在可汗越来越深入的实践和探究中，他发现原来教学理念中“教学时间是常量，而知识水平是变量“大错特错，所有人都能学好也应该能学好识水平是长量而教学时间则应是变量。 &lt;/p&gt; 
  &lt;p&gt;同时，可汗也开始越来越关注作为教育对象的人身上，教育的最终你的是要培养学生的创造力，看待和理解世界的思维方式，但是传统的机械的教育其实在扼杀创造力。从这里可以看出可汗对教育的思考已经上升到个人成长这个终极命题上来，而这更有助探究到更棒的教育模式和教学方式。 &lt;/p&gt; 
  &lt;h3&gt;四、方式和途径服务于用户价值&lt;/h3&gt; 
  &lt;p&gt;可汗学院的发展也影响到了很多老师，他们认为让学生按照自己的时间和进度通过视频来学习，而将课堂时间用于给学生答疑。这样的新玩法对于可汗也是极大地促进，而他也思考视频、老师、课堂等在未来新教学方式下的角色、定位及价值。 &lt;/p&gt; 
  &lt;p&gt;这块尤为值得学习，虽然可汗是在线教育的引领者。但是他并没有夸大在线教育的价值，也没有贬低线下教学的价值和老师对于学生的意义。反倒是从很早就开始跟学校去合作，与不同的学校合作翻转课堂这种新的教学模式，甚至把游戏化的刚上也引入到教学过程中。这块是武少觉得难能可贵之处，在国内我们往往会看到很多同学一提到互联网和传统行业的结合就觉得原来的模式一无是处，互联网线上的方式就无往而不利。在这里可汗做法则说明，方式也好途径也罢其最终是要为用户来服务的，我们要去探索的是真正对用户有价值的模式而不是唯互联网论， &lt;/p&gt; 
  &lt;h3&gt;五，对行业远景的展望&lt;/h3&gt; 
  &lt;p&gt;可汗没有局限于仅解决当下的教育问题，对于教育的未来他也是做了非常深入的思考。如何应对不确定性，混龄教学，团体项目，课堂上不同的学生同时进行不同的学习项目。未来的证书更多是对学生的评估报告，成绩单上更重要的是学生创造力的体现。&lt;/p&gt; 
  &lt;p&gt;这些我看到都很激动，对于未来远景的描绘则正是一个创业者的能力，而这种描绘不是毫无根据的瞎想更多是基于对行业问题的深入洞察，对用户的深刻理解，在一线进过大量实践基础上得来的非常有其逻辑性的远景。 &lt;/p&gt; 
  &lt;p&gt;翻转课堂这本书是可汗同学自己的亲历史，也让我们得以了解他是怎么想的，是如何做的。就个人来看,无论我们做什么领域，都要敢于打破常规进行大量而深入细致的研究，从行业本身、从历史沿革、从用户人群、从方式途径上去探究，去思考，才能找到真正有价值的模式，而这种模式的发展也源于我们对远景的思考与展望。 &lt;/p&gt; 
  &lt;p&gt;作者：武绍卿（个人微信号：412133527），创业者。关注新技术发展、新商业模式，新领域创新。同时也关注创业公司的发展和成长过程中的各种问题。个人公众号：变革视点（公众号：yidonghuashidian）&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/%E8%BF%90%E7%94%A8%E5%9C%A8%E7%BA%BF%E5%B9%B3%E5%8F%B0%E6%8E%A8%E8%BF%9B%E8%AF%BE%E7%A8%8B%E6%95%99%E5%AD%A6%E5%88%9B%E6%96%B0</guid>
    <title>运用在线平台推进课程教学创新</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/%E8%BF%90%E7%94%A8%E5%9C%A8%E7%BA%BF%E5%B9%B3%E5%8F%B0%E6%8E%A8%E8%BF%9B%E8%AF%BE%E7%A8%8B%E6%95%99%E5%AD%A6%E5%88%9B%E6%96%B0</link>
    <pubDate>Fri, 9 Jun 2017 12:22:25 +0800</pubDate>
    <category>数字校园</category>
    <category>教学</category>
<atom:summary type="html">基于开源协作学习环境Sakai搭建在线教学平台，完善教学资源库建设，创新参与式教学模式，激发学生自主学习兴趣，提高实践教学效果。</atom:summary><description>&lt;p&gt;随着社交网络、移动终端等科技的发展，传统的课堂教学模式不断面临冲击，网络化学习和交流已为教师和学生所认识和掌握。如何快速、高效地建立适合学校自身特点和需求的在线教学平台并将其用好，是国内各类高校普遍面临的问题。为此我们结合网络与信息中心的软硬件资源与广大任课教师的实际需求，积极利用网络信息技术，基于开源协作学习环境Sakai搭建在线教学平台。平台整合了现有数字化校园系统的数据与服务，协助各二级学院各专业任课教师建立重点课程教学站点群，完善教学资源库建设，创新参与式教学模式，激发学生自主学习兴趣，提高实践教学效果。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/f2c34958-da43-44a5-a82b-8bb7fd41ec89&quot;&gt;&lt;img title=&quot;sakai01&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;sakai01&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/c7a102a4-d59a-44f8-a138-221a4069843c&quot; width=&quot;644&quot; height=&quot;385&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;Sakai是在全世界广泛使用的开源协作学习环境，提供了课件发布、作业提交、在线测试等多种工具并支持个性化定制，能够有效地满足网络辅助教学的需要，适合作为高校学生在线学习的基础平台。Sakai站点常用的工具有如下几种，配合运用以便充分有效地组织课程内容： &lt;/p&gt;
  &lt;ol&gt; 
    &lt;li&gt;课程大纲工具：显示各级别教学大纲和各专业授课计划等指导性文件。&lt;/li&gt; 
    &lt;li&gt;课程组织工具：以多层级页面形式显示课程的内容，项目站点中添加了多个课程组织工具，如课堂讲授内容和上机实训内容在导航栏中分别显示。使用此工具可以页面中加入文本、图片、视频和动画等多媒体内容，可以直接显示，也可用链接到子页面的形式实现。&lt;/li&gt; 
    &lt;li&gt;资源工具：以目录形式组织各类教学资源的下载，课程内容或其他工具页面也可以引用上传到资源区的各类文件。&lt;/li&gt;
  &lt;/ol&gt; 
  &lt;p&gt;每个班级则建有专用的课程站点，其内容各自独立。课程站点可在导航栏添加链接，直接访问教学项目站点中的公用资源，任课教师不需要在课程站点中重复添加，而只需要使用针对本班级的个性化工具集，课程站点可选用的工具主要有以下几种： &lt;/p&gt;
  &lt;ol&gt; 
    &lt;li&gt;主页工具：教师通过主页工具编辑课程的默认首页，对当前课程的内容和学习要点进行说明，发布关于教学活动的通知等。&lt;/li&gt; 
    &lt;li&gt;外部网站工具：通过链接访问教学项目站点中的公共资源。&lt;/li&gt; 
    &lt;li&gt;作业工具：教师可使用此工具根据向导提示编辑并发布课程作业，学生可以在线提交作业。作业工具还提供学生匿名互评功能，能起到检查回顾的作用，学生在增加参与感的同时巩固了所学知识。&lt;/li&gt; 
    &lt;li&gt;聊天室工具：此工具可为师生提供即时讨论的空间，学生在自主学习过程中可以随时提问，由教师和其他同学进行解答。&lt;/li&gt; 
    &lt;li&gt;讨论区工具：教师可在讨论区中发布主题帖，引导学生围绕指定主题进行讨论。&lt;/li&gt; 
    &lt;li&gt;练习与测验工具：教师可使用此工具编辑并发布标准化测试，教师可以选择固定题目或随机出题，学生测试结果可以自动记入成绩册。&lt;/li&gt;
  &lt;/ol&gt; 
  &lt;p&gt;通过教学平台站点群辅助教学过程，可以利用练习与测验工具检验学生对教学内容的掌握情况，使用调查工具收集学生的反馈，使用站点统计工具查看学生访问教学网站和浏览教学资源的详细记录，根据数据的可以化分析，进行全面的教学评价。在此基础上教研团队可以修改教学设计，调整教学活动，提高教学效果。任课教师得以减轻重复性工作，积累有价值的数据，开发新媒体教学形式。日常教学结合科研创新进入良性循环。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/9e784d03-a51a-451e-92f0-a3c263421049&quot;&gt;&lt;img title=&quot;sakai00&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;sakai00&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/e3015058-36d2-400a-b8b4-95690db24fc5&quot; width=&quot;644&quot; height=&quot;385&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;我们基于Sakai进行二次开发，建立在线教学平台并整合了学院数字化校园统一身份认证和教务系统的课程信息管理功能。此外我们还搭建了视频点播系统和视频会议系统，以便在线教学平台发布课程视频和开展远程互动教学。平台在每个新学期持续建立新的教学项目站点和课程站点，我们建立的第一个站点是发布平台使用教程和各项工具应用示例的“在线教学”站点，以便全体教师能够快速掌握建立教学站点并进行内容编辑和管理的相关技巧。此外我们还建立了《计算机基础》站点作为教学资源项目站点的标准示范。《计算机基础》是面向全校新生开设的公共必修课程，具有通识型、实用性和层次化的特点。由于非计算机专业的学生在后继的学习中，主要涉及各类应用软件的实际应用，因此本课程的教学重点是计算机应用操作技能，例如Office办公软件的基础应用和高级应用，要求学生掌握在学习和工作中熟练地使用各种应用软件能力。课程内容的模块化和评价方式的标准化，使其易于采用多媒体网络化在线教学模式。《计算机基础》课程教研团队使用该系统汇集现有教学资源，在教学过程中反馈效果和积累经验，并尝试开发新的教学形式。 &lt;/p&gt;
  &lt;p&gt;在线教学平台建立后逐步为教师和学生所熟悉和应用，教师可以根据需要自主建立教学项目站点。系统的周均访问用户达到百人以上，最高达到七百人，部分用户每周登录系统5次或以上，考虑到正常的课程教学一般每周只有2次课堂教学时间，对于许多学生而言，网络教学平台的使用时间已经超过了课堂教学的时间。平台每天访问时段从早上7时到晚上23时，使用时段与传统教学的时段互为补充，网络教学平台的使用拓展了教学的时间，为教学提供了另一片空间。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/43662cbb-74b5-470b-b557-1f360a0285b6&quot;&gt;&lt;img title=&quot;sakai03&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;sakai03&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/298506d8-6dbb-4ef9-9322-05c2baa5e4f8&quot; width=&quot;644&quot; height=&quot;379&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/time/entry/2016%E5%B9%B4%E4%B8%AD%E5%9B%BD%E4%BA%92%E8%81%94%E7%BD%91%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E6%8A%A5%E5%91%8A-%E5%88%86%E6%9E%90%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E6%80%81%E5%8A%BF</guid>
    <title>《2016年中国互联网网络安全报告》分析网络安全态势</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/time/entry/2016%E5%B9%B4%E4%B8%AD%E5%9B%BD%E4%BA%92%E8%81%94%E7%BD%91%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E6%8A%A5%E5%91%8A-%E5%88%86%E6%9E%90%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E6%80%81%E5%8A%BF</link>
    <pubDate>Wed, 31 May 2017 15:03:08 +0800</pubDate>
    <category>网络安全</category>
<atom:summary type="html">报告涵盖我国互联网网络安全态势分析、网络安全监测数据分析、网络安全事件案例详解、网络安全政策和技术动态等多个方面的内容。</atom:summary><description>&lt;p&gt;2017年5月27日，国家互联网应急中心（CNCERT/CC）发布&lt;a href=&quot;http://www.cert.org.cn/sites/main/preview/newsdetail.htm?tid=20170527151228908822757&amp;amp;col_id=12&quot; target=&quot;_blank&quot;&gt;《2016 年中国互联网网络安全报告》&lt;/a&gt;，汇总分析国家互联网应急中心自有网络安全监测数据和通信行业相关单位报送的数据。报告涵盖我国互联网网络安全态势分析、网络安全监测数据分析、网络安全事件案例详解、网络安全政策和技术动态等多个方面的内容。&lt;/p&gt; 
  &lt;p&gt;2016 年，移动互联网恶意程序捕获数量、网站后门攻击数量以及安全漏洞收录数量较2015 年有所上升，而木马和僵尸网络感染数量、拒绝服务攻击事件数量、网页仿冒和网页篡改页面数量等均有所下降。 &lt;/p&gt;
  &lt;h3&gt;一、木马和僵尸网络&lt;/h3&gt; 
  &lt;p&gt;抽样监测，2016 年约 9.7 万个木马和僵尸网络控制服务器控制了我国境内 1699 万余台主机，控制服务器数量较 2015 年下降 8.0%，近 5 年来总体保持平稳向好发展。其中，来自境外的约 4.8 万个控制服务器控制了我国境内 1499 万余台主机，其中来自美国的控制服务器数量居首位，其次是中国香港和日本。就所控制的我国境内主机数量来看，来自美国、中国台湾和荷兰的控制服务器规模分列前三位，分别控制了我国境内约 475 万、182 万、153 万台主机。在监测发现的因感染恶意程序而形成的僵尸网络中，规模在100 台主机以上的僵尸网络数量 4896 个，其中规模在 10 万台以上的僵尸网络数量 52 个。 &lt;/p&gt;
  &lt;h3&gt;二、移动互联网安全&lt;/h3&gt; 
  &lt;p&gt;2016 年，CNCERT/CC 通过自主捕获和厂商交换获得的移动互联网恶意程序数量 205 万余个，较 2015 年增长 39.0%，近 7 年来保持持续高速增长趋势。按恶意行为进行分类，前三位分别是流氓行为类、恶意扣费类和资费消耗类，占比分别为 61.1%、18.2% 和 13.6%。互联网恶意程序下载链接近 67 万条，较 2015 年增长近 1.2 倍，涉及的传播源域名 22 万余个，IP 地址 3 万余个，恶意程序传播次数达 1.24 亿次。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/d5e3967f-ee40-4a83-b6ff-b1f43f71a8f7&quot;&gt;&lt;img title=&quot;cncert01&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;cncert01&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/e5234e78-91ce-46b4-b4cd-25aa1e494f03&quot; width=&quot;504&quot; height=&quot;392&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;2016 年，CNCERT/CC 重点对通过短信传播，且具有窃取用户短信和通信录等恶意行为的“相册”类安卓恶意程序及具有恶意扣费、恶意传播属性的色情软件进行监测，并开展协调处置工作。全年共发现此类恶意程序 18414 个，累计感染用户超过 101 万人，用于传播恶意程序的域名 6045 个，用于接收用户短信和通信录的恶意邮箱账户 7645 个，用于接收用户短信的恶意手机号 6616 个，泄露用户短信和通信录的邮件 222 万封，严重危害用户个人信息安全和财产安全。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/9cdd59a2-ea3f-423c-b171-6de954c8bb54&quot;&gt;&lt;img title=&quot;cncert02&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;cncert02&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/f8baf18b-1277-42d8-972f-075082207a29&quot; width=&quot;504&quot; height=&quot;325&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;目前，移动互联网 APP 传播途径多样，包括应用商店、网盘、云盘和广告宣传等平台，且大量的未备案网站也在提供 APP 下载服务。在工业和信息化部的指导下，经过连续 4 年的治理，要求国内的应用商店、网盘、云盘和广告宣传等平台积极落实安全责任，不断完善安全检测、安全审核、社会监督举报、恶意 APP 下架等制度，积极参与处置响应与反馈，严格控制恶意 APP 传播途径。2016 年，CNCERT/CC 累计向 141 家已备案的应用商店、网盘、云盘的广告宣传等网站运营者通报恶意 APP 事件 8910 起，较 2015 年减少 47.8%，表明在移动互联网恶意程序持续快速增长的情况下，恶意 APP 在备案网站上传播的途径得到有效控制。 &lt;/p&gt;
  &lt;h3&gt;三、拒绝服务攻击&lt;/h3&gt; 
  &lt;p&gt;2016 年，CNCERT/CC 牵头组织通信行业和安全行业单位，宣布成立了中国互联网网络安全威胁治理联盟，并着力开展分布式拒绝服务攻击（以下简称“DDoS 攻击”）防范打击工作。经过协同治理，有效缓解了 DDoS攻击的危害，2016 年 监测到 1Gbit/s 以上的 DDoS 攻击事件日均 452 起，比 2015 年下降 60%。但同时发现，2016 年大流量攻击事件数量全年持续增加，10Gbit/s 以上的攻击事件数量第四季度日均攻击次数较第一季度增长 1.1 倍，全年日均达 133 次，占日均攻击事件的 29.4%。另外100Gbit/s 以上的攻击事件数量日均在 6 起以上，并监测发现阿里云多次遭受 500Gbit/s 以上的攻击。从攻击流量来源来看，在 2016 年攻击事件中，超过 60% 的攻击流量来自境外；从攻击目的来看，67% 涉及互联网地下黑色产业链；从攻击方式来看，反射攻击依旧占据主流；从攻击源 IP 地址对应的设备来看，除了传统的 PC“肉鸡”和 IDC 服务器外，智能设备逐渐被利用为 DDoS 攻击工具。  &lt;/p&gt;
  &lt;h3&gt;四、安全漏洞&lt;/h3&gt; 
  &lt;p&gt;2016 年，国家信息安全漏洞共享平台（CNVD）共收录通用软硬件漏洞 10822 个，较 2015 年增长 33.9%。其中，高危漏洞收录数量高达 4146 个（占38.3%），较 2015 年增长 29.8%；“零日”漏洞 2203 个，较 2015 年增长82.5%。漏洞主要涵盖 Google、Oracle、Adobe、Microsoft、IBM、Apple、Cisco、Wordpress、Linux、Mozilla、Huawei 等厂商产品，其中涉及 Google 产品（含操作系统、手机设备以及应用软件等）的漏洞最多，达到 819 个，占全部收录漏洞的 7.6%。按影响对象类型分类，应用程序漏洞占 60.0%， Web 应用漏洞占 16.8%，操作系统漏洞占 13.2%，网络设备漏洞（如路由器、交换机等）占 6.5%，安全产品漏洞占 2.0%，数据库漏洞（如防火墙、入侵检测系统等）占 1.5%。2016 年，CNVD 加强原创通用软硬件漏洞的收录工作，成为全年漏洞收录数量一个新的增长点，全年接收白帽子、国内漏洞报告平台、安全厂商等报送的相关漏洞 1926 个，占全年收录总数的 17.8%。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/f43124b1-dbac-4424-956d-a82e244a34da&quot;&gt;&lt;img title=&quot;cncert03&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;cncert03&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/fe696175-4d5a-4196-a6d9-ae286fae7dd0&quot; width=&quot;524&quot; height=&quot;344&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;h3&gt;五、网站安全&lt;/h3&gt; 
  &lt;p&gt;2016 年，CNCERT/CC 监测发现约 17.8 万个针对我国境内网站的仿冒页面，页面数较 2015 年下降 3.6%，约 2 万个 IP 地址承载了上述仿冒页面，其中位于境外的 IP 地址占 85.4%。从承载的仿冒页面数量来看，来自中国香港的数量最多，4332 个 IP 地址共承载了仿冒页面 2.8 万余个，其次是中国境内和美国，承载的仿冒页面均约为 1.7 万个。为有效防止网页仿冒引起的网民经济损失，CNCERT/CC 重点针对金融行业、电信行业网上营业厅的仿冒页面进行处置，全年共协调处置仿冒页面 52836 个。从处置的页面类型来看，积分兑换和用户登录仿冒页面数量最多，分别占处置总数的 32%。从承载仿冒页面 IP 地址归属情况来看，绝大多数 IP 地址位于境外，主要分布在中国香港、美国及中国台湾，其中位于中国香港的 IP 地址超过境外总数的一半。针对跨境仿冒页面的处置，继续与国际网络安全组织加强合作，全年协调境外安全组织处置跨境网页仿冒事件 14515 起。 &lt;/p&gt;
  &lt;p&gt;2016 年，CNCERT/CC 监测发现约 4 万个 IP 地址对我国境内 8 万余个网站植入后门，网站数量较 2015 年增长 9.3%。境外有约 3.3 万个（占全部 IP 地址总数的 84.9%）IP 地址通过向网站植入后门对境内约 6.8 万个网站进行远程控制。其中，来自美国的 IP 地址最多，占比 14.0%，其次是来自中国香港和俄罗斯的 IP 地址。从控制我国境内的网站总数来看，来自中国香港的 IP 地址控制数量最多，有 1.3 万余个，其次是来自美国和乌克兰的IP 地址，分别控制了 9734 个和 8756 个网站。 &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/cb3ae0ec-0fa1-404d-b6ac-b0dac95b2736&quot;&gt;&lt;img title=&quot;cncert04&quot; style=&quot;border-width: 0px; border-style: initial; border-color: initial; background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px;&quot; border=&quot;0&quot; alt=&quot;cncert04&quot; src=&quot;http://study.ywicc.edu.cn/roller/time/mediaresource/cefd7c3a-179d-41b4-950a-1bb66a64450f&quot; width=&quot;534&quot; height=&quot;394&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;2016 年，CNCERT/CC 监测发现，我国境内约 1.7 万个网站被篡改，较 2015 年减少 31.7%，其中被篡改的政府网站有 467 个，较 2015 年减少47.9%。从网页篡改的方式来看，被植入暗链的网站占全部被篡改网站的比例高达 86%，是我国境内网站被篡改的主要方式。从境内网页被篡改的类型分布来看，以 .com 为后缀的商业网站被篡改的数量最多，占总数的72.3%，其次是以 .net 为后缀的网络服务公司网站和以 .gov 为后缀的政府网站，分别占总数的 7.3% 和 2.8%。 &lt;/p&gt;
  &lt;p&gt;通过报告可以看出，目前移动互联网安全需要格外注意，虽然恶性程序较之前有所减少，但是漏洞依然大量存在。业界应对移动互联网加强安全监测，普通用户也要提高防护意识。&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/100/entry/%E4%B8%AA%E4%BA%BA%E6%97%B6%E9%97%B4%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7-ldquo-365%E6%97%A5%E5%8E%86-rdquo</guid>
    <title>个人时间管理工具“365日历”</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/100/entry/%E4%B8%AA%E4%BA%BA%E6%97%B6%E9%97%B4%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7-ldquo-365%E6%97%A5%E5%8E%86-rdquo</link>
    <pubDate>Mon, 11 Jul 2016 15:44:34 +0800</pubDate>
    <category>指南</category>
    <category>应用软件</category>
    <category>日历</category>
    <category>时间管理</category>
<atom:summary type="html">推荐全平台时间管理工具“365日历”</atom:summary><description>&lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/1fdbb3f0-0a18-42c8-a59f-149b55d78838&quot;&gt;&lt;img width=&quot;500&quot; height=&quot;415&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/1fdbb3f0-0a18-42c8-a59f-149b55d78838&quot; alt=&quot;365rili.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;“365日历”是一款功能完善的日历应用，除了显示基本的公历、农历和天气信息，还提供日程、待办、任务、生日提醒和多人日历等。用户可以在手机、平板、PC各平台同步查看时间安排数据。&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/515bcce5-53ca-4aa5-9950-ca5bb06b90cb&quot;&gt;&lt;img width=&quot;500&quot; height=&quot;438&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/515bcce5-53ca-4aa5-9950-ca5bb06b90cb&quot; alt=&quot;timg.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; 
  &lt;p&gt;365日历能够设置复杂的日程安排，例如“每六个月在当月的第二个星期三下午去看牙医”。在Android手机上安装365日历应用，推荐在桌面加一个“日程列表”窗口小部件，方便随时添加和查看日程和待办事项，并替换系统默认的时间和天气部件。&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/23f4f133-3ff2-4890-bbc3-18b4b4a6403a&quot;&gt;&lt;img width=&quot;380&quot; height=&quot;677&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/23f4f133-3ff2-4890-bbc3-18b4b4a6403a&quot; alt=&quot;widget.jpg&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;点击进入&lt;a target=&quot;_blank&quot; href=&quot;http://www.365rili.com/&quot;&gt;365日历网&lt;/a&gt;。&lt;/p&gt;</description>  </item>
  <item>
    <guid isPermaLink="true">http://study.ywicc.edu.cn/roller/100/entry/%E4%B8%AA%E4%BA%BA%E8%AE%B0%E8%B4%A6%E5%B7%A5%E5%85%B7-ldquo-%E9%9A%8F%E6%89%8B%E8%AE%B0-rdquo</guid>
    <title>个人记账工具“随手记”</title>
    <dc:creator>星辉</dc:creator>
    <link>http://study.ywicc.edu.cn/roller/100/entry/%E4%B8%AA%E4%BA%BA%E8%AE%B0%E8%B4%A6%E5%B7%A5%E5%85%B7-ldquo-%E9%9A%8F%E6%89%8B%E8%AE%B0-rdquo</link>
    <pubDate>Wed, 9 Mar 2016 14:22:21 +0800</pubDate>
    <category>指南</category>
    <category>应用软件</category>
    <category>理财</category>
    <category>记账</category>
<atom:summary type="html">推荐全平台记账工具“随手记”</atom:summary><description>&lt;p&gt;“随手记”是金碟软件推出的一款个人记账工具，可以帮助用户随手记账、明白消费、清楚理财。随手记的界面简洁美观，基于生活场景设计，单手即可完成操作，随时随地查看账目记录和统计图表，支持移动客户端和Web页数据实时同步，还支持数据的备份和导出。&lt;/p&gt; 
  &lt;p&gt;&lt;img src=&quot;http://bangzhu.feidee.com/bocadmin/Public/editor/attached/image/20151111/20151111193902_37993.png&quot; width=&quot;280&quot; height=&quot;495&quot; /&gt; &lt;br /&gt; &lt;/p&gt; 
  &lt;p&gt;除了同类软件都能实现的基本记账功能，随手记还提供了许多非常实用的特色功能：拥有丰富的分类和子类，并且分类和子类都可以自定义；可以设置记账模板，对于一些经常记录的分类，比如早午晚餐，日常用品都可设置模板，记账时只需输入金额即可；可以将每月固定的支出或收入自动记录账目；可以为每个家庭成员例如孩子设立专门账户统一收支等等。
&lt;/p&gt; 
  &lt;p&gt;&lt;a href=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/e141d663-8604-4a59-8641-04aa962a82ab&quot;&gt;&lt;img style=&quot;background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;&quot; title=&quot;CashManager&quot; border=&quot;0&quot; alt=&quot;CashManager&quot; src=&quot;http://study.ywicc.edu.cn/roller/100/mediaresource/55a77cd2-a563-4180-942f-8a546f463021&quot; width=&quot;274&quot; height=&quot;484&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
  &lt;p&gt;点击进入&lt;a href=&quot;https://www.sui.com/register.jsp?inviteKey=4e6cb8ff3&quot; target=&quot;_blank&quot;&gt;随手记官方主页&lt;/a&gt;&lt;/p&gt;</description>  </item>
</channel>
</rss>