“笨办法”学Python 3基础篇系列文章
“笨办法”学Python 3基础篇 第一部分- 打印与输入
“笨办法”学Python 3基础篇 第二部分-文件操作
“笨办法”学Python 3基础篇 第三部分-函数
“笨办法”学Python 3基础篇 第四部分-数据容器与程序结构
“笨办法”学Python 3基础篇 第五部分-面向对象的类
“笨办法”学Python 3基础篇 第六部分-项目骨架与自动测试
“笨办法”学Python 3基础篇 第七部分-搭建简易的网站
第一部分 打印与输入
第一部分 打印与输入
0 前言
我为什么开始学Python呢?说来话长。在博士期间,我从事的是控制理论的研究,期间通过玩玩数学游戏发了几篇SCI论文。毕业来到了目前工作的单位,一晃5年过去了,也没有继续自己博士期间的研究,因为实在是枯燥乏味,激不起研究的兴趣。
一切改变的契机发生在去年的疫情期间,我在网上听了合肥某家企业组织的线上讲座,讲座的题目是强化学习与最优控制。当时听完后感觉强化学习这个概念很好,与自己长久以来一直寻找的研究方向非常符合。于是就上了知乎搜索强化学习的入门书籍。其中一本受广大网友推崇的入门书籍为《深入浅出强化学习原理入门》,这本书理论相对比较精简,特色是提供了Ubuntu系统下丰富的强化学习案例代码,供初学者学习。
正是在Ubuntu上摸索强化学习算法的过程中,我渐渐发现,强化学习目前主流的编程语言为Python。在学习强化学习算法前,我没有一点Python的基础,仅凭着C++的一点功底和强大的网络,坚持着学习强化学习案例的Python代码。
野路子终归不是长久之计。于是,为了能在强化学习的道路上坚持走下去,我在今年寒假期间购买了广受好评的Zed A.Shaw著作《“笨办法”学Python 3》和《“笨办法”学Python 3 进阶篇》这两本书。从2021年2月1日开始到2021年3月4日完成了第一本书上给出的52个训练题,基本了解了Python 3的输入输出、数据类型、语法逻辑、项目架构、代码自动测试以及初步的网站制作。
孔子曰:温故而知新。在进入下一阶段的学习时,我觉得有必要将上个月学习Python 3时碎片化的知识进行系统的归纳和整理,故在此开始着笔整理。
1.1 Python版本、系统平台和文档编辑器
本次学习所用的Python版本为3.6.8。由于还没有涉及到git的安装,因此我选择了Windows系统,当然在ubuntu系统下是最好的,可以无缝斜街后续的进阶课程。除了命令行指令有些不太一样之外,其余在使用下无任何影响。
文档编辑器我选择了Visual Studio Code来进行编辑,当然也可以选择Atom。根据书中要求,利用PowerShell(Windows下的一个命令行终端)来运行.py的脚本文件,摆脱IDE的限制,也能够锻炼自己调试代码的能力。
1.2 print 用法
接下来将介绍学习Python编程语言第一个需要的技能,即如何让程序以字符串的形式输出信息。这一应用在后续程序遇到Bug时,用来显示跟踪程序内部数据的变化非常有用,相当于利用Pycharm等IDE软件实现Debug的功能。
1.2.1 打印多行字符串
如果需要终端打印一条
Hello World !
It’s your first python code.
的字符串信息,那么,最简单的方法为:
方法一:多个print直接打印字符串
print ("Hello World !")
print("It's your first python code.")
在PowerShell中定位到程序的当前目录,输入命令
Python .\csdn_print.py
运行csdn_print.py脚本,这里的csdn_print.py指的是一个名称为csdn_print的python脚本。如图1所示,PowerShell中将会显示地将双引号下的字符串信息打印到命令行中。值得注意的是,每一个print命令都会让字符串自动的分行。
当然,有时直接使用字符串太麻烦,我们常常将字符串定义成变量使用,即
方法二:通过字符串变量直接打印字符串
a = "Hello World !"
b = "It's your first python code."
print(a)
print(b)
方法三:3双引号打印多行字符串
另一种方法是使用3双引号,能够只使用一个print()实现同样的打印效果,用法为:
print("""Hello World !
It's your first python code.""")
打印时,当扫描到3双引号中每一行的换行符时,实现字符串自动换行。
方法四:转义字符 \n 实现多行字符串打印
当然,还能使用转义字符\n实现换行打印。
print("Hello World !\nIt's your first python code.")
1.2.2 打印拼接字符串
当我们需要打印上述两个字符串的拼接时(不换行),即
Hello World ! It’s your first python code.
最简单的方法是重新定义一个上述字符串变量,然后用print()实现。如果需要拼接的字符串比较多时,这种方法效率将会非常低下。因此,常用这几种方法实现拼接。
方法一:多个print函数实现拼接
print("Hellp World !", end=' ')
print("It's your first python code.")
第一个print中的end=‘ ’所起的作用是使得前后字符串拼接时不会因为用了两个print命令而出现分行,且两个字符串有一个空格符隔开。
方法二:一个print函数实现拼接
a = "Hellp World ! "
b = "It's your first python code."
print(a + b)
在print中,字符串变量a和字符串变量b通过‘+’实现了拼接,但整个拼接时不会自动在两个字符串间填充空格符。
方法三;利用print和‘,’
a = "Hello World !"
b = "It's your first python code."
print(a, b)
在print中,字符串变量a和字符串变量b通过‘,’实现了拼接,不同于方法二,拼接时两个字符串间自动填充空格符。
1.2.3 打印变量和数字
在之前的打印多行字符串中,我们已经使用了变量。变量可以使程序更简洁,更符合自然语言。如打印:
There are 100 cars in the park.
变量与字符串同时打印的典型用法为:
cars = 100
print("There are", cars, "casrs in the park.")
在打印过程中,变量cars的值100会转变为字符显示在终端。
进一步,如果变量不是直接赋值,而是通过其他变量的数学运算赋值,那么代码可以修改为:
cars_store = 200
cars_out = 100
cars = cars_store - cars_out
print("There are", cars, "casrs in the park.")
1.2.4 打印格式化字符串
格式化字符串的核心是在字符串中嵌入变量,那么随着每次变量值的变化,打印出的字符串信息也会发生变化,典型的应用场景就是在debug时,通过格式化字符串输出需要监控的变量值的变化。
方法一:以f、引号和{}构成的格式化字符串打印
这种格式化字符串必须以f开头,f是“格式化”的意思。字符串里需要嵌入的变量用一对“{变量名}”特殊符号实现,例如:f“Hello {Somewhere} !”。当Somewhere这个变量为字符串“World”时,利用print函数就能打印输出:
Hello World !
Somewhere = "China"
print(f"Hello {Somewhere} !")
Somewhere = "World"
print(f"Hello {Somewhere} !")
第一次调用print函数时,打印的是Hello China !。第二次调用print函数时,此时Somewhere变量被格式化为World,因此打印为Hello World !
方法二:采用.format()
这种方法适用于在已经创建的字符串上应用格式化,比如循环中。
Somewhere = "USA"
greet = "Hello {} !"
print(greet.format(Somewhere))
执行这段程序后,Somewhere的值就会格式greet这个字符串,最终打印出:
Hello USA !
1.3 input 用法
当掌握了如何打印出各种信息后,接下来需要掌握的就是如何向脚本输入信息,增加程序的灵活性。而一般软件做的就是:
(1)接收输入的内容;
(2)改变输入的内容;
(3)打印出改变了的内容。
1.3.1 基本输入的用法
输入的用法比较简单,常常接在提问后面,提示使用者输入信息:
print("How old are you?", end=' ')
age = input()
print(f"You are {age} old.")
在这一段代码中,首先脚本向我们提问。我们根据提示信息,输入数字,回车结束输入。输入的内容为字符串格式,赋给age这个变量。在下一个print中调用格式化字符串,打印出我们输入的年龄。
更规范的写法是在输入时有提示符,如
age = input('> ')
另外,由于输入的内容为字符串格式,因此如果想要实现变量的数学运算时,需要对输入数据的格式类型进行转换,如:
age = int(input('> '))
new_age = age + 1
此时,变量age不在是字符串变量,而被转化成整形变量,从而可以避免运行第二行代码时因为操作数类型错误而报错。
1.3.2 利用.split( ) 实现输入字符串的切片
这种情形的应用场景可以这样描述:
“你的年龄,学历?”
“20, 研究生。”
只需要回答一次,就能提供所需的所有变量的值。那么,就必须在input(“> ”)时,实现字符串的切片。这个功能需采用python 3的内置函数.split()实现。
链接:split 用法
split()通过指定分隔符对字符串进行切片,语法格式为:
str.split(str = “”, num = string.count(str))
参数:str – 分隔符,默认为所有的空字符,包括空格、换行、制表符等
参数:num - 分割次数。默认为-1,即分割所有。如果num有指定值,则分割为num + 1个字符串。
返回值:返回分割后的字符串列表。
与输入结合的应用:
print("How old and tall are you?", end=' ')
age, height = input('age and height >').split()
print(f"You are {age} old, {height} tall.")
用split()按照空字符对输入字符串进行了切片,返回列表中的第一个元素赋值给age,第二个元素赋值给height,接着利用格式化字符串实现打印。
1.4 后记
本次学习Python没有采用学院派的系统架构学习方法,而是像学徒式地以解决任务的方式进行地学习,基本处于需要用到什么学什么。因此,尚缺乏对Python的整体架构的掌握。但这种学习方式的好处,在于能够迅速在庞大的函数中定位到所需的功能代码块,能够解决几类共性的问题,注重实践能力的培养。系统性地讲解与点穴式的训练,孰优孰劣,我想还是因人而异吧。