python学习笔记(一)

mirror ipython/        ##下载目录
编程语言:python,c, c++, java, php, javascript, vb, c#
真正软件开发时,除了编写代码之外,需要很多基本的已经写好的现成的东西,加快开发速度。因此高级语言通常会提供一个比较完善的基础代码库,可直接调用。eg:编写电子邮件客户端,有针对电子邮件协议的smtp库;针对桌面环境的GUI库。


##python的用处##
1.日常任务,小工具,eg:备份mp3,系统管理员需要的脚本任务
2.做网站,eg:YouTube,国内的豆瓣,Google,Yahoo
3.网络游戏的后台
4.爬虫
python不可以做什么?
    - 操作系统只能用C语言编写
    - 手机应用,IOS用Object-C, Android用Java
    - 3D游戏,最好用C,C++

##编辑方式##
python:
    vim,gedit
windows:
    note:0xefbbbf
    notepad++:
    sublime
    atom
##绝对不能使用word(不是纯文本文件)和windows自带的记事本(在文件开始的地方加特殊字符0xefbbbf<16进制>UTF-8 BOM,有了前缀,程序自动判断它为utf-8格式,并按utf-8格式解析文本或字符串,否则,需要按照字符编码格式一个个去验证)
MAC:自带python2.7环境

##python解释器##
cpython:
ipython:基于cpython,交互方式有所增强
Jpython:java平台上的python解释器,将python代码编译成java字节码执行。
Ironpython:将python代码编译为.net字节

##python基础##
- python是一种计算机编程语言,计算机需要根据编程语言保证程序不能有歧义,任何编程语言都有自己的一套语法,编译器或者解释器就负责把符合语法的程序代码转换成cpu能够识别的机器码,然后执行。

- python采用缩进方式

输入输出:
    raw_input():传入的是字符串,必须int转换
    input()
    print:必须用“”,‘’引起来

数据结构:列表、字典、元组、集合


##python 环境##
[root@foundation20 yum.repos.d]# python        ##执行命令
>>> print "hello"
hello
>>> a = "hello"        ##定义变量
>>> print a

hello




#7-1. 变量
变量是内存中的一块区域。
变量的命名: 变量名由字母,数字,下划线组成。

ipthon中,print后的字符串需要加“”,‘’,否则会默认为变量
[root@localhost ~]# ipython    ##进入环境
In [1]: print a
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-9d7b17ad5387> in <module>()
----> 1 print a
NameError: name 'a' is not defined    ##报错a不是一个变量

In [2]: print "a"
a
In [3]: a = 123
In [4]: print a
123
In [5]: print "100+200"
100+200
In [6]: print '100+200'
100+200
In [8]: print '100+200=',100+200

100+200= 300



用input时会默认为字符串
In [13]: a = raw_input("please input a number:")
please input a number:2
In [14]: print a

2


In [1]: a = raw_input()
5
In [2]: b = raw_input()
99
In [3]: print int(a)+int(b)

104



python下的数值运算
mkdir code
[root@localhost ~]# vim code/myinput.py
###########################
#!/usr/bin/evn python    ##python脚本的运行环境
a = raw_input("please input a number to a:")
b = raw_input("please input a number to b:")
print " a  + b  = ",int(a)+int(b)

############################


[root@localhost ~]# python code/myinput.py
please input a number to a:99

please input a number to b:999

a + b =  1098



##输出中文##
root@localhost ~]# vim code/myinput.py
#!/usr/bin/python
#coding:utf-8
#coding=utf-8
#encoding:utf-8
#encoding=utf-8
#-*-coding:utf-8-*-

a = raw_input("please input a number to a:")
b = raw_input("please input a number to b:")

print "结果 =",int(a)+int(b)




##在交互模式中让python计算一月有多少分钟,使用变量daysPerMonth(每月天数),hoursPerDay(每天小时数)和mintesPerHour(每小时分钟数),分别显示JanMintues(一月分钟数)和AprMintues(四月分钟数)
In [1]: daysPerMonth = 30
In [2]: hoursPerDay = 24
In [3]: mintesPerHour = 60
In [4]: JanMintues = daysPerMonth*hoursPerDay*mintesPerHour
In [5]: print JanMintues
43200
In [6]: daysPerMonth = 31
In [7]: print daysPerMonth*hoursPerDay*mintesPerHour

44640



脚本形式,输入当月天数即可计算
vim code/fenzhong.py
#########################################
#!/usr/bin/python
#coding:utf-8
#coding=utf-8
#encoding:utf-8
#encoding=utf-8
#-*-coding:utf-8-*-
dayPerMonth = input("please input daynumber:")
hoursPerDay = 24
minutesPerHour = 60
if dayPerMonth > 30:
        print "一月秒数=",int(dayPerMonth)*hoursPerDay*minutesPerHour
elif dayPerMonth == 30:
        print "四月秒数=",int(dayPerMonth)*hoursPerDay*minutesPerHour
elif dayPerMonth == 28:
        print "二月秒数=",int(dayPerMonth)*hoursPerDay*minutesPerHour

##########################################


[root@localhost ~]# python code/fenzhong.py
please input daynumber:31
一月秒数= 44640
[root@localhost ~]# python code/fenzhong.py
please input daynumber:28
二月秒数= 40320
[root@localhost ~]# python code/fenzhong.py
please input daynumber:30

四月秒数= 43200



赋值运算符:=, +=, -=, /=, *=, %=
算术运算符:+, -, *, /, //, %, **
关系运算符: >, >=, <, <=, !=, ==
逻辑运算符:逻辑与and, 逻辑或or, 逻辑非not


In [1]: a = 1L        ##强制定义为长整型
In [2]: type(a)
long
In [3]: a = 999999999999999
In [4]: type(a)
int
In [5]: a = 999999999999999999999999999999999999999999999999
In [6]: type(a)

long


In [7]: a = 1.0    
In [8]: type(a)
float        ##浮点型:表示小数
In [9]: 3/2
1
In [10]: 3.0/2        ##当运算数字中存在浮点型时,则可以直接输出浮点型

1.5


In [11]: a = 3j
In [12]: type(a)
complex            ##复数:python对复数提供内嵌支持
In [13]: 12e7
120000000.0
In [14]: a = 1.2e-3
In [15]: type(a)
float
In [16]: print a
0.0012
In [17]: long(1)
1L
In [18]: float(1)    ##浮点型

1.0


In [19]: from __future__ import division    ##导入模块
In [20]: 3/2

1.5


In [21]: a = 1
In [22]: a += 1
In [23]: print a
2

if结构
    - if-else结构:
    - if-elif-else结构:
    - if条件表达式:
        逻辑值(bool)用来表示诸如对与错,真与假,空与非空等概念,True与False.
        逻辑运算符:and,or,not

##python下的四则运算##
vim code/yunsuan.py
###########################
#!/usr/bin/env python
#coding=utf-8
from __future__ import division
num1 = raw_input("please input first number:")
operator = raw_input ("please input the operator:")
num2 = raw_input("please input seccond number:")
if operator == "+":
        print int(num1)+int(num2)
elif operator == "-":
        print int(num1)-int(num2)
elif operator == "*":
        print int(num1)*int(num2)
elif operator == "/":
        print int(num1)/int(num2)
else:
        print "Error"

##############################


[root@localhost ~]# python code/yunsuan.py
please input first number:2
please input the operator:+
please input seccond number:3
5
[root@localhost ~]# python code/yunsuan.py
please input first number:43
please input the operator:*
please input seccond number:64
2752
[root@localhost ~]# python code/yunsuan.py
please input first number:5
please input the operator:%
please input seccond number:2

Error



字符串: 常用三种定义方式

>>> str1 = 'our company is westos'
>>> str2 = "our company is westos"
>>> str3 = """our company is westos"""
>>> type(str1)
<type 'str'>
>>> type(str2)
<type 'str'>
>>> type(str3)
<type 'str'>

##在文本模式下""" """三引号,可直接按格式输入,在脚本中,三引号表示注释
>>> mail = "tom: hello i am westos "
>>> print mail
tom: hello i am westos
>>> mail = "tom:\n hello\n i am westos "
>>> print mail
tom:
 hello
 i am westos

In [1]: mail = """hejie:
   ...:         holle
   ...:         i am westos
   ...: """

In [2]: print mail
hejie:
    holle

    i am westos



##切片##
In [16]: a
'abcdefg'
In [17]: a[0]
'a'
In [18]: a[1:5]        ##代表切片取出第二个到第五个
'bcde'
In [19]: a[0:5:2]    ##代表切片取出第一个到第五个间隔为2
'ace'
In [20]: a[:5]
'abcde'
In [21]: a[4:]
'efg'
In [22]: a[4:1]        ##python中默认是从左向右取值
''
In [23]: a[4:1:-1]    ##当步长为-1时,倒序从右往左取值

'edc'


In [24]: a[-1]
'g'
In [25]: a[-4:-1]    ##代表倒数第二个到倒数第四个切片
'def'
In [26]: a[-1:-5:-2]

'ge'




##判断文件中是否存在所需要的字符##
vim code/chazhao.py
########################
#!/usr/bin/evn python
#coding:utf-8
str = "abcdefg"
b = raw_input ("请输入一个字符:")
if b in str:
        print "存在"
else:
        print "不存在"

#########################




##数值比较,只能同位数相比##
In [48]: str1 = "222"
In [49]: str2 = "111"
In [50]: str3 = "222"
In [51]: str4 = "333"
In [52]: cmp(str1,str2)
1                ##当str1<str2,输出为正数
In [53]: cmp(str1,str3)
0                ##当str1=str2,输出为0
In [54]: cmp(str1,str4)

-1                ##当str1>str2,输出为负数



##元组##
元组的定义:
    -定义空元组    tuple = ()
    -定义单个值的元组    tuple = (1,)
    -一般的元组    tuple = (1,2,3)
使用()圆括号中用逗号分割的项目定义
元组的值不可改变
内存存储空间是不同的
字符串中操作提取姓名/年龄/性别的方式不方便,诞生元组与列表这两个数据类型
In [21]: tuple = ()    ##空元组
In [22]: type(tuple)
tuple
In [23]: tuple = (1)
In [24]: type(tuple)
int
In [25]: tuple = (1,)    ##单一元组
In [26]: type(tuple)

tuple


In [1]: user1 = ("hello", 6, "boy")
In [2]: user2 = ("hai", 10, "girl")
In [3]: user1[0]
'hello'
In [4]: user2[2]

'girl'




In [7]: t = (1,2,3,1,2,3,1,2)
In [8]: t.count(1)    ##输出t中1的个数
3
In [9]: t.count(3)    ##输出t中3的个数
2
In [10]: t.index(2)    ##查找在第几位出现了2
1
In [11]: t.index(2,1,5)    ##查找在第二位至第六位中第几位出现了2
1
In [12]: t = ("hello", 10, "boy", "hello")
In [13]: t.index("hello")    ##查找第几位出现了hello
0
In [14]: t.index("hello",1,7)    ##查找在第二至八位中哪一位出现了hello
3
In [15]: name, age, gender, kind = t
In [16]: print name, age, gender, kind

hello 10 boy hello




##li列表##
使用[]表示列表,包含多个以逗号分隔的数字或字串
列表是可变类型的序列,而元组与字符串是不可变类型的序列
列表中的内存储空间是相同的
In [27]: li = [1,2,3,4,5]
In [28]: li
[1, 2, 3, 4, 5]
In [29]: li[1] += 1    ##使第2位加1
In [30]: li
[1, 3, 3, 4, 5]
In [31]: len(li)    ##输出列表长度
5
In [32]: li.extend([1,2,3,4])    ##在列表末尾添加列表
In [33]: li
[1, 3, 3, 4, 5, 1, 2, 3, 4]
In [34]: li.append("a")        ##在列表末尾添加字符
In [35]: li

[1, 3, 3, 4, 5, 1, 2, 3, 4, 'a']


In [36]: li.append([1,2,3,4])    ##在列表末尾添加字符组
In [37]: li
[1, 3, 3, 4, 5, 1, 2, 3, 4, 'a', [1, 2, 3, 4]]
In [38]: li.count(1)        ##输出列表中1的个数
2
In [39]: li.insert(0,0)        ##在列表第一位添入0
In [40]: li
[0, 1, 3, 3, 4, 5, 1, 2, 3, 4, 'a', [1, 2, 3, 4]]
In [41]: li.reverse()        ##将列表倒序输出
In [42]: li
[[1, 2, 3, 4], 'a', 4, 3, 2, 1, 5, 4, 3, 3, 1, 0]
In [43]: li.sort()        ##排序
In [44]: li

[0, 1, 1, 2, 3, 3, 3, 4, 4, 5, [1, 2, 3, 4], 'a']


In [45]: li.pop()        ##弹出,默认弹出最后一位
'a'
In [46]: li
[0, 1, 1, 2, 3, 3, 3, 4, 4, 5, [1, 2, 3, 4]]
In [47]: li.pop(0)        ##弹出第一位
0
In [48]: li

[1, 1, 2, 3, 3, 3, 4, 4, 5, [1, 2, 3, 4]]


In [59]: li.remove(5)        ##删除列表中的5
In [60]: li

[1, 2, 3, 3, 3, 4, 4, [1, 2, 3, 4]]


In [61]: li
[1, 2, 3, 3, 3, 4, 4, [1, 2, 3, 4]]
In [62]: li.remove(li[0])    ##删除列表中的第一位
In [63]: li
[2, 3, 3, 3, 4, 4, [1, 2, 3, 4]]
In [64]: del(li[0])        ##删除列表中的第一位
In [65]: li

[3, 3, 3, 4, 4, [1, 2, 3, 4]]




In [72]: t = (1,2,3,[1,2,3])
In [73]: t[3][0] = 9    ##将第四位中的第一位改为9
In [74]: t

(1, 2, 3, [9, 2, 3])



##输出1到100中的偶数##
交互模式:
In [70]: li range[1,101]
In [71]: li[1:101:2]

脚本:
#/usr/bin/evn python
#encoding:utf-8
print "1-100中的偶数:";
li = range(1,101)
print li [1:101:2]
print "1-100中的奇数:";

print li [0:101:2]





In [75]: s1 = {1,2,3,4}        
In [76]: s2 = {3,4,5}
In [77]: s1 - s2
{1, 2}
In [78]: s2 - s1
{5}
In [79]: s1.difference(s2)    ##比较s1与s2两集合的不同
{1, 2}
In [80]: s1.difference_update(s2)    ##比较s1与s2两集合的不同并赋值于s1
In [81]: s1

{1, 2}


In [85]: s1
{1, 2, 3, 4}
In [86]: s2
{3, 4, 5}
In [87]: s1.intersection(s2)    ##输出s1与s2两集合的交集
{3, 4}
In [88]: s1.intersection_update(s2)
In [89]: s1

{3, 4}


In [93]: s1#!/usr/bin/evn python
#coding=utf-8
a = int(raw_input("please input first number:"))
operator = raw_input("operator:")
b = int(raw_input("please input seccond number:"))
dic = {"+":a+b, "-":a-b, "*":a*b, "/":a/b}
dic.get(operator)
print dic.get(operator)

{1, 2, 3, 4}
In [94]: s2
{3, 4, 5}
In [95]: s1.union(s2)        ##输出s1与s2两集合的并集

{1, 2, 3, 4, 5}




In [100]: s1 = {1,2,3,4}
In [101]: s2 = {2,3,4}
In [102]: s1.add(5)        ##添加字符
In [103]: s1
{1, 2, 3, 4, 5}
In [104]: s1.update([1,2,6,7])    ##添加列表
In [105]: s1

{1, 2, 3, 4, 5, 6, 70}


In [113]: s1.remove(9)    
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-113-4bec79457d65> in <module>()
----> 1 s1.remove(9)

KeyError: 9
In [114]: s1.discard(9)
In [115]: s1
{1, 2, 3, 4, 5, 6, 7}
remove删除一个不存在的值时,会报错,而discard不会

In [116]: s1.discard(6)



##dic字典下的四则运算##
#!/usr/bin/evn python
#coding=utf-8
a = int(raw_input("please input first number:"))
operator = raw_input("operator:")
b = int(raw_input("please input seccond number:"))
dic = {"+":a+b, "-":a-b, "*":a*b, "/":a/b}
dic.get(operator)
print dic.get(operator)

In [117]: s1
{1, 2, 3, 4, 5, 7}
In [118]: s1.isdisjoint(s2)    ##交集取反,有交集显示False
False
In [119]: s1.issubset(s2)    ##判断s1是否是s2的子集
False
In [120]: s2.issubset(s1)    ##判断s2是否是s1的子集

True


In [122]: s1
{1, 2, 3, 4, 5, 7}
In [123]: s2
{2, 3, 4}
In [124]: s1.issuperset(s2)    ##判断s2是否是s1的真子集
True
In [125]: s2.issuperset(s1)    ##判断s1是否是s2的真子集

False


In [136]: s1 = {5,31,7,87,45}
In [137]: s1
{5, 7, 31, 45, 87}
In [138]: s1.pop()
31
In [139]: s1.pop()
7

.pop:随机移除





总结:
compute:
    =,+=,
    +,-,*,/,%,**
    >,<,>=,<=,!=,==
    not, or, and
int,long,float,complex
序列:列表,元组,字符串
特点:可以做索引和切片
可执行的操作:
    len():求序列长度
    +:连接两个序列
    *:重复序列元素
    in:判断元素是否在序列中
    max():返回最大值
    min():返回最小值
    cmp(str1,str2):比较两个序列值是否相同
类型:    字符串str:stringFormat(%d整型,%f浮点型,%s字符串,%x十六进制数)
    列表list:list.append(),list.extend()
    元组tuple:t.count(),t.index()
set:-交集,&差集,|并集
dict
定义字符串的三种方式:“”,‘’,""" """

##输入用户名和密码,正确则显示“login success”,失败三次则显示“”login error“,没有此用户则显示”username is not exist“
#!/usr/bin/env python
import getpass                           ##添加模块
#coding=utf-8
username = raw_input ("please input username:")
if username == "fentiao":
        passwd = getpass.getpass("please input possword:")       ##输入密码时密码不显示
        if passwd == "westos":
                print "login success"
        else:
                passwd = getpass.getpass("please input possword:")
                if passwd == "westos":
                        print "login success"
                else:
                        passwd = getpass.getpass("please input possword:")
                        if passwd == "westos":
                                print "login success"
                        else:
                                print "login error"
else:
        print "username is not exist"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值