对于初学者,基础语法是第一关,也是最枯燥的一关,我的学习建议是:先“够用”,再“深造”。
Python每年都会发布一个大版本,增加一些新语法、新特性。但这些新内容,也许你很长一段时间内都不会用到。把时间精力聚焦在最常用的80%,尽快投入实践应用,在实践中盘旋成长,这才是入门的意义。
先看我画的一张图,标出了Python基础学习的知识点,几乎涵盖本课程80%内容。后续课程,也会围绕图中知识点展开讲解,建议收藏作为参考。
本文学习内容如下:
- 变量及命名:关键概念理解
- 赋值和计算:基本表达式
- 输入和输出:基本应用模式
- 如何排查错误和找答案
- 常见错误类型
在开始之前,先明确几个入门必懂的概念:代码、程序文件、解释器、运行时。
- 代码,Code,就是你编写的那些Python语句;
- 它没有运行的时候,被你保存在某个程序文件;
- 当你想运行代码时,就得先运行解释器,它的名字叫
python(在上一节中你已装好了); - 在脚本模式下,用
python abc.py这样的命令执行代码; - 这时,你的Code开始被运行,Code中那些变量开始占用你的电脑内存。
- Code执行完毕后,脚本模式下解释器也跟着关闭,你电脑的内存被释放。
- 如果还想运行Code,再执行一次
python abc.py命令即可,占用重新分配的内存空间。
1、变量及命名
变量是计算机编程中最基础的一个概念。
它的主要意义是:让你找到计算机给你程序分配的内存。
所以,编程中的变量本质,就是一个内存地址。
我们所选的官方Python版本中,可以通过id()内置函数,获得其地址。
那每个数据分配多少内存呢?这取决于数据的类型。
作为选择Python入门的福利包之一,就是你可以不用管内存怎么分。
如果非要Hack研究: 可以用sys标准模块的getsizeof查看数据类型内存分配 如果还不满足,那就下载官方Python源码研究去吧
你只需知道,Python里有这么几个基本数据类型:
整数(int)、浮点数(float)、字符串(str)、逻辑值(bool)
这四个是最常用的数据类型,请务必记住,还有如复数(complex)暂时不用理会。
这几个数据类型的数据,都是“不可变”的,什么意思呢?
就是这些数据生成后,本身不能被改变,因为分配的内存已经固定。
相比这些基本数据,下一节我们会讲数据结构,那里有”可变“的数据让你对比理解。
因为不需要理会内存分配,所以在定义Python变量时,不需要制定类型,只要在用之前有声明即可。
如果提前用了没声明过的变量,就会出现not defined提示。
既然变量不用指定类型,我们怎么知道它是什么类型呢?
介绍2个内置函数type(),isinstance(),它用来判断对象的数据类型。
x = 1type(x) # 返回<class 'int'>isinstance(x,int) # 测试x是否是int,返回True
变量起名字也有规范:
- 可以是字母、数字、下划线的组合
- 第一个字符不能是数字
- 字母区分大小写,如
a和A是两个不同变量 - 不能用Python保留的关键词
虽然看起来起名字很多选择,但我建议你从开始就养成习惯,可以少出错,更容易理解。
比如最基本的:
- 用有意义的词,如果太长可以截一部分作为缩写,如
score - 如果有多个意义的词,中间加下划线,如
school_name - 变量字母尽量全小写,如
total - 常量字母全部大写,如
MAX_LEN
2、赋值和计算
理解了变量,我们就可以用它”装载“数据,进而计算。
这里虽然用了“装载”一词,但你要记住,变量本质是指向了数据的内存位置,是一个地址。
只不过,我们在日常使用中,很理所当然地把它当成了一个“数据容器”。
我们用赋值操作为变量“装载”数据。
2.1 整数和浮点数
x = 1 # 整数x = 3.14 # 浮点数x = 'Hello' # 字符串x = True # 布尔值
整数和浮点数很容易理解,和我们学过的数学一致。
2.2 字符串
字符串可以用单'x'、双"x"、三引号"""x""",常见的用法有2个:
- 如果遇到“话中话”,双引号放里面,单引号放外面。
s = 'I know that "A" and "a" are two different variables.'
- 整块的代码注释,可以用三引号
"""注释是写给人看的方便了解代码意义程序运行时会跳过"""s = 'abc' # 单行注释也可以用一个#符号
字符串操作主要包括:分割、连接、切片、查找、替换、大小写转换、首位去空格、格式化。
你不必马上记住,可以练习一下,后面用到的时候再过来查找。
s = 'Hello Python, hi yichu.'# 分割,按逗号分成两部分,返回一个list(下一节会讲数据结构)ss = s.split(',')# 连接,用join把两部分连接起来# 加号操作在字符量大情况下效率低# 还有其他连接方式,先记住这两个s1 = ','.join(ss)s2 = 'abc' + 'def's3, s4 = 'abc', 'def' # 多变量赋值# 切片,[下标],下标从0开始# [start:end]表示从start开始,到end-1结束# [::-1]表示把字符串反转# 结果分别是'H', '.', 'Python', '.uhciy ih ,nohtyP olleH's[0], s[-1], s[6:12], s[::-1]# 查找,返回6,如果找不到返回-1# 其他的参数和查找函数可以用到再查,先记住2个s.find('P')s.index('x') # 找不到会报异常# 替换,返回一个新字符串s3s.replace('Python', 'vscode')# 大小写转换s.upper() # 转大写s.swapcase() # 大变小,小变大# 首位去空格s.strip()# 格式化# 优先使用formats3 = '%s: %s' % ('python', 2020)s3 = '{}: {}'.format('python', 2020)
2.3 数字运算
相对简单,基本如”加减乘除”:
# 加,结果3x = 1 + 2# 减,结果:1.1y = 3.1 - 2# 乘,结果72z = 8 * 9# 除,结果0.5a = 2 / 4# 整除,结果0b = 2 // 4# 取余,结果2c = 20 % 3# 乘方,4的3次方,结果64d = 4 ** 3# 以上操作还可以联合赋值运算一起x *= 3 # 等价于:x = x * 3x /= 3 # 等价于:x = x / 3# 其他同理x += 1 # Python中不存在x++这样的写法
2.4 逻辑计算
布尔值是逻辑计算的结果,只有True和False两个。
计算过程一般会涉及到比较、判断以及逻辑计算。
# 数值比较b = 1 > 2 # Falseb = 1 >= 0.5 # Trueb = 1 <= 0.5 # False# 逻辑运算b = 1 > 2 and 1 > 0.5 # Falseb = not b # Trueb = 1 > 2 or 1 > 0.5 # True# 字符串比较b = 'abc' == 'abc' # Trueb = 'abc' != "abc" # False# is 和 inb = 's' in 'string' # Trueb = 's' not in 'string' # Falseb = 's' is 's' # Trueb = 's' is not 's' # Falsec = isinstance(b,bool)) # True
2.5 运算优先级
就像四则运算有先后顺序,Python也有。记不住正常,只要记住一些常见的即可。
实在记不住,可以用小括号加强,因为小括号优先级最高,比如:
x = ((2-1)*(2**2)-3*4)//2 # 结果-4
2.6 数据类型转换
最后,讲一下数据类型之间的转换。
整数、浮点数、字符串、布尔值,之间经常需要互转。
x = 100.1y = int(x) # 结果100z = float(y) # 结果100.0x1 = float('100.2') # 结果100.2x2 = int('100.3') # 结果出错,转换失败bool(x) # Truebool(0) # False
目前重点掌握上述4类基础数据运算即可。
Python也有提供位计算,等以后需要用了,再看不迟。
此外,字符串处理几乎是使用最频繁的,在查找匹配方面,还有更专业的正则表达式。
但就像一开始说的,“够用即可”,等到用得上,再学不迟,首先掌握基本常用的那80%,能解决问题就够了。
3、输入和输出
输入输出,不仅是人和计算机交互方式,也是程序间数据交换方式。
比如,我们上网,提交表单就是我们向服务器的输入; 服务器处理后返回的网页就是它的输出。 只不过,中间需要经过多层数据转换,会复杂些。
这里,我们主要讲最基本的命令行终端输入输出。
即,在命令行中,我们输入一些数据,经过我们写的代码计算后,用字符形式在终端显示。
最上面那张图里面已经包含了输入输出的2个内置函数:print()和input()。
学会用print()输出,你就能随时打印变量出来观察:
x = 1 # 整数print(x) # x值print(type(x)) # 类型intprint(id(x)) # 内存地址x = 3.14 # 浮点数,表示有小数,类型floatprint(x)print(type(x))print(id(x))x = 'Hello' # 字符串,类型strprint(x)print(type(x))print(id(x))x = True # 布尔值,代表逻辑判断的"真"和"假",类型boolprint(x)print(type(x))print(id(x))s = 'hello'print(id(s)) # 留意和最下面的对比s += 'world'print(s)print(id(s)) # 留个思考题:为什么地址变了
当然,你也可以用上一节介绍的VSCode中Python数据查看器观察。
接着我们设计一个最简单的输入输出:
x = input('请输入一个整数:') # 等待输入print(type(x)) # 输出收到内容的类型
如果你是在VSCode的Notebook中运行代码,就会看到弹出一个输入框,提示字符就是你写的。
如果你是在命令行执行脚本,就会收到一行提示字符。
命令行也可以在VSCode菜单栏中打开终端。
你会发现,不管输入数字还是字符,返回的都是字符串类型。
因为你可能输入任何数据,不管是字符串还是数字,它都认为你输入了字符串。
但如果想要一个数字怎么办?自己转换。
还记得上一部分末尾讲的数据类型之间的转换么?
x = int(input('请输入一个整数:')) # 转为整数print(type(x)) # 输出收到内容的类型# 或者也可以等输入后,再转换y = input('请输入一个整数:')z = int(y)print(type(z))
注意,不管哪种写法,你都在“默认”输入的是整数,如果输入一个浮点数呢?
是的,会提示出错,无法把0.3转为10进制整数。
没有良好的容错设计,一个用户行为偏差,就可能让程序奔溃。
好在,软件工程提供了大量实践去解决这类问题。
TIP:进入Python命令行交互模式,我们就可以把Python当计算器用了。
4、如何排查错误和找答案
4.1 定位问题
遇到报错,不用紧张,首先试着看懂它在说什么,尤其要找到“关键信息”。
上面的问题,关键信息是什么?注意红色圈出的部分。
第一个圆圈,是因为用了Notebook的效果,它会指出具体在哪行又问题。
如果是在脚本运行,就不会有第一个圆圈中的箭头,但也会提示你在哪一行出错。
更关键的信息是在第二个圈。
ValueError: invalid literal for int() with base 10: '0.3'
4.2 搜索相似问题
这时候,你就可以拿着这条信息去网上找了。
但是注意,0.3是你自己的输入,别人可能输入的是其他数据,所以把具体数据去掉后搜索。
ValueError: invalid literal for int() with base 10:
我把从Google、Bing和Baidu的搜索结果贴出来,大家可以对比参照。
![]() |
![]() |
![]() |
|---|---|---|
| Bing | 百度 |
从前三条结果看,Google和Bing都给出了一个解法:“先转float浮点数,再转int取整”;百度在第五条给出了类似方案。所以搜索引擎首推Google,但考虑到你不一定能访问到,可以选择Bing,再不行就Baidu。
于是,我们的代码可以修改下:
x = int(float(input('请输入一个整数:'))) # 先转float,再取其整数print(x) # 输出0
当我们输入0.3时,程序没有再报错。
4.3 搜索思路
但,事情还没完,也许用户只是手误,本想输入”3”结果输入了”0.3”。
况且,我们都提示了“请输入一个整数:”,用户心里更期待输出“3”,怎么办?
这时候,应该调整搜索思路,不是搜索错误本身,而是应该问搜索引擎:“python怎样判断字符串是不是整数?”
然后,结合搜索引擎的习惯(它更喜欢关键词),把搜索内容调整为关键词组合:“python 判断 字符串 是否整数”。
用Bing搜索的结果如下:
打开第一个网页,我们看到字符串还有些功能,其中:

我们来尝试下,输入0.3:
x = input('请输入一个整数:')b = x.isdecimal() # 返回布尔值Falseprint(b) # 输出False
当我们输入1的时候,则输出True。
至此,我们已经知道,如何去判断一个输入的字符串,是否是个整数。
于是我们可以设想:当用户输入的不是整数,我们就输出一行提示给他,让他重新输入。
这其实就是程序流程控制,虽然还没讲到这,但人的思维其实本身就有。
程序是人思维的一种表达形式。 ——程一初
同时,通过刚才那个网页,我们也知道,还能判断更多类型,比如字符大小写、是否有空格等等。
这其实就是文章开头所谓的“螺旋成长过程”,因为遇到问题,所以会去寻求答案,在寻找中学习,于是懂了更多。
这里我先做个剧透,简单了解即可,后面会具体讲解。
x = input('请输入一个整数:')if x.isdecimal():x = int(x)print(type(x)) # 结果intelse:print('输入错误,请重新执行程序。')
如果输入0.3,就会输出提示。
当然,也可以用三元表达式稍加简化:
x = input('请输入一个整数:')print(type(int(x))) if x.isdecimal() else print('输入错误,请重新执行程序。')
5、常见错误类型
这里只是列出一些入门时容易出现的问题,方便参考,更多的还是需要像上面一样,掌握搜索问题答案的思路。
SyntaxError语法错误:- 字符串引号没有成对,或者你不小心用中文输入了引导
- 括号没有成对,尤其是计算比较复杂时,容易少打
- print函数调用一定要加括号,网上那些没有加括号的,都是Python2版本
=是赋值操作,用==两个等号判断是否相等- 用了Python关键词当变量名
- 如果学了语句控制,如
if/else等,稍加冒号也会出语法错误。
IndentationError缩进错误- 多打或少打了空格,建议用4个空格作为缩进,VSCode的Tab也默认是4空格
NameError名字错误- 函数名打错了,比如把
print少打了个r或者顺序错了
- 函数名打错了,比如把
TypeError类型错误- 数字和字符串不能用
+相加,可以用字符串格式化
- 数字和字符串不能用
IndexError索引错误- 这个错误在数据结构中比较多见,表示下标超出范围
- 但如果你用下标给字符串切片,也会遇到
总结
今天重点介绍了变量概念,其中包括4大基本数据类型:int、float、str、bool。
每种数据类型都有自己的运算方式,它们之间符合条件的也可以互转类型,计算时有优先级顺序。
通过input和print函数,我们可以在命令行终端里输入输出。
还有几个内置的函数,可以辅助我们观察学习:
id(x):找到变量x的内存地址type(x):输出x的数据类型isinstance(x,X):判断x数据类型是否是X类型。
最后,我们以实际遇到问题的形式,讲解了如何在遇到问题时找到关键信息并利用搜索引擎找答案。
变量和基本数据类型很重要,它们是程序的基本组成单元。
作者:程一初
更新时间:2020年8月



