python编程入门之二:必备基础知识

第二章 学习python前必备的基础知识

大家在上一章中已经可以自己敲出一个猜数字小游戏了,先不要删掉它,以后我们慢慢来改进它。接下来呢,我们再继续学习一些必须要学的基础知识。

2.1 变量

说到变量,就是可以改变的量,它并不是一个值,而是内存中的一个地址。什么意思?通俗点讲,当你定义一个a = 3的时候,系统在内存中会给a一个地址,而这个a就是代表一个门牌号,然后小3住在里面,当你要调用a的时候,就相当于你喊了一句:小3,出来玩儿了!当你改好了这个房子之后,门牌号a是不能改变的,但住在里面的小3是可以换人的,所以称之为变量,而不是恒量。
看下面的例子:

a = 4
b = 5
print(a)
print(b)

结果:
python编程入门之二:必备基础知识
结果显而易见,a和b分别叫出了小4和小5.那怎么体现它是可以变得呢?看下面的例子:

a = 4
b = 5
print(a+b)
a = "Li"
b = ‘Wang‘
print(a)
print(b)

结果:
python编程入门之二:必备基础知识
结果很明显吧,第一次给a和b分别赋值4和5,然后print了一个a+b,结果是9,也说明print内是可以写一个运算式的;第二次我们给a和b分别赋值了两个字符串,然后打印出来的就是这两个字符串,从而说明这是个变量而不是常量。你想问既然数字可以加,那字符串可以加吗?当然可以,不信你可以自己运行一下下面的代码:

a = "Li"
b = "Wang"
print(a + b)

运行一下,看一下是什么结果,是不是已经把两个字符串拼接起来了?再试试看下面的代码:

a = 1
b = 2
c = "Li"
d = "Wang"
print(a + b)
print(a + c)
print(c + d)
print("Li" + "Wang")

并从中理解一下,是不是数字和字符串可以任意的拼接和打印?
又或者是报了些错误?尝试理解一下错误信息。

2.2 字符串

我们都知道像1,2,3这样的类型叫做int类型(整型),那像a,b,c这样的字母及一些特殊字符%,*,@呢,他们被统称为字符串类型,也就是str类型,那怎么才能在代码中知道我输入的或者赋值的这个变量是什么类型呢,python的BIF里给了我们一个type()方法来获得类型名,等等,BIF是什么,好高级的样子。
BIF 是Built-in Functions,也就是内置函数的意思,像Python里的很多内置函数都是可以直接调用的,方便了程序员快速编写脚本。比如print就是一个内置函数,用来打印。input()也是一个内置函数,用来提示用户输入。
好,继续来说type()这个BIF的作用,请看下面的代码:

a = 2
b = "Li"
print(type(a),type(b))

结果:
python编程入门之二:必备基础知识
看到没有,第一个a的类型显示的为int,第二个b的类型显示为str字符类型
继续看下一个代码:

a = "Li"
print("大家好,我叫%s" % a)
b = 18
print("我今年%d岁了" % b,"(真年轻,啊哈哈)")

结果:
python编程入门之二:必备基础知识
这里用了一个奇怪的字符,%s和%d是用来干嘛的,说明一下,s就是字符串,d则是整型,其他的像什么%f,%b什么的大家可以自己查资料,最常用的就是%s和%d,%f好像也挺常用的,它代表的浮点数,浮点数也就是小数。另外记住,在("大家好,我叫%s" % a)中,第二个%前面和字符串之间是不能加逗号的,不然python会认为这是两个单独的字符串。
扩展一下,除了用%号来格式化还有其他的方法吗?有的,python还给了我们一个叫format的方法,代码如下:

a = "Li"
b = 18
print("大家好,我叫{name},今年{age}岁了".format(name=a, age=b))

结果:
python编程入门之二:必备基础知识
结果如出一辙吧,另外其实还有一种更简洁的方式,如下:

name = "Li"
age = 18
print(f"大家好,我叫{name},今年{age}岁了")

结果和上面的是一样的,大家不妨试一下。

2.3 原始字符串

下面有一行代码,大家看看输出和想象中一样吗?

print("\time \home \name")

输出的是不是很奇怪,是不是第一个t没了,而变成了一个Tab,name的n也没了,变成了换行。没错,在python中,\t 为制表符,\n为换行符。是不是有点伤脑筋了,那这样我怎么才能输出我想要的结果呢。没关系,python肯定已经想到了这样的问题,所以我们可以在"\"前面再加一个"\"用来转义字符。

print("\\time \home \\name")

这样的输出就会变成我们需要的输出,那还有没有更简单的方式呢,每个"\"前面都要加一个"\",那岂不是很麻烦。答案是有的,这时就需要我们将要打印的字符转换成原始字符串,怎么转换呢,看代码:

print(r"\time \home \name")

有没有看到一个细微的变化,没错,我们在引号外加了一个"r",代表我们要将后边要打印的字符转换成原始字符串,这样就可以随心所欲的打印了。

2.4 长字符串

我说 你是人间的四月天;
笑响点亮了四面风;
轻灵在春的光艳中交舞着变。
你是四月早天里的云烟,
黄昏吹着风的软,
星子在无意中闪,
细雨点洒在花前。
那轻,那娉婷,你是,
鲜妍百花的冠冕你戴着,
你是天真,庄严,
你是夜夜的月圆。
雪化后那片鹅黄,你像;
新鲜初放芽的绿,你是;
柔嫩喜悦,
水光浮动着你梦期待中白莲。
你是一树一树的花开,
是燕在梁间呢喃,
——你是爱,是暖,是希望,
你是人间的四月天

哇,好有诗意,为啥要用这首当代诗开头呢,因为这整首诗就是我们的长字符串,我们要想把这首诗按照这个排版打印出来,按照我们学过的知识,是不是要这样打印:

print("我说 你是人间的四月天;\n 笑响点亮了四面风;\n 轻灵在春的光艳中交舞着变。\n 你是四月早天里的云烟,\n。。。")

是不是要在每个换行之前加一个换行符"\n",那这工程量可就大了去了,那有没有什么好方法呢,答案还是有的,我们可以这样:

a = """
我说 你是人间的四月天;
笑响点亮了四面风;
轻灵在春的光艳中交舞着变。
你是四月早天里的云烟,
黄昏吹着风的软,
星子在无意中闪,
细雨点洒在花前。
那轻,那娉婷,你是,
鲜妍百花的冠冕你戴着,
你是天真,庄严,
你是夜夜的月圆。
雪化后那片鹅黄,你像;
新鲜初放芽的绿,你是;
柔嫩喜悦,
水光浮动着你梦期待中白莲。
你是一树一树的花开,
是燕在梁间呢喃,
——你是爱,是暖,是希望,
你是人间的四月天
"""
print(a)

前后各三个单引号来表明这是一个长字符串,这样就会原封不动的打印出来了。

2.5 数字的运算

下面是常用的运算及关系字符:

+ :加法
- :减法
* :乘法
* * :幂运算
/ :除法
// :整除
% :余除
< :小于
> :大于
<= :小于等于
>= :大于等于
== :判断等于
!= :判断不等于

加法,减法和乘法应该不需要再说了,毕竟都是上过学的人。
大家先将下面的几行代码敲下来,注意从中观察"/", "//", "%"都是除法,但是有什么不同。

print(3 ** 3)
print(9 / 2)
print(9 // 2)
print(9 % 2)

输出是不是这样的:

27
4.5
4
1

现在可以解释一下了,我们接触最多的就是这个"/"最普通的除法,这和我们平时的运算是最合乎常理的,9除以2本来就是4.5嘛,然而这个"//"呢,被称为取整,也就是我们只取除过后的整数部分,所以"%"这个取余就是取余数部分了,像是我们小时候学过的(9 除以 2 = 4 ······1)
然后大家再敲一下下面的代码:

print(3 > 5)
print(5 >= 5)
print(6 < 8)
print(4 == 4)
print(4 != 5)

结果

False
True
True
True
True

怎么我输入的是数字,但打印的是一串字符呢,因为<,>号本来就是关系判断符,既然是判断,那就有对有错,False和True正好是英文中的对与错的意思,“==”就是判断两边数值是否相等,“!=”则判断两边数值是否不等,接下来就来了解一下python中的布尔类型。

2.6 布尔类型

其实在python中布尔类型中的False和True分别被当做0和1来对待的,即假和真。包括下面这样的计算也是可以的。

print(True + True)
print(False + True)

结果

2
1

有没有发现,在Python中True和False确实是被当成了1 和 0.
但如果你真想把这两个布尔类型放到数学计算中去用,那可真是不合逻辑了,为啥丢了西瓜捡芝麻。

2.7优先级问题

既然牵扯到了运算的问题,那肯定就会有优先级的问题,那么在python中,数值运算的优先级是怎样的呢?大家在上小学的时候都背过“先乘除,后加减”吧,没错,在Python中数值运算也是一样的,如果要先进行加减运算呢,那就用一个小括号把要先进行计算的括起来。
还有其实像下面的两个式子是一样的,不用担心

-5 * 7 + 7 * -9
(-5) * 7 + 7 * (-9)

2.8 逻辑操作符

python中的逻辑操作符有:

and       
or  
not

and也就是并且的意思,其要求两边的式子同时为真则为真。
or也就是或者的意思,要求两边一边为真则为真。
not也就是取反的意思,not真则为假,not假则为真。
看下面的代码

print( True and True)
print(True or False)
print(not True)

结果

True
True
False

很好理解吧。
其实在python中还会有这样的式子

2 < 3 <5

这其实是被解释成

2 < 3 and 3 < 5

这个做法在python中是被认可的,其他语言几乎都会报错,要记住。

2.9 数据类型及转换

在学习python之前,我们可能已经听说过在python中的变量是没有“类型”的,的确,变量在python中更像是一张“标签”,想怎么贴就怎么贴,我们可以直接通过“标签”来找到变量在内存中的位置;但也不能说python中绝对没有“数据类型”这一说,很纠结对不对?其实没必要纠结,有没有“数据类型”是理论上的疑问,并不会妨碍我们对python运用的掌握,所以我们不妨相信“python是有数据类型的”。
我们已经学习了字符串类型和布尔类型,那我们知道数字的类型都有哪些吗,我们今天先来了解一下数字中的整型浮点型
整型,见字如面,也就是意味着整型就是整数的类型,也就是int型,没什么可说的了
那么浮点型呢,其实也就是相当于小数类型,在这里顺便引进一个科学计数法,毕竟小数点后有很多数的例子见多了。

a = 0.000000009
b = 9e-9
print(type(a),type(b))
print(a == b)

结果:

<class ‘float‘> <class ‘float‘>
True

看到没有,float也就是我们所说的浮点型,并且这里运用了一个用“e”表示的科学计数法,如果想要表示很大的数呢,那就把“e”后面的“-”号去掉。是不是方便了很多。
然后再看一下下面的例子了解一下类型转换

a = 4
b = 3.87
c = "Li"
d = "5"
print(type(a),str(a),type(str(a)))
print(type(b),int(b),type(int(b)))
print(type(d),int(d),type(int(d)))

结果:

<class ‘int‘> 4 <class ‘str‘>
<class ‘float‘> 3 <class ‘int‘>
<class ‘str‘> 5 <class ‘int‘>

从上面我们可以看出将一个浮点数转换成整数之后,它会自动把小数点后的数给去掉;我们也可以把一个数字转换成字符串,也可以把由数字组成的字符串转换成int型,但可以把由多个字符组成的字符串转换成int型吗,答案是不能,如果强制转换就会报错。

相关推荐