编程语言: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
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)
############################
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
##########################################
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 [8]: type(a)
float ##浮点型:表示小数
In [9]: 3/2
1
In [10]: 3.0/2 ##当运算数字中存在浮点型时,则可以直接输出浮点型
1.5
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 [20]: 3/2
1.5
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"
##############################
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'
'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 [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 [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']
'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 [60]: li
[1, 2, 3, 3, 3, 4, 4, [1, 2, 3, 4]]
[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}
{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}
#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}
---------------------------------------------------------------------------
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
{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 [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"