基础篇1 基础知识

Python01基础知识 | 01梧桐长成鸾凤至,环境搭好代码来来源网址: http://www.ukoedu.com/course?course=python01&chapter=00
作者: 陈富贵

本节要点与难点

  1. 非计算机专业的人士也可以学习程序设计,而且会对生活、工作和学习带来巨大的效率提升。
  2. Python语言是目前最流行、也最适合非计算机专业人士学习的编程工具之一,一方面因为它的语法简洁现代,另一方面则是因为其拥有异常丰富的第三方工具库。对于我们日常生活中可能遇到的绝大多数需求(比如图片识别、网页抓取、数据分析、办公自动化……),都可以找到别人做好的工具模块,只需简单调用就能实现期望的功能。
  3. 尽管Python易学易用,但也必须经过充分的练习和实践才能真正掌握、真正自主编写代码。因此在学习过程中必须注意勤加练习、在日常生活和工作中随时思考是否可以通过编写python程序解决机械重复的事务。
  4. 本课程分为《基础篇》、《提高篇》和《实战篇》三个部分。《基础篇》讲解基本知识、培养编程思维,学习之后可以开发简单的实用程序;《提高篇》则会补全之前忽略的重要细节和知识技巧,同时结合各种应用领域(文件、网抓、数据、网站等)的基本技术,进一步讲解高级Python语法与知识,学习之后即可具备独立开发复杂程序的能力;《实战篇》则分为若干专题,分别针对不同业务领域进行专门的深入讲解,所授内容将不限于Python本身,以帮助对该领域有兴趣的同学具备尽可能扎实的技术基础和知识储备。

基础篇1 基础知识 - 图1

参考阅读:Python能做什么

就像杨老师在这一节《导言》视频中介绍的:任何人(无论是否从事计算机方面的工作)学习一点编程,都会给自己的工作和生活带来极大的便利。事实上,即使不考虑实际应用,学习编程本身也是对一个人逻辑思维能力组织管理能力的极佳锻炼。而在所有当代编程语言中,Python则是最容易学习也最容易使用的工具之一。

如果大家对视频中介绍的Python用途感觉还不过瘾,那么也许可以从下面这些文章中了解更多Python的神奇应用:

知乎:学了 Python 能用来做什么? (要知道,知乎网站就是用Python写的哦)

知乎:你都用 Python 来做什么?

36氪: 大家都在学的编程语言 Python,可以用来干什么?

本节要点与难点

  1. 简单地说,“编写程序”就是用某种语言来描述一个工作流程。所以写计算机程序与我们用word撰写工作文档,无论过程还是内容都非常相似。
  2. 我们编写的程序一般也要保存为一个文本文件,以便将来反复调用,但是不建议使用 “.txt” 作为这个文本文件的扩展名。比如Python源代码虽然也是文本文件,但一般会以“.py”作为扩展名。
  3. 无论使用哪一种计算机语言(C、Java、Python …… ),都需要在计算机上事先安装一个 “翻译软件” ,使其能够把我们编写的程序代码翻译成计算机真正理解的“二进制”代码,否则将无法运行。根据语言特点的不同,这种翻译软件的专业名称可能是 “编译器”、“解释器”、“汇编器”、“虚拟机” 等等,具体含义请见本节参考资料。
    基础篇1 基础知识 - 图2
  4. Python语言的“翻译软件”称为“Python解释器”,可以到 python官网 下载安装。
  5. 目前流行的Python语言版本包括 2.x 与 3.x 两个系列,也就是常说的 “Python2” 和 “Python3”。尽管官方已经声明 Python2 将在2020年停止支持,但由于前些年很多遗留系统都大量采用Python2开发,所以目前在实务中仍然占有很大比例。
  6. 因为Python2与Python3的某些语法要求不同,而且二者在字符编码等重要方面也有差异,所以往往造成代码不能通用。无论根据官方教学建议,还是考虑未来长远趋势,初学者如无必要(比如公司要求必须使用Python2)应优先学习Python3,而在需要使用Python2时即时查阅资料即可
  7. Python官网提供了很多Python解释器以供下载,每一种都针对不同的语言版本和操作系统,所以下载时应“对号入座”。
  8. 在Windows下安装Python解释器时,建议自定义安装并选中 “Add Python 3.x to PATH” ,然后要指定一个合适的文件夹作为安装路径。假如忘记选中“Add to Path”这个选项,那么在安装之后应该按视频所述,在 “控制面板”——“系统和安全”——“系统”——“高级”——“环境变量”中(以Win10为例,其他Windows版本名称类似),修改Path变量,在其末尾添加安装目录。启动Windows的“命令窗口”,输入“python”后就可以进入Python的交互式运行界面。基础篇1 基础知识 - 图3
  9. 苹果电脑(Mac系统)和 Linux 系统下安装和运行Python的过程请见本节参考资料。
  10. Windows下,在安装好Python解释器之后,只要直接双击“.py”文件,该程序就会自动运行。
  11. 不建议使用Windows记事本和Word等软件编写Python程序,因为它们会导致编码问题或自动加入很多非Python语言内容。建议大家使用 pycharm、jupyter、vscode 等专业的程序开发工具,或者至少使用Python官方自带的IDLE编辑运行环境。由于所有同学都拥有IDLE,所以尽管其相对简陋,《基础篇》视频仍采用该编辑器作为教学演示。

基础篇1 基础知识 - 图4

参考阅读:Mac中安装Python

如果您使用的是 MacOS X 等版本的苹果电脑,那么系统已经自带了 Python2.7 ,可以直接使用。不过如我们课程所述,初学者最好再安装一个 Python3.X 版本以便学习。
安装Python3无需卸载系统自带的Python2,二者可以“和平共处”、根据需要随时选用。
在Mac电脑中安装Python3的主要方法有两种:使用软件管理器Homebrew或者直接从 python.org 官网下载 python 解释器。本文主要介绍后一种方法:
1. 登录 Python官网 ,按视频中所述步骤找到适合自己的Mac版Python解释器安装包并下载。
2. 下载安装包后,双击运行并按提示操作即可完成。
3. 安装后可以在电脑的 “Application” 文件夹中看到一个新的 “MacPython 3.x” 文件夹,里面即有 IDLE 开发环境等各种开发工具,运行即可进入开发模式。 4. 安装后还可以发现系统中多了一个 “/Library/Frameworks/Python.framewok” 文件夹,里面存放的就是运行Python程序时所需的标准库等组件,除非需要卸载Python,否则不要变动此文件夹。 5. 与Windows下一样,Mac系统中除了可以在IDLE中运行Python程序外,也可以在命令窗口中运行。具体方式就是在系统中找到 “终端” 并运行(“Finder”——“Applications”———“Utilities”———“Terminal”);然后在其中输入 python3 abc.py 形式的命令。不过在此之前,要确保“/usr/local/bin”已经被添加在系统搜索路径中,以便MacOS能够找到Python解释器。具体原理与视频中介绍的Windows环境变量相似。

本节课程问答集锦

提问: 请杨老师讲解下这是什么问题,谢谢:“ >>> python e:\统计工作.txt File “”, line 1 python e:\统计工作.txt ^ SyntaxError: invalid character in identifier ”
回答: 请大家一定要注意看视频里的运行方式。如果是在windows命令窗口里面运行python,那么应该在windows系统提示符(类似 “C:>”)后面输入 “ python e:\统计工作.txt ”,意思就是告诉windows,请启动python解释器来运行这个代码。
而在你粘贴的命令中可以看出,你之前已经在 “C:>“ 后面敲入 “python”、从而进入了python 解释环境(特点就是提示符变为 “>>>” )。这时你已经进入了python交互式运行环境,所以不能再直接运行程序代码文件,而是可以直接执行类似 >>>1/2 这样的语句命令了(详见第二回)。所以Python交互环境把 “ python e:\统计工作.txt File ” 这句话当做了一个python语法的程序语句,当然执行就会出错。

Python01基础知识 | 02算术符号遵循惯例,版本差异务必当心来源网址: http://www.ukoedu.com/course?course=python01&chapter=02
作者: 陈富贵

本节要点与难点

  1. 在命令行窗口敲入“python” 或双击运行 IDLE 之后,都会直接进入“Python交互式运行窗口”。该窗口可以通过“一问一答”的方式逐句运行Python代码。
  2. 交互式运行窗口的好处在于使用方便 —— 无需创建和保存程序文件,直接敲入符合python语法的代码就可以马上看到执行结果,因此适合执行临时性的计算,也适合课堂学习中的语法练习、以及开发中的语句试验等情境。但是其缺点则是不像真正的程序文件那样可以随时反复运行,因此不适于系统化的应用。
  3. Python的基本四则算术运算符包括 + - / ,注意必须全部为英文半角字符。事实上,Python语法中规定的所有符号都应当使用英文半角,否则即使外观相同,也无法被正确解析,导致语法错误。所以在日常开发中,一旦发现莫名其妙的语法错误,首先要思考*是不是误敲了中文字符!
  4. 半角圆括号可以用于改变运算优先级。即使需要多层嵌套的括号,每一个也都必须是圆括号,因为中括号和大括号另有含义。
  5. 在Python3中,整数与整数相除的结果自动为小数,比如 7/2 输出 3.5 ,2/1 输出 2.0 。而在Python2中,整数与整数相除的结果仍然是整数,比如 7/2 输出 3。如果希望Python2中整数相除的结果为精确小数,可以使用float等函数,比如 float( 7/2 ) ,《提高篇》讲解数据类型时会对此详细介绍。
  6. 在Python3中,如果希望整数相除的结果为整数(自动舍弃小数部分),可以使用“整除运算符” // 。但是在做负数除法时,由于该符号返回“小于真实结果的最大整数”,所以返回结果可能偏小,比如 7//-2 的结果是-4 而不是 -3。
  7. 幂运算符号为 。幂运算优先级高于乘除法,所以 2 1/2 的结果是 1.0 而不是 1.414 。所以要注意使用圆括号改变优先级。
  8. 百分号 % 为 “求余运算” 或 “模运算” (严格的说,这两个概念还有细微差别,详见参考资料),可以返回两个数字相除的余数部分。灵活使用模运算可以简单实现很多复杂的需求。本课程后面会多次用到。
  9. 在命令窗口中运行Python程序,需要在操作系统提示符(比如Windows的“C:>”)后面输入 “ python 程序名.py ”。在IDLE的代码编辑器编写程序时,通过“Run”菜单或按下F5键就可以直接运行程序,运行结果会显示在IDLE的交互式窗口中。
  10. 在交互式窗口中,只要输入一行python代码(比如 x=5+3)就可以自动输出结果。但是对于python程序文件来说,只有当程序中存在print等函数(关键词print必须全部小写)时,才会输出其括号里面的内容,否则虽然计算完成,但不会输出任何结果。基础篇1 基础知识 - 图5
  11. 默认情况下,python2中的print可以不写括号(因为python2中的print是命令而非函数,详见《基础篇》第三回对函数概念的介绍)。

参考阅读:模运算与求余

首先说明:本节课程提到的模运算“%”将会在后面课程中深入讲解。这里只是先为有兴趣的同学简单科普一下“模运算”与“求余运算”两个经常混淆的概念,大家对本文完全可以选择忽略。
首先,“模运算”与“求余运算”都是求取除法中产生的“余数”。比如 “7÷3”产生的余数就是1,所以无论对7和3采用“模运算”还是“求余运算”,得到的结果都是 1 。这也就是为什么我们在学习程序设计时经常把“模运算”与“求余运算”混为一谈的原因。
但是在数学专业人士的眼中,二者是有很大区别的。假如除数与被除数一正一负,那么这个区别就显现出来了:比如对 7 和 -3 进行模运算,得到的结果应该是-2,而求取余数的结果则应该是-1。这是为什么?因为二者的实际规则如下:
假设有两个数无法整除,也就是相除的结果是小数,比如: 5/-3 = -1.67,那么:
在求余运算中,把二者相除的商定义为-1,也就是把 -1.67 向 “0” 靠近所得到的第一个整数。由于 “ 被除数 = 除数 X 商 + 余数 ”,所以此时等式应为 “ 5 = -3 X -1 + 余数 ”,可得余数为 2 。也就是说,按照求余运算的规则, 5/-3 的结果是 2 。
而在求模运算中,则把 5 和 -3 相除的商定义为 -2 ,也就是把 -1.67 向 “负无穷大” 靠近所得到的第一个整数。于是根据 “ 被除数 = 除数 X 商 + 余数 ”,所以此时等式应为 “ 5 = -3 X -2 + 余数 ”,可得余数为 1 。也就是说,按照求余运算的规则, 5/-3 的结果是 1 。
在C语言中,“%”虽然被称为“模运算”,但其实执行的是上述“求余运算”的规则。而在Python语言中,“%”则是采取了上述“求模运算”的规则。所以在C语言和Python语言中分别执行 “5 % -3”,我们会看到完全不同的结果。
此外补充一点:一般说来,求模运算规定除数禁止为负数,Python2.5.1版本以前也忠实执行了该规定。所以在Python2.4.7等版本中,“5%-3”其实无法执行。不过从2.5.1版本开始,Python已经允许把负数作为除数。

练习1:书写算式

请将以下算式写成Python代码,然后在Python交互式环境中运行,看看是否会有语法错误。
接下来打开IDLE或你自己喜爱的Python程序编辑器,将该代码保存为一个Python程序文件(如 test.py),再运行并观察结果。
点击上方的“思路提示”标签,可以看到注意事项;点击“参考答案”标签可以看到参考代码与正确运行结果。

基础篇1 基础知识 - 图6

思路提示

  1. 请确认计算的优先级
  2. 可以使用 ** 进行幂运算。求平方根其实就是求 1/2 次幂。
  3. 可以使用圆括号改变优先级。注意:只能使用圆括号,式子中的方括号与花括号一律都用圆括号代替。
  4. 所有符号等应该是英文半角。

练习2:思考运算结果

请思考下面这两行代码的运行结果。确认自己想清楚后,在Python交互式窗口中分别运行并验证。
-(9//2)
-9//2
如果发现运行结果与预想的不同,可以点击上面“思路提示”了解内情。

思路提示
二者运行结果不同的原因主要在于两点:

  • 括号会改变优先级。所以二者一个是用正九整除二,一个是用负九整除二。
  • 整除符号 // 返回的是 “小于真实结果的最大整数” ,所以 -9//2 的结果是 -5 而非 -4 。

本节课程问答集锦

提问: “ 2 ** 1 / 2 ” 输出为什么是1.0,而不是1呢?
回答: 很好的问题。就像视频里提到的,如果是在Python2中,那么整数相除的结果仍然是整数,假如有小数部分也会自动去除。但是在Python3中,除法符号 “/” 会直接把整数除法的结果视作浮点数(带小数点的数字),无论结果有没有小数部分,所以即使是 2 / 1 这样的算式,输出结果也是 2.0 。如果不想要小数点,可以使用类型转换函数 int ( 2 / 1 ) 。具体内容我们在《提高篇》讲解数据类型时介绍。

Python01基础知识 | 03单条语句独占单行代码,多种函数分属多个模块来源网址: http://www.ukoedu.com/course?course=python01&chapter=03
作者: 陈富贵

本节要点与难点

  1. 默认情况下,一个完整语句应当写在一行代码中,不能像C语言那样随意拆分成多行书写。否则每一行都会被Python解释器当做一个完整的语句并执行,引发语法错误或逻辑错误。
  2. 如果一个语句确实很长,需要拆分多行书写,那么可以在代码行末敲入反斜线“\”以示该行尚未结束。此外,包含在各种括号中(圆括号、方括号、花括号)的单条语句也可以跨行书写。Python也允许使用半角分号“;”将多个语句合并在一行书写。不过无论“\”还是“;”,都不符合Python的规范化建议。
  3. 每一行代码都必须左端对齐,而且第一行代码最前面不能有任何空格(包括TAB缩进)。关于缩进的问题,《基础篇》第6回讲解If语句时会详细介绍。
  4. “函数”可以看做专门执行某一种功能的“小程序”,调用格式为 函数名( 参数1, 参数2, …… ) ,比如 sin(5) 就是求取数字5的正弦值。注意:如果括号中有多个参数,参数之间要用半角逗号隔开。
  5. Python环境自带了大量针对常用功能的函数,但是这些函数都按照功能类别分别存放在不同的 “模块” 中。如果需要调用某个函数,应当先用 import 模块名 将该模块引入,然后在程序中即可以 模块名.函数名(参数列表)的形式调用该函数。这些在安装Python后就自动存在的模块,可以称为 “Python标准库”。
    基础篇1 基础知识 - 图7
  6. 事实上,import语句可以写在程序中的任何位置。不过为便于管理,我们一般将它们写在程序的最前面。而对于 print、max、min 等最常用的一些函数,Python则将其存放在一个名为 “builtins” 的模块中。该模块是一个“内嵌模块”,每次启动Python解释器都会自动导入,不需要我们手写import语句。
  7. Windows版Python的标准库中有一个winsound模块,其中的函数 Beep(频率,时长) 可以控制电脑蜂鸣器发出指定音频的声音。
  8. 除了Python自带的标准库外,各领域人士也都开发了大量的第三方工具库。下载安装这些工具库后,就可以使用import语句像导入标准模块那样引入它们,并调用其中的函数等工具来实现各种复杂专业的功能。基础篇1 基础知识 - 图8
  9. 如果把函数看做一个 “ 输入 —— 处理 —— 输出 ” 的模型,那么软件系统乃至计算机本身都可以看做一个函数,只不过复杂程度不同而已。

参考阅读:函数式编程

在本节视频的末尾,杨老师提到“计算机系统本身就是一个函数”。事实上,这一思想从计算机科学之父 —— 艾伦·麦席森·图灵 —— 设计的“图灵机”模型开始,就已经融入了程序设计的灵魂。而这几年 “函数式编程语言” 的兴起和大热,就是对这一思想不同程度的实现。
简单的说,函数式编程就是一种“把电脑运算视作函数计算”的编程思想,而基于这一思想所设计的语言,就称为“函数式编程语言”,比如经典的Lisp、Prolog,以及新兴的Haskell、ErLang等。由于函数式编程在很多情境中可以大幅降低代码复杂度,所以Java等其他语言现在也都纷纷添加了对函数式编程的支持,其中自然也包括Python。
不过对于大多数初学者来说,函数式编程的理念并不容易接受,所以我们把Python的函数式编程内容放在了《提高篇》中讲解。如果同学有兴趣,可以通过阮一峰老师的博文 “函数式编程初探” 了解一二。

参考阅读:Beep与蜂鸣器

Beep函数的原义是“调用计算机蜂鸣器振动发声”。真正的蜂鸣器是类似磁性或压电陶瓷片结构,可以根据电源频率直接转换成对应音频(振动频率)。二十年前的计算机普遍配置了这种蜂鸣器,用于在计算机故障时发出不同音高的警报,也常被一些软件用来配置音乐。甚至还有人开发了一个小程序,可以在后台自动调用蜂鸣器,发出人耳听不见的高频声音(超声波)用来驱赶蚊子(杨老师亲测不怎么管用)。
不过现在的电脑普遍都用其他类型的发声装置替代了传统蜂鸣器,甚至取消了这一功能。所以现在运行 Beep() 函数时可能是不再是纯粹频率振动发声,因此也就无法发出超声波等特殊频率声音。有同学提问为什么在自己电脑上Beep函数无法成功,可能也是因为这台电脑干脆不再提供蜂鸣功能。
本节课程(及下面一两节)使用Beep只是为了让大家利用仅有的一点Python知识尽可能做出些“不那么枯燥”的程序,重点还是在函数的用法和意义上。所以即使无法使用Beep函数,只要看懂本章知识点和案例即可,练习时可以改用print函数把频率数字打印出来作为替代。

练习1:使用标准模块函数

请编写一个python程序,其中除import语句外只包含一行代码,运行后可以在 cos(365) 和 sin(365) 二者中选取数值较大的一个,输出到屏幕上。

思路提示
本练习可以参考Excel中书写函数(公式)的方式,将不同函数层层嵌套在一起。
相关函数可以在math模块中找到。
注意括号、逗号等需要使用英文半角符号。

练习2:用winsound作曲

(此作业供Windows学员思考)
请编写一个python程序,使用视频课程中介绍的 winsound 模块编写一个乐曲程序,运行之后可以利用蜂鸣器播放《两只老虎》第一句的旋律。
该旋律用简谱标记为: 1 2 3 1 1 2 3 1 3 4 5 。其中各个音阶的对应频率如下表所示(1=C):

基础篇1 基础知识 - 图9

思路提示
可以将每个音阶写成一个Beep函数调用,即每行代码输出一个音阶。
注意:Beep函数的第二个参数(时长)的单位是毫秒(千分之一秒)而非秒。
同时由于系统和硬件细节问题,该参数并不能精确控制蜂鸣器时间,因此本例只要播放声音即可,不必强求节拍精准。

本节课程问答集锦

提问: winsound.Beep 函数使用错误!显示 RuntimeError: Failed to beep
回答: 现在的电脑普遍都用其他类型的发声装置替代了传统蜂鸣器,甚至取消这一功能。所以如果你的程序代码正确但是电脑无法调用Beep函数不发声,可能就是这台电脑不提供蜂鸣功能。不过这不影响学习进度,你可以把它改成print语句,观察一下程序流程没有问题就行。后面课程里我们不会再用到Beep,而是用wav、MP3等音频文件发声。
本章页面的参考资料中有关于蜂鸣器的介绍,可以配合阅读。

Python01基础知识 | 04变量命名须知种种惯例,数据存储要靠层层关联来源网址: http://www.ukoedu.com/course?course=python01&chapter=04
作者: 陈富贵

本节要点与难点

  1. 可以使用int()函数将小数等转换为整数,以免在Beep()等严格要求整数的地方产生语法错误。int与print一样是内建函数,不必事先import。
  2. 对于程序中反复出现的数字、文本、中间结果等数据,都可以使用变量来存储和代替。
  3. 变量命名的要求和建议:
    • 尽可能使用有意义的文字给变量命名,比如 power_level , tax_rate 等。
    • 在Python2中,变量名只能由半角的字母、数字和下划线构成;而在Python3中,由于采用了Unicode默认编码,所以任何真实语言中存在的文字符号都可以用来做变量名。
    • 无论Python2还是Python3,变量名都不能以数字开头。
    • 变量名不能与Python语法中规定的保留字相同,比如import等。而如果变量名与标准函数名相同(比如Python3中的print),虽然符合Python语法,但是仍然会在运行中造成令人困惑的运行结果,所以也应尽量避免。
    • 前后各有两个下划线的变量名,往往是Python系统自己定义的一些重要变量,所以轻易不要使用这些名字。
    • Python是大小写敏感语言,所以大小写字母不同将被视作不同变量,比如 abc 和 aBc 。
  4. 等号 “=” 的作用是 “赋值” 而非 “判断相等” ,执行的操作是“先算等号右边的结果,再将其赋值给左边”。 所以 x=x+1 是将x的数值加上1以后再赋值给自身,也就是让x的值增一。
  5. 对于普通的Python变量,Python解释器如果需要引用它的数值,需要通过以下几个步骤:
    • 根据该变量的名字(比如“x”)找到它在“变量区域”中的内存地址编号(相当于门牌号);
    • 到“变量区域”该“门牌号”的存储单元里,找到另一个“门牌号”,即该变量的数值存储在数据区域的什么位置;
    • 最后到“数据区域”中找到该“门牌号”,从而在对应的存储单元里找到该变量的真正数值。
    • 基础篇1 基础知识 - 图10
    • 基础篇1 基础知识 - 图11
  6. Python中使用变量无需事先定义。但是如果一个变量尚未赋值,就直接尝试读取其数值用于运算处理,Python解释器会报出语法错误。
    基础篇1 基础知识 - 图12
  7. 所谓程序,就是让变量不断变化的过程。

练习1:求解方程

初中代数里学过,二元一次方程的解如下图所示:
基础篇1 基础知识 - 图13
请编写一个程序,只要在代码中指定a、b和c三个变量的数值,就能够输出该方程的两个解(目前不必考虑方程无解的情况)。

思路提示
在本题目中,计算公式是固定的内容、而需要视情况变化的则是a、b、c三个参数:计算不同的方程式,需要使用不同的参数值。所以应当将这三个参数定义为变量。按此思路,解决问题的关键如下:

  1. 在程序一开始定义三个变量(比如就叫做a、b和c)并根据待解方程式对其赋值;
  2. 使用上节课讲解的运算符写出计算第一个解的表达式
  3. 在该表达式外面套上print函数,从而使其运算结果显示在屏幕上
  4. 重复第2步,写出第二个解的表达式,并用print函数显示出来

特别注意: 1/2a 与 1/(2a) 是完全不同的两个算式!前者是“先除以2,再乘以a”,后者则是 “除以 2a” 。如果搞错优先级,计算结果将会出错!

练习2:计算复利

请编写一个程序用于计算“复利”,也就是俗称的“利滚利”。该程序至少要包含两个变量(名字自己决定),分别用于代表最初借入的“本金”以及固定的年利率(比如0.1)。程序运行后则可以输出在这个指定的本金和利率下,借款一年共计需要偿还多少本息,借款两年、借款三年以及借款四年分别需要偿还多少。要求显示的金额自动取整,不带有小数点。
比如,如果在程序中设定本金是100元、利率是0.2,那么程序输出结果应该如下:
120
144
172
206
关于复利算法的说明:在上述示例中,第一年欠款总额等于本金100元加上当年利息(100 X 0.2)即20元,所以共计120元。而如果借款期是两年,那么这120元都相当于第二年年初时的本金,所以到第二年底,欠款总额等于本金120元加上当年利息(120 X 0.2)即24元,所以共计144元,如此类推。

思路提示
本题的计算模型有很多种写法,参考答案中就演示了典型的几个。但不论哪一种写法,都应避免在算式中重复使用数字。所以程序开始时应当首先定义变量并赋值,后面完全用变量代替数字。
由于计算机在计算时采用二进制,所以有些算式尽管在十进制中可以得到整数,但在Python中的结果却会带有小数。具体原因我们会在《提高篇》中详细介绍,本例可以使用int函数对计算结果取整。
另外在编写过程中可以感到,代码中会有大量重复内容,同学们很可能会采用 “复制——粘贴——修改细节” 的方式来编码。在没有学习循环语句的情况下,这是一种非常正常的思路,不过请思考并尽可能做到:只需复制粘贴,无需修改细节! 如果实在没有思路,可以参见参考答案。


Python01基础知识 | 05文章无非字符成串,程序不过输入输出来源网址: http://www.ukoedu.com/course?course=python01&chapter=05
作者: 陈富贵

本节要点与难点

  1. 遇到重复出现或者需要经常变化的数值,都应该考虑使用变量进行替代。这样无论阅读还是修改都会方便、高效,而且降低了“不一致”风险。
    基础篇1 基础知识 - 图14
  2. 一个文本符号称作“字符”,任意多个字符按先后顺序排列在一起,就是“字符串”。表示文本内容应该使用字符串。字符串必须用半角的单引号或双引号括起来,否则将会被Python解释器视作变量或函数等名称,导致出错。
  3. 请初学者分清“数字”与“表示数字的字符”之间的区别。从数字角度看,123是一个数字;但是从字符串角度看,“123”是由三个字符“1”、“2”、“3”构成的字符串。数字可以执行加减乘除各种计算;数字字符串不能用于计算,但可以执行“添加字符”等字符串操作。
  4. print()函数可以接收多个参数,每个参数之间用半角逗号隔开。这些参数的值将会并排打印在一行里,互相之间由空格分开。
  5. input()函数可以让程序暂停运行,等待用户输入。当用户按下回车键后,之前输入的内容就会作为一个字符串由input函数返回,程序则继续向下运行。input函数也可以接收一个字符串作为参数,该字符串将作为提示文字显示给用户。
  6. 在Python3中,即使用户输入的是数字,input()函数也将其作为一个字符串返回,需要再使用int(整数)或float(小数)等函数才能赋值给数值型变量。而在Python2中,默认情况下,假如用户输入是数字形式,input()就会返回一个数字而非字符串。基础篇1 基础知识 - 图15
  7. Python2中可以使用raw_input()函数代替input()函数,因为raw_input()与Python3一样,始终返回字符串。但Python2同时还存在中文编码等问题,详见《提高篇》中相关章节的讲解。
  8. 任何复杂的软件系统,本质上都是一个 “输入”——“处理”——“输出” 的过程。

参考阅读:python2的input

本节视频中讲到了Python2与Python3中input函数的功能区别,以及Python2中用rawinput函数替代input函数的方案。但是受视频时长限制,课程中没有对此举例说明。对Python2感兴趣的同学可以通过下面这篇简洁的文章,了解input与rawinput之间的差异:
[博客园:raw_input() 与 input()
Python](https://www.cnblogs.com/way_testlife/archive/2011/03/29/1999283.html)

练习1:方程计算器

在上节课的作业“求解一元二次方程”中,每次运行前需要在程序代码中修改a、b和c三个变量的值,很不方便。
请对该程序进行升级,运行中之后提示用户输入 a、b和c三个参数的数值,然后输出该方程的两个解(目前不必考虑方程无解的情况)。

思路提示
与上节课作业相比,本练习的计算过程没有任何区别,唯一不同的是a、b、c三个变量由直接赋值变为了用户输入。
所以只要将程序开始的赋值语句中,等号右边部分改成input函数即可。
特别注意:如果使用python3,请不要忘记使用int等函数对input的结果(即用户录入的文本)进行转换!

练习2:复利计算器

请找出上节课编写的“复利计算”程序并进行改写,使用户可以自己输入本金数额(整数,比如100)与利率(小数,比如0.2),然后输出前五年的欠款总额。同时输出格式也要更加人性化,比如:
请输入本金:100
请输入年利率:0.2
第1年欠款总额为 120
第2年欠款总额为 144
第3年欠款总额为 172
第4年欠款总额为 207

思路提示
在上节课作业代码的基础上,可以通过以下几个步骤逐步“升级”,每完成一步就运行试验一次,确认无误再做下一步:

  1. 把原代码中变量赋值语句的右边改成input函数,并在input函数外面套上int或float函数以将数值传递给相应变量(python3中)。
  2. 确定运行无误后,在input函数中添加提示信息,比如“请输入本金”。
  3. 在第一个print语句中添加“第1年欠款总额为”等提示信息,然后试验运行。
  4. 运行无误后,在每个print语句中分别添加提示信息,得到最终代码。