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’)

 

posted @ 2018-05-16 23:15  Nick_J_Li  阅读(222)  评论(0)    收藏  举报