初学者的入门Python学习

本文最后更新于:3 个月前

点击获得封面头图

此文章使用CC-BY-NC协议,协议详情介绍请看此文


前言

这是一篇适合初学者快速了解Python相关基础知识的文章,稍稍带有RPG游戏风格,阅读前请注意以下几点:

本文不会或很少会介绍Python的模块.

如果你不知道什么是模块,请往下阅读.

由于作者才疏学浅,本文可能会有不完善或错误的地方,若发现请在评论区指正.

如果你不知道什么是评论区,请滑动到文章底部.

如果有不明白的地方,可直接在评论区询问,社恐可从关于页面获取到我的信息.

如果你不知道关于页面在哪,请点击这里.

本文汲取自大量其它大佬的文章,加以自己的理解,侵删.

如果你想知道大佬列表,请滑动到文章底部.

对于下面这种样式的区块,可点击右上角进行快捷复制:

1
点右上角复制我!

用法

每个小专题的前面都有冒险小故事!


背景!


我叫便当,是出生在圣条大陆的男孩子.
我出生于这个大陆最水深火热的时刻——大陆内是明枪易躲,暗箭难防的环境,而大陆外则是邪恶的龙的居住之所.
但我并不甘心居于现状.于是,我决定在17岁那年外出闯荡.



开始吧!

Python is easiest.——xxx


翻译:我是要一统世界的便当!



0. 准备物资! —— 安装


“这是什么蛮荒之地?!”
离家一周,我便遇到了问题.
“诶,什么都没买呢…早知道从家里带点东西了”
看着眼前可以用”贫瘠”来称之的罗德村,我不禁感慨道.
“大概上古的英雄们都是这么过来的吧”
我用阿Q的精神胜利法安慰自己.
罗德村是圣条大陆历史上最大的一场战役的起源地.
抱着这样迷信的观念,我决定暂时定居在罗德村.
“可是这也太!…”
“喂,小子”
正在我打算继续发牢骚时,一个突然老太婆出现在我的背后.
“听说你想统治世界?”
“!”
莫非这老太会读心术?
“罗德村其实是像Wakanda一样的地方,我们这里物资丰富着呢.小子,想统治世界可得有件称手的武器啊”
说完,我感到一阵眩晕.
再睁眼时,面前已是另一番天地.


Windows用户

Python官网: https://www.python.org/

请自行下载对应版本.

Linux用户

Debian系的发行版都内置了Python,其它系的应该也都有内置(Python太重要啦!)

Android用户

下载Termux: https://f-droid.org/repo/com.termux_118.apk

打开后输入以下指令:

1
apt update -y && apt upgrade -y && apt install python -y

iOS用户

可从APP Store下载ish(类似Termux的模拟终端软件).

至此,安装环节结束.


1. 踏上征途! —— Hello World


上次眩晕后,老太带我去了罗德村的武器库.
“原来是怕我记录才迷昏我…太过分了”
我按着发痛的太阳穴,喃喃道.
“不过这单手剑倒真是不错”
在塞满上古武器的仓库里,面对着琳琅满目的武器,老太说我可以随便选.
没有太多深思熟虑的我,选择这把看起来与我有缘分的单手剑.
随后,老太又给了我许多物资,好像提前知道我要来一样.
道过谢后,我离开了罗德村——怪不得是英雄起源之地.


学习任何一门编程语言,第一个项目应当都是在屏幕上输出Hello World,有关Hello World的历史可从Wiki了解: https://en.m.wikipedia.org/wiki/%22Hello,_World!%22_program

在Python中,输出的单词为:

1
print()

从英语语法的角度分析,输出Hello World是一个整句,输出是谓语,Hello World则作宾语.那么,输出Hello World的程序应该是这样的:

1
print("Hello World")

你可能要问了: 我在哪里输入这行代码呢?

Python提供了两种方式运行代码语句:

  1. 在终端输入python3,进入交互模式:

交互模式

最上面弹出的一段话包含了你的Python版本等信息,以>>>开头的一行为待输入状态,可以将代码语句输入,回车代表执行,在>>>下一行会显示执行结果.

  1. 编辑一个以.py结尾的文件,并输入python3 name.py:

编辑模式

Termux用户可使用终端文本编辑器nano,用法: https://wzk0.github.io/nn/

两种方法都成功地运行了我们的Python程序!

我们也可以看出Python的一些特点:

  1. 动作语句(被执行语句)

  2. 语句末尾无分号

  3. 字符串加冒号

至此,Hello World环节结束.


2. 捡到法宝! —— 运算符

Python中运算符的种类有很多,如同RPG游戏可以拿弓拿剑一样.


  1. 算数运算符:

如果我们要在屏幕上输出数字10,可以用加法(5+5),减法(15-5),乘法(2* 5),除法(20/2),取余数(131%11),幂(10** 1).

其中,+,-,*,/,%,**都是Python中的算数运算符.

我们不妨来试试!编辑一个demo.py,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
print("5+5的结果是:")
print(5+5)
print("15-5的结果是:")
print(15-5)
print("2*5的结果是:")
print(2*5)
print("20/2的结果是:")
print(20/2)
print("131%11的结果是:")
print(131%11)
print("10**1的结果是:")
print(10**1)

执行:

执行

诶,很神奇地发现,20/2的结果多了一位小数,这是怎么回事呢?(下节再说)


  1. 比较运算符:

Python中的大小比较符号有: ==(等于),!=(不等于),>(大于),<(小于),>=(大于等于),<=(小于等于)

我们也来写一下!:

1
2
3
4
5
6
print(10==5+5)
print(10!=5+5)
print(11>5+5)
print(11<5+5)
print(10>=5+5)
print(10<=5+6)

结果

这次返回的是什么东西?!True?False??可是我没在代码里输入这两个单词啊!

不要慌张,不要害怕,并不是有人偷偷摸摸地改了你的代码: 这里的True和False称为布尔值,即真/假,是一种变量(下节讲).

我们看一下第一行的代码: 10==5+5,那不就是10=10嘛!10=10,当然是正确的喽!

第二行,10!=10,翻译过来就是10不等于10,这明显是False的,所以在屏幕上输出了False.


  1. 赋值运算符:

这个符号超级重要的噢!

顾名思义,这是将后面的一长串赋值给前面很短的一个变量的符号,就像解物理题时用一个字母代替长长的一串公式一样,例如:

1
a=5+5

表明将5+5的值赋给了a这个变量(喂,变量的相关知识在下一小节,再等等啦!)

这里有一些其它的赋值符:

  • +=:例如a+=5,它的意思便是a=a+5

  • -=:例如a-=5,它的意思便是a=a-5

  • 同理,*=,/=就不说明了…

永远记住,Python中的等号是赋值的意思!而并非1+1=2算出的意思!

尽管Python还有许许多多的运算符,但毕竟这是一篇"初级"教程,只介绍用处比较多的部分...

至此,运算符环节结束.


3. 魔法属性! —— 变量类型

千呼万唤始出来唷!

上上一小节的末尾提到了一个名!词——字符串 ,上节也出现了”10.0”这个现象,这些都跟变量类型分不开关系.

在Python中,存在很多类型的变量类型,这些变量类型就如同装备的属性一般,有金木水火土之分.


  1. 土之属性! —— 字符串(str)

字符串是什么?就是一大串字符啊!

比方说shkwjxbdbens时间就像那啥那啥487646@jdenn(滚键盘滚出来的,没有实际意义…)

我们不妨在Python中print一下这串乱码:

报错了!

这是我们第一次遇到报错的情况!我们分析一下报错内容:

NameError: name 'shkwjxbdbens时间就像那啥那啥487646' is not defined

大致是说:这串乱码没有被定义.

嘶,这是什么意思呢?

在Python中,如同这样的结构被称为字符串,是需要加上冒号才能被print的!

有没有似曾相识的感觉?原来,早在Hello World!那一章节,我们已经接触了作为字符串变量Hello World!.

我们加上冒号输出试一试:

成功了!

果不其然,我们会得出下面一个规律:

所有非纯数字的组合结构都称为字符串,而输出字符串需要加英文状态下的冒号.

你可能会问:这么长的一个字符串,怎么重复调用呢?

使用赋值运算符啊!

例如:

反复调用

在Python中,两个字符串或是字符串变量也可以通过+号合并输出;\n表示换行,关于\(转义符)以后会有详细介绍.

在字符串中,如果想要替换一些特定的文字,改怎么操作呢?

这时,我们需要使用replace方法:

1
2
word='便当真是太厉害啦!'
after_word=word.replace('厉害','菜')

输出一下看看!

1
2
3
4
5
6
7
Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> word='便当真是太厉害啦!'
>>> after_word=word.replace('厉害','菜')
>>> print(after_word)
便当真是太菜啦!
>>>

原本word里的话被替代了!

被称为土之属性的字符串变量必须受到冒号的保护,否则便会流失魔力!


  1. 水之属性! —— 整数(int)

“如果我们想输出1+1,怎么做?”

这句话会使你产生怎样的联想?

“到底是要我输出两个为1的字符串呢,还是算数呢?”

如果是字符串式的输出方式:

1
2
a="1"
print(a+a)

如果是算数的方式:

1
2
a=1
print(a+a)

我们运行一下:

结果

加冒号时,1被当成了字符串,而不加冒号时,a被作为一个整数进行数字运算.

可是,当我们打算运行这样的代码时:

1
2
3
a="1"
b=1
print(a+b)

整数和字符串相加,是什么结果呢?

报错了!(懒得截屏了)报错信息是:

TypeError: can only concatenate str (not "int") to str

意思是说,两种类型的变量发生了冲突.那么此时我们需要类型转换,解决方法如下:

如果想输出两个字符串:

1
2
3
a="1"
b=1
print(a+str(b))

如果想输出算数结果:

1
2
3
a="1"
b=1
print(int(a)+b)

运行一下:

结果

恩,没有报错了!这便是灵活的水属性! —— int.


  1. 风之属性! —— 列表(list)

什么是列表?不难理解,列表就是一串东西组合成的一列表

具体这串东西是什么,Python已经为我们定义好了:可以是所有变量类型,我们称之为元素.

在Python中,定义一个空列表的方法为:

1
ls=[]

举例:一个列表中可以包含的元素:

1
ls=['听话的便当',666,'真的吗',True]

如果我们在终端输出一下这个列表,结果为:

1
2
3
4
5
6
Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> ls=['听话的便当',666,'真的吗',True]
>>> print(ls)
['听话的便当', 666, '真的吗', True]
>>>

如果我们想添加这个列表的元素,只需:

1
2
ls=['听话的便当',666,'真的吗',True]
ls.append('那当然')

再输出一下:

1
2
3
4
5
6
7
Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> ls=['听话的便当',666,'真的吗',True]
>>> ls.append('那当然')
>>> print(ls)
['听话的便当', 666, '真的吗', True, '那当然']
>>>

列表的元素增加了!

如果我们要输出所有元素呢?

我们可以输入:

1
print(ls[0]+ls[1]+ls[2]+ls[3]+ls[4])

还有另一个更简便的方法,叫做循环遍历.具体代码如下:

1
2
3
ls=['听话的便当',666,'真的吗',True]
for element in ls:
print(element)

来逐行看一下:

  1. 第一行,定义了一个名为ls的列表;
  2. 第二行,定义了一个element变量,充当循环过程中的变量;
  3. 第三行,在循环中输出了变量element.

其中,变量element的作用相当于把列表中的每个元素带入到一个循环里并执行这个循环里的事件,

在这段代码中,循环里的事件就是print.

我们来运行一下,看看结果:

1
2
3
4
听话的便当
666
真的吗
True

非常好,按照我们预期的样子输出了每一个元素!

当然,在循环中的事件可以写得很复杂,例如:

1
2
3
ls=['听话的便当',666,'真的吗',True]
for element in ls:
print(str(ls.index(element))+'. '+str(element),end='\n\n')

列表内print()函数的末尾加上end=可以使得输出结果的末尾带上特定内容.\n的意思为换行.

ls.index(element)的意思是获取列表ls中,每个出现的元素element在列表中的位置.

值得一提的是:在编程语言的列表中,第一个元素的位置并不是1,而是0.

运行一下上面的代码:

1
2
3
4
5
6
7
8
0. 听话的便当

1. 666

2. 真的吗

3. True

美化输出了我们的列表内容!这样也会减少代码量,提高运行效率.建议大家多使用列表!

风之属性的list真是快捷呢!


  1. 火之属性! —— 字典(dict)

又是一个顾名思义的变量类型!字典嘛,一一对应即可.

在Python中创建一个空字典的方法:

1
dic={}

字典中的元素会成双成对的出现,并且用:分隔开.:前的元素称为键(keys),后的元素称为值(values);

一对一对的元素,即一个一个的键值对,之间用,分隔开.

比如说,我开了一家水果店,一个苹果的价格是五块钱,草莓两块,香蕉三块.定义一个字典:

1
dic={'苹果':5,'草莓':2,'香蕉':3}

此时我们有一个告示牌贴在门口,上面会告知顾客今天有什么水果,都什么价格.

我们想知道苹果的价格,只需:

1
2
dic={'苹果':5,'草莓':2,'香蕉':3}
print(dic['苹果'])

要输出字典中所有的水果名,即:前的键,只需:

1
2
dic={'苹果':5,'草莓':2,'香蕉':3}
print(dic.keys())

结果为:

1
2
3
4
5
6
Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> dic={'苹果':5,'草莓':2,'香蕉':3}
>>> print(dic.keys())
dict_keys(['苹果', '草莓', '香蕉'])
>>>

输出了一个列表!毕竟一个字典的所有键不可能只有一个嘛!

现在,我们的告示牌上只有水果名,没有价格,未免没法吸引顾客.所有我们把字典中的所有信息美化输出一下:

1
2
3
4
5
dic={'苹果':5,'草莓':2,'香蕉':3}
name=dic.keys()
print('欢迎来到便当的水果店!今日信息:\n')
for n in name:
print(n+'的价格为: '+str(dic[n]),end='\n\n')

结果为:

1
2
3
4
5
6
7
8
欢迎来到便当的水果店!今日信息:

苹果的价格为: 5

草莓的价格为: 2

香蕉的价格为: 3

分析一下代码:

  • 第一行,定义了一个字典,里面有便当水果店的所有信息;
  • 第二行,我们为字典的键(水果名)创建了列表
  • 第四行,我们遍历循环了水果名这个列表,用n这个元素代替了水果名中的各个元素
  • 第五行,我们在循环中输出n(水果名)和n在字典中对应的值,并以换行结尾

因为字典中的值没有加',所以是int型变量.与字符串一起输出时需要转换成str型.

火之属性的字典包含大量信息,要好好利用噢!


4. 招兵买马! —— def()

招兵买马,什么意思呢?

我们可以看到,在前面文章中的代码示例中,很多都有重复代码,比如说:

为了提高效率,我们可以提前定义一些会重复的代码为一个函数.

在Python中,定义一个函数的方法为:

1
2
def name(参数):
pass

例如,我们可以定义一个用来美化输出列表的函数:

1
2
3
def beautiful_ls(ls):
for element in ls:
print('#'*12+'\n'+element)

运行一下,发现什么结果都没有!

原来,我们只定义了函数,而没有调用函数.

怎么调用呢?只需:

1
beautiful_ls(参数)

可以看出,这个函数需要我们传入的参数为一个列表,不妨试一下:

1
2
ls=['听话的便当','真的是','太菜了','!']
beautiful_ls(ls)

结果为:

1
2
3
4
5
6
7
8
############
听话的便当
############
真的是
############
太菜了
############
!

比较一下两种方法.

  1. 原始种:
1
2
3
4
5
6
7
8
print('############')
print(ls[0])
print('############')
print(ls[1])
print('############')
print(ls[2])
print('############')
print(ls[3])
  1. 函数种:
1
2
3
4
5
def beautiful_ls(ls):
for element in ls:
print('#'*12+'\n'+element)
ls=['听话的便当','真的是','太菜了','!']
beautiful_ls(ls)

不但代码量减少了,方便度也大大增加.以后我们需要美化输出列表的时候直接调用函数即可,成千上百个元素组成的列表也能只用一行代码轻松解决!

当然,函数不止包括这种动作型的(即执行),也可以做变量型的!

比方说,我们想在每次输出的末尾都加上!,就可以这样做:

1
2
def beautiful_p(str):
return str+'!'

在这个函数中,可以看到:

  • 我们传入了一个字符串类型的参数
  • return(返回)了这个字符串参数加!

我们把beautiful_lsbeautiful_p一起使用下:

1
2
3
4
5
6
7
ls=['听话的便当','真的是','太菜了','!']
def beautiful_p(str):
return str+'!'
def beautiful_ls(ls):
for element in ls:
print(beautiful_p('#'*12+'\n'+element))
beautiful_ls(ls)

结果为:

1
2
3
4
5
6
7
8
############
听话的便当!
############
真的是!
############
太菜了!
############
!!

为了方便地处理参数,请多多使用函数吧!写一些灵活的函数,减少你的代码量的,无疑是最好的招兵买马.


4. 组织成立! —— import

“哥哥!我们招到了大量士兵(函数)!”
我身旁的眼镜魔法使——一个对我忠心不二的三尺萝莉对我说道
“是吗…好!今天就是我便当崛起的时刻.立即组建军队!”
“是!”


我是听话的便当.

Bye~❛‿˂̵✧