Python入门(真0基础)
一 前言
不得不说,时代在变化。十年前,令人羡慕的高盛美股交易柜台坐满了交易员,那是令人垂涎的体面工作。如今,几百个柜台缩减至个位数,一个Quant写的程序替代了无数人。在另外一个领域,人类智慧最后的尊严(围棋)也沦陷,Alpha Go的出现告诉我们,未来已来。由于站的高度不够,视野受到局限,就不在这里描绘未来了。但是,gut feeling告诉我,想在将来的世界立足,想要给孩子一个更高的格局,我必须要走出现在的舒服圈,不断突破自己。而学编程可能是最有意义的一次突破。因为曾经有一个投资人和我说过,去创造产品,只有创造才是终端,只有创造才更值得投资。而编程就是创造的基础。
对于从来没有写过代码的我来说,从小就觉得编程是一个陌生、神圣和充满神秘感的存在。由于一直都没机会接触,身边的圈子都与之没有交集,所以这次迈出学Python这一步,是一次勇敢的冒险。希望这一系列的总结,能够让自己见证自己的成长。从0到1永远是最难的,所幸我不用自己摸索太多,就能够走上从1到n的路。感恩!Let's fight!!!
二 编程语言选择与编程目的
语言的出现是人类文明发展的必然结果。大量知识需要得到传承,人们的协作也需要语言交流才能同步。编程语言就像人类语言一样,前者是和机器交流,后者是和人交流。世界上有几百种编程语言,当我知道他们都是有着同样的目的,只是他们的规则不同,写法、用法不同时,编程的神秘感瞬间减半了。。。哈哈哈
1、既然语言这么多,我为什么偏偏选择了Python?
# 相信很多博主都已经写了各种各样的原因,包括列举了语言的排名和潜力,美国几个大公司都在用等等。 # For me,就只有一句话:因为其他语言学不来,时间也不够。0基础真不是吹的(莫名的自豪感~)。。。 # 没必要花太多时间去说服自己,毕竟逻辑是大体想通的,Python算是非常好入门的了,就先精通一个吧。
2、我编程的目的是?
# 效率。每天重复繁琐的工作,耗时但效率效益都低。如果能够通过编程,让电脑集中处理问题,是不是会更爽一些?就像以前的交易员需要坐在电脑面前看着股市涨跌,连上个厕所都怕亏掉。所以就出现了程序化交易,让电脑处理问题,解放了交易员的时间和双手。
三 编程语言的分类
虽说编程语言都有着同样的目的,但是他们之间的一些区别还是必须得知道。
1、三类编程语言(也在一定程度上代表了计算机发展)
# 机器语言:一堆0和1组成的二进制语言,直接操作机器硬件; # 汇编语言:可以用英文缩写了,但是太冗长,难记忆,本质上还是直接操作机器硬件; # 高级语言:现在基本都在学高级语言,更加方便,像乐高一样被制作好,会用就好,但不直接操作机器硬件。
就像我们美丽的母语,要是美国人听不懂,没有翻译在的交流就是对牛弹琴。高级语言虽好,计算机读不懂也是徒劳的。那是不是会有什么东西充当翻译的角色呢?答案是:必须有啊~
2、两种翻译方式
# 编译型(需要编译器,事后翻译):例如C语言,执行速度快,修改不方便 # 解释型(需要解释器,同声传译):例如Python,执行速度慢,方便修改
四 第一个Python程序
程序员都有个习惯,第一个象征式的程序要写Hello World!这让我想起了索尼的PSP掌机,每当有大神破解,都放出一张Hello World!当时的我完全没懂这是件神圣的事情。。。
print('Hello World!') # 有机会可以去学学其他语言的Hello World!挺有意思~觉得还是Python短小精悍~
五 变量
1、为什么要懂变量?
作为一个什么都不懂的门外汉,心里早已准备好接受各种新名词的洗礼。来吧~~变量就像字面意思,变来变去的量。为什么要懂这个啊?
# 给你一个场景。按过计算器的都知道,当你要算 (123+456)*(789+234) 时,是不是都要分开两组加法后,记住加法的答案再去相乘呢?也就是说中间需要人脑自己去过渡一下,计算器只帮了一部分忙。 # 若计算器有了变量这个东西,能分别储存 (123+456) 和 (789+234)的结果,假设分别为 a 和 b,那是不是只需要将 a 和 b 相乘就可以了呢?脑子不需要参与到记忆答案去。这就是变量的存在意义。
2、来定义(写)一些变量吧~
#变量名 = 变量值 name = 'Nick' age = '28' gender = 'male' >>>a = 123 + 456 >>>b = 789 + 234 >>>c = a * b >>>c 592317
3、一些值得注意的小规则
# 变量名只能是【字母】、【数字】或【下划线】的任意组合 # 变量名的第一个字符不能是数字 # 总有一些名字是被占用的,为变量起名字不能用以下列表的名字,就像被注册的商标一样,不能随便用 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] #是的,一看见这么多,心里肯定万千草泥马奔腾而过。没关系的,不用记,之后写着写着就知道了,大不了真的用了,就报错呗~反正不会死~~~
4、变量名有两个或以上单词怎么办?(我词汇量大我怕谁~~~)
# 试一下这两个方法吧(只要不用中文或拼音就谢天谢地了) # 下划线 (一般用这个更直观) age_of_nick = 28 # 驼峰体 (看得头晕,别用) AgeOfNick = 28
六 人与程序交互
每次要登陆邮箱,总是需要输入账号和密码。没有了输入这一步,就没有后面的事了。(我的浏览器会自动保存~)(滚~~~~)怎么做到让程序要求我输入东西的呢?
# 有这么一个东东叫input # 这样写程序,定义了 a 这个变量,执行后显示我定义的内容“--->”提示用户输入 >>>a = input('--->') # 执行程序,就会显示以下符号,同时让用户输入东西 --->
七 注释
写了好几点,应该开始有人会问,那个井号是干嘛的?为啥在字前面要加,在程序前就不加?其实不是这样的。。。
# 这个东西叫做注释,就像看书时,偶尔会看见一个数字,然后看书的底部,会有对应数字的解释。同理,用在这里是解释将要写的程序是干嘛的~ # 在实战中还是不要处处加注释,你想想要是你的书每一段都有好几个注释,是多么烦躁的事情~ # 注释可以用中文,没人会打你的。。。吧~~~
八 数据类型(又是新名词~~)
还记得变量里面,等号左边叫变量名,等号右边叫变量值吗?其实这个变量值就是数据。数据有着不同的类型:
1、数字
# int整型 定义:age = 10 # age = int(10) 例如:年龄,等级,身份证号,qq号,个数 # float浮点型(就是小数,之所以叫浮点,就是因为科学计数法时,小数点会变动) 定义:salary = 3.1 # salary = float(3.1) 例如:工资,身高,体重
2、字符串
# 加了引号的字符就是字符串类型,所以上面没加【单引号】,【双引号】的就不是字符串,是数字了 定义:name = 'nick' # name = str('nick') 例如:姓名,性别,国籍,种族
3、列表 [中括号]
# 在[]内用逗号分隔,可以存放多个任意类型的值 定义:students = ['a', 'b', 'c'] # students = list(['a', 'b', 'c']) 例如:一个班有多个学生,不同学生的姓名可以储存到一个列表,就像Excel一样
4、字典 {大括号}
既然有了列表可以存放数据,为什么还要用字典呢?
# 例如a学生28岁,b学生30岁,c学生32岁,用列表表示如下: list = [['a', 28], ['b', 30], ['c', 32]] # 当我要查找列表里面的a的岁数时,我就必须输入[‘a’, 28]才能找出来。问题就是我都知道了,还查来干嘛。万一数据越来越多,还有手机号,性别等,我就得全部都知道才能查得到,多麻烦。。。 # 这就有了字典的存在必要,因为字典里面都有标签,叫做key,用字典表示上面的内容如下: dic = {'a': 28, 'b': 30, 'c': 32} # 只需要查key,就能够找到对应的内容,提高效率
5、元组 (小括号)
# 和列表相似,但是用的是小括号 tuple_name = ('a', 'b', 'c') tuple_age = (28, 30, 32)
6、布尔 (就是 True 和 False )
# 条件成立就是True,不成立就是False >>>a = 1 >>>b = 2 >>>a > b False >>> >>>a < b True
7、集合 {大括号}
# 集合与列表最大的区别是:集合里的值只会出现一次,若重复输入,会自动去重 # {3, 4, 5} 和 {5, 4, 3}是同一个集合 # 集合里面的值的数据类型必须是不可变的,接下去马上讲 >>>set = {3, 4, 5}
九 可变与不可变数据类型
这部分可能有点绕,上面刚学完数据类型,应该快要原地爆炸了吧?先hold住,来看看什么是可变,什么是不可变。
# 可以简单总结为下面两句话 # 可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表、字典、集合 # 不可变类型:value一旦改变,id也改变,则称为不可变类型,如整型、字符串、元组 # id是什么?就是用来查内存地址的方式。如下: >>>list = [1, 2, 3, 4] >>>id(list) # 查list内存地址 4392665160 # 这是list的内存地址 >>>list[1] = 1.5 # 将列表中第二个value改为1.5 >>>list [1, 1.5, 3, 4] >>>id(list) 4392665160 # 这是value被修改之后,list的内存地址,与上面一致
# 即使改了列表内容,列表的id依然不变,因此列表为可变类型,允许改变值而不改变id
十 格式化输出(就是输出的东西要像个样,人靠衣装,代码也要脸)
有时候需要用一定的格式去显示,例如:I'm XXX from XXX.
这种情况无法直接插入变量去显示,只能用一个叫做占位符的东西(%s, %d),然后让占位符去接收变量。
name = 'nick' country = 'China' age = 28 # %s 字符串占位符:可以接收字符串,也可接收数字 print("I'm %s from %s.", %(name, country)) # %d 数字占位符:只可接收数字,接其他会报错 print("I'm %d.", %(age))
十一 基本运算符
就像小学里,我们学会了数数之后,就开始了各种加减乘除的教学,这里也不例外:
1、算术运算(以下假设变量:a=10,b=20)

2、比较运算(以下假设变量:a=10,b=20)

3、赋值运算(以下假设变量:a=10,b=20)

4、逻辑运算

十二 流程控制
到此,一些最基本的运算已经总结完了。但是想要写出程序来,就要设计出一个又一个步骤流程来。举个例子,上面我曾经总结过input的用法,当我登陆邮箱的时候,我需要输入账号和密码。但是需要有一个流程来判断我是否输入正确。若正确才能进入,不正确就得重新输入。这个就是流程控制。要想控制好整个流程,就要懂得一些常用语句。
1、if...else...
username = 'nick' # 定义了名字 password = ‘1234’ # 定义了密码 name = input('username:') # 程序与用户交互,让用户输入用户名 pswd = input('password:') # 程序与用户交互,让用户输入密码 if name == username: # 若输入的用户名与定义的名字相同,进入下一个if,不同则跳到最下边的else if pswd == password: # 若输入的密码与定义的密码相同,打印Welcome!,不同则跳到倒数第二个else print('Welcome!') else: print('invalid username or password') else: print('invalid username or password') # 若是多条件,可以用elif(合并了else和if),改写一下上面 if name == username: elif pswd == password: print('Welcome!') else: print('invalid username or password')
2、while...else...
count = 0 # 定义一个计数器从0开始 while count < 10: # 当count小于10,循环打印count print(count) count += 1 # 这个写法在上面的赋值运算有介绍,就是count = count + 1 else: print(123) # 若上方的while循环顺利执行完毕,则会打印else内容,常用于检验while循环是否有问题 # 若想制造死循环 count = 0 while True: # 会一直打印count,每次加1 print(count) count += 1
3、for
# for也有循环,一般用来打印列表或字典里面的值用for循环较多 for i in range(5): print(i) # 会打印出0,1,2,3,4
4、break & continue
# 有循环,自然就有破循环的方法 # break的用法 count = 0 while count < 10: if count == 8: break # 当count等于8时退出循环 else: print(count) count += 1 # continue的用法 while True: print(‘123’) continue #退出了本次循环,所以456不会被打印,总是打印了123就退出本次循环进入下一次 print(‘456’)

浙公网安备 33010602011771号