python入门(二)

实际上最近也在开始学习java,基础的入门的书籍很快就看完了,有学习过C++的基础所以对语言入门的理解很顺利,接下来就是实际的运用了。但是突然对网络爬虫产生了浓厚的兴趣,再加上上学期人工智能实际上也没有很深入地学习python,想利用这段时间好好研究,也希望在接下来地数据挖掘中能够得到很好的运用,加油吧,骚年!
[ Note: pdf 利用 python 进行数据分析 : 解释器:Canopy 自带库&可下载 IDE , 可以尝试在 eclipse 中安装 ]

Python基础

模式

命令行模式和 Python 交互模式,请注意区分命令行模式和 Python 交互模式。在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执行 python hello.py 运行一个 .py 文件。看到>>>是在Python交互式环境下。

写一个简单的文件 calc.py ,运行。

100 + 800 - 655

在命令行模式下执行

C:\work>python calc.py

咳咳,敲黑板,推荐一款好用的文本编辑器, sublime text ,帅而且好用到爆炸,嗯嗯,关键是帅,可以下载透明插件,让你的文本编辑器透明化,这个技能十分有用自己体会。

输入输出函数
输出 print() 函数
  • 如果要让 Python 打印出指定的文字,可以用 print() 函数,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号
>>> print('hello, world')
hello, world
  • print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出。print()会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是下面这样拼起来的。
>>> print('The quick brown fox', 'jumps over', 'the lazy dog')
The quick brown fox jumps over the lazy dog
  • print()也可以打印整数,或者计算结果:
>>> print(300)
300
>>> print(100 + 200)
300
  • 也可以同时进行
>>> print('100 + 200 =', 100 + 200)
100 + 200 = 300
输出 input() 函数
  • Python提供了一个input(),可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:
>>> name = input()
Michael

此时可以直接查看输入存入的变量

>>> name
'Michael'
组合使用
name = input()
print('hello,', name)
C:\Workspace> python hello.py
Michael
hello, Michael
  • 添加提示信息
name = input('please enter your name: ')
print('hello,', name)

基础语法

Python的语法比较简单,采用缩进方式
以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。
Python程序是大小写敏感的
Python使用缩进来组织代码块,使用4个空格的缩进。在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格.

数据类型和变量
  • 整数
  • 浮点数
  • 字符串
    字符串是以单引号’或双引号”括起来的任意文本,比如’abc’,”xyz”等等。请注意,”或”“本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。如果’本身也是一个字符,那就可以用”“括起来,比如”I’m OK”包含的字符是I,’,m,空格,O,K这6个字符。
    如果字符串内部既包含’又包含”怎么办?可以用转义字符\来标识,比如:
'I\'m \"OK\"!'

表示的字符串内容是:

I'm "OK"!

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用”’…”’的格式表示多行内容,可以自己试试:

>>> print('''line1
... line2
... line3''')
line1
line2
line3
  • 布尔值
    Python 中可以直接使用 true 和 false 表示布尔值。

  • 运算
    and、or和not运算。就是使用这三个词。

  • 空值
    空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

  • 变量
    变量用 = 赋值

  • 常量
    在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359

但PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。允许被修改。

  • 除法の精确性。
    在Python中,有两种除法,一种除法是 /
>>> 10 / 3
3.3333333333333335

/ 除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:

>>> 9 / 3
3.0

还有一种除法是 //,称为地板除, // 除法只取结果的整数部分,两个整数的除法仍然是整数:

>>> 10 // 3
3

取余:

>>> 10 % 3
1

无论整数做//除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的。

字符串和编码

ASCII 编码和 Unicode 编码的区别:ASCII 编码是 1 个字节,而 Unicode 编码通常是 2 个字节。如果统一成 Unicode 编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用 Unicode 编码比 ASCII 编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以,本着节约的精神,又出现了把 Unicode 编码转化为“可变长编码”的 UTF-8 编码。UTF-8 编码把一个 Unicode 字符根据不同的数字大小编码成 1-6 个字节,常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6 个字节。如果你要传输的文本包含大量英文字符,用 UTF-8 编码就能节省空间

字符ASCIIUnicodeUTF-8
A0100000100000000 0100000101000001
x01001110 0010110111100100 10111000 10101101

在最新的Python 3版本中,字符串是以Unicode编码的

Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。

一般在文件开头加上下面两行
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
格式化

Python中,采用的格式化方式和C语言是一致的,用%实现。如下:

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

列表与元组
list

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。比如,列出班里所有同学的名字,就可以用一个list表示:

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
  • len()函数可以获得list元素的个数 : len(classmates)

  • 索引来访问list中每一个位置的元素,索引从0开始 : classmates[2]

  • list是一个可变的有序表,所以,可以往list中追加元素到末尾 .append()

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
  • 也可把元素插入到指定的位置 .insert()
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
  • 删除list末尾的元素 pop()
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
  • 要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
  • 替换列表,直接赋值给对应的索引位置:
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
  • list里面的元素的数据类型可以不同
>>> L = ['Apple', 123, True]
#list元素也可以是另一个list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4

要注意s只有4个元素,其中s[2]又是一个list,拆开的话:

>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']

要拿到’php’可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。

如果一个list中一个元素也没有,就是一个空的list,它的长度为0:

>>> L = []
>>> len(L)
0
tuple

元组:tuple 有序列表。tuple 和 list 非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

>>> classmates = ('Michael', 'Bob', 'Tracy')

现在,classmates 这个 tuple不能变了,它也没有 append(),insert() 这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用 classmates[0],classmates[-1],但不能赋值成另外的元素。

因为 tuple 不可变,所以代码更安全。如果可能,能用 tuple 代替 list 就尽量用 tuple。

tuple 的陷阱:当你定义一个 tuple 时,在定义的时候,tuple 的元素就必须被确定下来,比如:

>>> t = (1, 2)
>>> t
(1, 2)

如果要定义一个空的tuple,可以写成():

>>> t = ()
>>> t
()

要定义一个只有1个元素的tuple,如果你这么定义:

>>> t = (1)
>>> t
1
#等于下面的语句
>>>t = 1
>>>t
1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)
>>> t
(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

  • 可变的”tuple:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

条件判断

条件判断用 if 实现,使用缩进判断语句,注意后面要有冒号 : ,其中 elif 是 else if 的缩写。

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')
类型转换

Python 提供了 int() 函数来转换类型为整数,float() 函数将整数和字符串转换成浮点数。str() 函数将数字转换成字符。

s = input('birth: ')
birth = int(s)
if birth < 2000:
    print('00前')
else:
    print('00后')
循环
  • 一种是for…in循环,依次把list或tuple中的每个元素迭代出来
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

for x in …循环就是把每个元素代入变量x,然后执行缩进块的语句。

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)

Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数

>>> list(range(5))
[0, 1, 2, 3, 4]

#range(101)就可以生成0-100的整数序列,计算如下:
sum = 0
for x in range(101):
    sum = sum + x
print(sum)
  • while循环
sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)
  • break 退出循环
n = 1
while n <= 100:
    if n > 10: # 当n = 11时,条件满足,执行break语句
        break # break语句会结束当前循环
    print(n)
    n = n + 1
print('END')
  • continue

在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。

n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)
#now we just print odd number.
使用dict和set
  • 字典 dict 全称 dictionary,在其他语言中也称为 map,使用键-值(key-value)存储,具有极快的查找速度。dict 内部存放的顺序和 key 放入的顺序是没有关系的

用Python写一个dict

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

#除了初始化时指定外,还可以通过 key 放入,一个 key 只能对应一个 value
>>> d['Adam'] = 67
>>> d['Adam']
67

#要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
>>> 'Thomas' in d
False

#二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
#注意:返回None的时候Python的交互式命令行不显示结果。

#要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
  • set 和 dict 类似,也是一组 key 的集合,但不存储 value 。由于 key 不能重复,所以,在 set 中,没有重复的 key 。
#创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
#注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

#重复元素在set中自动被过滤:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

#通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

#通过remove(key)方法可以删除元素:
>>> s.remove(4)
>>> s
{1, 2, 3}

#set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值