py_chunwei

导航

Python之旅Day1 数据类型初识(数字|字符串|列表|数据运算) 编码 表达式(if...else|for|while)

初识PYTHON

  Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象解释型计算机程序设计语言,由荷兰人Guido van Rossum吉多·范罗苏姆)于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件, 源代码解释器CPython遵循 GPL(GNU General Public License)协议。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。  

  根据最新的TIOBE排行榜,Python赶超PHP占据第4,称为C、C++、JAVA之外的全球第4 大最流行的编程语言。

 

常见的语言类型及其优缺说明

  编译型

    优点:编译器一般户有预编译的过程对代码进行优化。因为编译只做一次,运行时不需编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

    缺点:变异之后如需修改就要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件

  解释型

    优点:有良好的平台兼容性,在安装了解释器的前提下就可以跑在任何环境中运行。代码可直接修改并快速部署,无需停机维护。

    缺点:程序每运行一次的时候都需解释一遍,性能上不如编译型语言。

 

 

PYTHON的优缺点

  优点:

  1)Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

  2)开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持。

  3)高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

  4)可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

  5)可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

  6)可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

  缺点:

  1)速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。

  2)代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。

  3)线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。

 

PYTHON的运用

Python目前主要运用领域

  • 云计算: 云计算最火的语言, 典型应用OpenStac
  • web开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣; 典型WEB框架有Django
  • 科学计算与人工智能:典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系统运维:运维开发
  • 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高
  • 图形GUI:PyQT, WxPython,TkInter

Python目前在主流公司的运用:

  • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发
  • CIA: 美国中情局网站就是用Python开发的
  • NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
  • YouTube:世界上最大的视频网站YouTube就是用Python开发的
  • Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载
  • Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发
  • Facebook:大量的基础库均通过Python实现的
  • Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
  • 豆瓣: 公司几乎所有的业务均是通过Python开发的
  • 知乎: 国内最大的问答社区,通过Python开发(国外Quora)
  • 春雨医生:国内知名的在线医疗网站是用Python开发的
  • 除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务

 

常见的PYTHON解释器

  当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

  1)IPython:

  IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

  2)PyPy:

  PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点

  3)Jpython:

  Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

  4)IronPython:

  IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

 

  Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

 

PYTHON安装

  1)windows端:

  • 下载安装包
    https://www.python.org/downloads/
  • 安装
    默认安装路径:C:\python27
  • 配置环境变量
    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
    如:原来的值;C:\python27,切记前面有分号

  2)linux与mac端:

  无需安装,原装Python环境  ps:如果自带2.6,请更新至2.7

 

PYTHON第一个程序之HEELO WORLD

  编程之旅之永远的“hello world”

在linux下编写py文件执行:

#!/usr/bin/env python   #在linux环境下需指定解释器

 print "hello,world"

  执行:python hello.py即可。(ps:想要./hello.py执行成功前提在于前需给予 hello.py 执行权限,chmod 755 hello.py

在windows的交互器中执行:

C:\Users\Administrator>python
Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello world")
Hello world
>>>

 

其他语言下的hello world

1  #include <iostream>
2  int main(void)
3  {
4  std::cout<<"Hello world";
5  }
C++
1  #include <stdio.h>
2  int main(void)
3  {
4  printf("\nhello world!");
5  return 0;
6  }
C
1 public class HelloWorld{
2   // 程序的入口
3   public static void main(String args[]){
4     // 向控制台输出信息
5     System.out.println("Hello World!");
6   }
7 }
8 
9 JAVA
JAVA
1  <?php  
2             echo "hello world!";  
3  ?>  
PHP
1  puts "Hello world."  
Ruby
 1 package main
 2 
 3 import "fmt"
 4 
 5 func main(){
 6 
 7     fmt.Printf("Hello World!\n God Bless You!");
 8 
 9 }
10 
11 Go
GO

 

字符编码

ASCII码

  ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

 

关于中文

  为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

  GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

  GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

  从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

 

万国码

  ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

  Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

 

Python编码2.x VS 3.X

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill,Python3以后默认utf-8)

ascill码无法解析中文:

[root@mobanji python16]# cat chinese.py 
#!/usr/bin/env python
print "你好,世界"
[root@mobanji python16]# python chinese.py 
  File "chinese.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file chinese.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
[root@mobanji python16]# 

指定解释器并加载指定字符集:

[root@mobanji python16]# cat chinese.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-    ##加载指定utf-8字符集
print "你好,世界"

[root@mobanji python16]# python chinese.py 
你好,世界
[root@mobanji python16]# 

 

PYTHON的文件注释

  单行注释:#

  多行注释:''' ''' 或者shift+?

 

PYTHON中的单双引号

  在Python中,单双引号本无实质上的任何区别,且单双引号只能识别单行。

Python中单双引号的区别在于有如下定义变量时:

msg = 'my name's chunwei ...'     #语法错误
msg = "my name's chunwei ..."    #正常状态

 

PYTHON之变量

变量的作用?

  变量是用来存储程序运行的中间运算结果。

变量规范

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字
  • 以下关键字不能声明为变量名
    ['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']

申明变量

  常见的申明变量赋值的写法

#!/usr/bin/env python
#_*_coding:utf-8_*_

ageofchunwei = 24        #变量名小写
age_of_chunwei = 24    #变量名小写加下划线
AgeOfChunwei = 24       #变量名单个词首字母大写(驼峰法)
Age_of_chunwei = 24    #变量名首字母大写并加下划线(Python默认该写法为:类名
Age_Of_Chunwei =24    #变量名单个词首字母大写且加下划线(Python默认该写法为:常量

  申明变量写法说明:1)推荐写法为‘变量名小写加下划线’(age_of_chunwei)   2)首字母不要随便大写

 

PYTHON之数据类型

数据类型——数字

int (整型)

  在32位操作系统机器上,整数的位数为32位,取值范围位-2**32~2**21-1,即为:-2147483648~2147483647

long (长整型)

  在64位操作系统机器上,整数的位数为64位,取值范围-2**63~2**63-1,即为:-9223372036854775808~9223372036854775807

  PS:和C语言不同,Python的长整数没有指定的位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,所以,导致我们使用的长整型数数值不可能无限大(自Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数。)

    Python3.X里没有了长整型

float (浮点型)

  浮点数用来处理实数,即带有小数的数字。类似C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex (复数)

  复数由实数部分和虚数部分组成,一般形式位x+yj,其中x是复数的实数部分,y是复数的虚数部分,且这里的x和y都是实数。例如(-1+2j)和(2.2-6.8j),j为虚数

 

数据类型——布尔&字符串

布尔值

  真|假(True|False)《===》 1|0

字符串(str)

  “hello world” 

 

字符串拼接

  Python中的字符串在C语言中体现为一个字符数组,每次创建字符串时需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,+号每出现一次就会从新开辟一块空间

字符串常用功能

  1)格式化输出  

>>> name = "wuchunwei"
>>> age = 23
>>> money = 66.66
>>> info = "My name is %s,I am %d years old, I haved money %f "%(name,age,money)
>>> info
'My name is wuchunwei,I am 23 years old, I haved money 66.660000 '
>>>
>>>

>>> info = "My name is %s,I am %d years old, I haved money %f "%(name,age,name)  #字符类型需要对应
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a float is required
>>>

###在Python,%s--->字符串 ;%d--->整数;%f--->浮点数;%r--->原生字符,非转义

  2)移除空白

>>> name = 'wuchunwei  '
>>> name.strip()
'wuchunwei'
>>>
>>> name = '  wuchunwei \n  '
>>> name.strip()
'wuchunwei'
>>>

  3)长度

>>> name = 'wuchunwei'
>>> len(name)
9
>>> name = 'wuchun wei'
>>> len(name)
10
>>> name = '  wuchunwei  '
>>> len(name)
13
>>>

  4)索引

>>> name = 'wuchunwei'
>>> name[0]
'w'
>>> name[3]
'h'
>>> name[-1]
'i'
>>> name[-9]
'w'
>>>

  5)切片

>>> name = 'wuchunwei'
>>> name[0:-1]
'wuchunwe'
>>> name[0:1]
'w'
>>> name[0:2]
'wu'
>>> name[0:8]
'wuchunwe'
>>> name[0:9]
'wuchunwei'

>>>
###切片顾头不顾尾;切3个数是[0:4],切10个就是[0:11]

 

数据类型——列表 (list)

  列表是Python中最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。

常见的列表创建方式

name_list = ['chunwei', 'jack', 'mengmeng'] 
或
name_list = list(['chunwei', 'jack', 'mengmeng'])

###正常情况下推荐写法为第一种

  变量一旦赋值,不重新赋值的情况下无法更改

>>> names = " chunwei jack mengmeng  weiqi \nd  "
>>> names.strip()        
'chunwei jack mengmeng  weiqi \nd'
>>>
>>> names
' chunwei jack mengmeng  weiqi \nd  '
>>>
>>> names = names.strip()       ###重新赋值
>>> names
'chunwei jack mengmeng  weiqi \nd'
>>>

 

列表的常见操作

>>> names = []   ###定义空列表
>>> names
[]
>>> names = ["Yangmengmeng","Wuchunwei"]
>>> names
['Yangmengmeng', 'Wuchunwei']
>>>
>>> names[1]
'Wuchunwei'
>>> names[1] = "WeiGe"    ###下标重新赋值
>>> names
['Yangmengmeng', 'WeiGe']
>>>

  1)追加

>>> names.append("Jack")       ###append为追加
>>> names
['Yangmengmeng', 'WeiGe', 'Jack']
>>> names.append("rain")
>>> names
['Yangmengmeng', 'WeiGe', 'Jack', 'rain']
>>>

###追加是默认添加一个到原数据的最后一个数值后面

  2)插入

>>> names
['Yangmengmeng', 'WeiGe', 'Jack', 'rain']
>>> names.insert(2,"Rose")     ###insert为插入一个数到指定的下标处
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>> names.insert(2,"Apple")
>>> names
['Yangmengmeng', 'WeiGe', 'Apple', 'Rose', 'Jack', 'rain']
>>>

>>> names.insert("haha")    ###插入不指定下标报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: insert() takes exactly 2 arguments (1 given)

>>> names   
['Yangmengmeng', 'WeiGe', 'Apple', 'Rose', 'Jack', 'rain']

###插入式根据下标,将新插得数据替换到该下标所在位置
###插入必须指定下标,否则会报错,但是不会改变数据

  3)删除

>>> names
['Yangmengmeng', 'WeiGe', 'Apple', 'Rose', 'Jack', 'rain']
>>>
>>> del names[2]   ###del 列表名[下标值] :删除指定下标位置的数值
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']

>>> del names[]    ###del删除列表空下标值,会报错,但不更变数据
  File "<stdin>", line 1
    del names[]
              ^
SyntaxError: invalid syntax
>>>
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>>

>>> del names  ###del 删除列表名不报错,但查看数据时报错且数值变了【删除整个列表】
>>> names
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'names' is not defined

>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>> names.pop()     #pop方式默认删除最后一个数值
'rain'
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack']
>>> names.pop()
'Jack'
>>> names
['Yangmengmeng', 'WeiGe', 'Rose']
>>>

>>> names.append("Nginx")
>>> names.append("Apache")
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Nginx', 'Apache']
>>> names.remove("Nginx")                #remove可以删除列表中指定数值
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Apache']
>>> names.remove("Apache")
>>> names
['Yangmengmeng', 'WeiGe', 'Rose']
>>>

##del指定下标删除;pop无需指定,默认删除最后一个值;remove通过指定键值删除

  4)索引

>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>> len(names)      ###每一个元素对应一个索引值
5
>>> names[0]     ###索引的下标号从0开始
'Yangmengmeng'
>>> names[4]
'rain'
>>>
>>> names[names.index("rain")] = "RAIN"   ###索引内容改数值
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'RAIN']
>>>
>>> names[4] = "rain"    ###索引下标更改、重新赋值
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>>

  5)切片

>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>> names[:5]
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>> names[0:]
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>> names[:0]
[]
>>> names[0:4]
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack']
>>> names[0:-1]
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack']
>>> names[:-1]
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack']
>>> names[0]
'Yangmengmeng'
>>> names[2]
'Rose'
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Jack', 'rain']
>>>

  6)扩展(列表合并)

>>> names
['Yangmengmeng', 'WeiGe', 'Rose']
>>>
>>> new = [1,"two","A"]       #定义待扩展的的内容
>>> names
['Yangmengmeng', 'WeiGe', 'Rose']
>>> names.extend(new)       #执行扩展的语法动作
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 1, 'two', 'A']       #扩展后的结果
>>>

  7)拷贝

>>> names  
['Yangmengmeng', 'WeiGe', 'Rose', 1, 'two', 'A']    #拷贝前的原数据
>>>
>>> names_copy = names.copy()                       #执行拷贝语法及动作
>>> names_copy
['Yangmengmeng', 'WeiGe', 'Rose', 1, 'two', 'A']     #拷贝得到的新数据
>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 1, 'two', 'A']     #执行拷贝后的原数据
>>>

  8)统计

>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 1, 'two', 'A', 'WeiGe', 'WeiGe']
>>>
>>> names.count("WeiGe")      #对指定的相同数值进行计数
3
>>> names.count("A")
1
>>>

  9)排序&反转

>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'two', 'A']
>>> names.sort()      #排序 
>>> names
['A', 'Rose', 'WeiGe', 'Yangmengmeng', 'two']
>>> names.reverse()   #反转
>>> names
['two', 'Yangmengmeng', 'WeiGe', 'Rose', 'A']
>>>
##字母大小写按ascii码对应数值排序

   10)嵌套

>>> names
['Yangmengmeng', 'WeiGe', 'Rose', 'Nginx', 'Apache']
>>> print(names[0:3:2])     #步长2
['Yangmengmeng', 'Rose']
>>> print(names[0:3:3])     #步长3
['Yangmengmeng']
>>> print(names[0:4:3])
['Yangmengmeng', 'Nginx']


>>> names2 = [["Wuchunwei",23],["Yangmengmeng",23]]     #嵌套列表
>>> names2
[['Wuchunwei', 23], ['Yangmengmeng', 23]]
>>> print(names2[0][1])
23
>>> print(names2[0][0])
Wuchunwei
>>> print(names2[1][0])
Yangmengmeng
>>> print(names2[1][1])
23
>>>
###嵌套列表###
>>> names2 = [ ["WeiGe",24,["IT",13000]],["Yangmengmeng",23] ]
>>> print(names2)
[['WeiGe', 24, ['IT', 13000]], ['Yangmengmeng', 23]]
>>> print("\t",names2[0])
         ['WeiGe', 24, ['IT', 13000]]
>>>
>>> print("\t",names2[1])
         ['Yangmengmeng', 23]
>>>
>>> print("\t","\t",names2[1][0])
                 Yangmengmeng
>>>
>>> print("\t","\t",names2[1][1])
                 23
>>>
>>> print("\t",names2[0][2])
         ['IT', 13000]
>>>
>>> print("\t","\t",names2[0][2][0])
                 IT
>>>
>>> print("\t","\t",names2[0][2][1])
                 13000
>>>
>>> print("\t",names2[0][0],names2[0][1])
         WeiGe 24
>>>
>>> print("\t","\t",names2[0][0])
                 WeiGe
>>>
>>> print("\t","\t",names2[0][1],"\n")
                 24

>>>
嵌套列表实例

 

 

打印列表下标及对应键值

  nms=[11,12,13,14,15]

  for n in nms:

    print(nms.index(n),"==>",n)

  结果如下:

0 ==> 11
1 ==> 12
2 ==> 13
3 ==> 14
4 ==> 15

 

PYTHON之数据运算

算术运算

比较运算

赋值运算

逻辑运算

 成员运算

>>> num = [1,2,3]
>>> 1 in num
True
>>> 4 in num
False
>>> 5 not in num
True
>>>
成员运算

身份运算

>>> type(6) is int
True
>>> type("A") is int
False
>>> type("A") is not int
True
>>>
身份运算

位运算

###二进制编码###
 64  32  16  8  4  2  1

>>> a = 60    --->0 0 1 1 1 1 0 0
>>> b = 13    --->0 0 0 0 1 1 0 1 
>>> c = a &b
>>> c
>>> c = a|b
>>> c
>>> c = a^b
>>> c

a&b 上下值需均为1
a|b  上下值仅需一个为1
位运算

 **运算符优先级**

 进制

二进制:0 1 
八进制:0 1 2 3 4 5 6 7 
十进制:0 1 2 3 4 5 6 7 8 9 
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F

 

PYTHON三元运算

result = 值1 if 条件 else 值2

    如果条件为:result = 值1

    如果条件为:result = 值2


===》事例:
###平常写法###
>>> a = 2
>>> b = 3
>>> if a>b :
... c = a+b
... else :
... c = a-b
...
>>> c
-1
>>>


###三元运算写法###
>>> a = 2
>>> b = 3
>>> c = a+b if a>b else a -b   
>>> c
-1
>>>

 

PYTHON表达式if..elif..else

  if语句主要是用来根据周围环境条件的变化执行不同的动作

===》  if单分支单条件
语法:
if expression:

  expr_true_suite

注释:expession为真执行代码expr_true_suite

示例:
name = 'test'
input_name = input("input_name:")
if name == input_name :
    print("right!")



===》  if单分支多条件
语法:
if expression1 and expression2 :
#条件两边可用and 或or

    expr_true_suite
注释:expession为真执行代码expr_true_suite

示例:
name = 'test'
age = 22
input_name = input("input_name:")
input_age = int(input("input_age:") )
if name == input_name  and age == input_age :
    print("name and age is right!")



===>if多分支
语法:
if expession1:

    expr1_true_suite

elif expression2:

    expr2_true_suite

elif expession3:

    expr3_true_suite

else:

    none_of_the_above_suite

示例:
name = 'test'
age = 22
input_name = input("input_name:")
input_age = int(input("input_age:") )
if name !=input_name and age !=input_age :
    print("name and age all error!")
elif name == input_name and age !=input_age :
    print("name right and age error")
elif name != input_name and age ==input_age :
    print("age right and name error")
else:
    print("all right")

 

if...elif...else小应用

  猜年龄

######猜年龄######
AGE = 56
guess_age = int(input("age:"))

if guess_age == AGE :
    print("You got it ...")
elif guess_age > AGE :
    print("try small ...")
else:
    print("try bigger ...")
猜年龄

  成绩等级判断

###根据输入的成绩判断作业等级###
_score = int(input("please input score:"))

if _score >=0 and _score <= 100:
   if _score >= 90 :
       print("A")
   elif _score >= 80 :
       print("B")
   elif _score >= 70 :
       print("C")
   elif _score >= 60 :
       print("C-")
   else:
       print("D")
else:
    print("input error !")
成绩等级判断

  用户登录

######登录密码隐藏######
#提示输入用户名和密码
#验证用户名和密码
    #如果有误,则输出用户名和密码有误
    #如果成功,这提示欢迎

import  getpass   #引入

_user = "wuchunwei"
_passwd = "211985"

username = input("username:")
#password = input("password:")      #密码不加密
password = getpass.getpass("password:")    #调用(密码加密不显示,Pycharm中运行时输入不能返回结果)

if _user == username and _passwd == password :
    print ("welcome to ... ")
else:
    print("password or username is error !")
用户登录

 

if语句小结

1)if 后表达式返回值为True则执行其子代码块,然后此if语句到此终结,否则进入下一分支判断,直到满足其中一个分支,执行后终结if
2)expression可以引入运算符:notandor,is,is not
3)多重expression为加强可读性最好用括号包含
4)if与else缩进级别一致表示是一对
5)elif与else都是可选的
6)一个if判断最多只有一个else但是可以有多个elif
7)else代表if判断的终结
8)expession可以是返回值为布尔值的表达式(例x>1,x is not None)的形式,也可是单个标准对象(例 x=1;if x:print('ok'))
9)所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布 尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。

 

PYTHON表达式while循环

  while循环为条件循环,while循环的本质就是让计算机在满足某一个条件的前提下去重复做同一件事,包含条件计数循环和条件无限循环(死循环)。

  某一个条件指:条件表达式

  做同一件事指:while循环体包含的代码块

基本语法:
while expression:

    suite_to_repeat

注解:重复执行suite_to_repeat,直到expression不再为真


===》计数循环
count = 0
while (count <5):
    print ("the loop is ",count)
    #print ("the loop is %s" %count)    ##两种写法效果一样##
    count+=1


===》无限循环(死循环)
count = 0
while True:
    print ("the loop is" ,count)
    count+=1


===》break跳出本层循环
count=0
while (count < 5):
    count+=1
    if count == 3:
        print("跳出本层循环,即彻底终结这一个层while循环")
        break
    print('the loop is ' ,count)
"""结果:
the loop is  1
the loop is  2
跳出本层循环,即彻底终结这一个层while循环

"""
===》continue跳出本次循环 count=0 while (count < 5): count+=1 if count == 3: #print('跳出本层循环,即彻底终结这一个/层while循环') #break print("跳出本次循环,即这一次循环continue之后的代码不再执行,进入下一次循环") continue print('the loop is ' ,count)
"""结果:
the loop is  1
the loop is  2
跳出本次循环,即这一次循环continue之后的代码不再执行,进入下一次循环
the loop is  4
the loop is  5

"""
===》pass没有任何操作 count=0 while (count < 3): count+=1 if count == 2: print("不会任何操作") pass print('the loop is ' ,count)
"""结果:
the loop is  1
不会任何操作
the loop is  2
the loop is  3

"""
===》与else连用 count=0 while (count < 6): count+=1 if count == 3: print('跳出本次循环,即这一次循环continue之后的代码不再执行,进入下一次循环') continue print('the loop is %s' %count) else: print('循环不被break打断,即正常结束,就会执行else后代码块')

 while应用

while循环统计打印1000万的耗时

###用while循环的两种方式计时打印1000万所需的时间###
import time

t0_start = time.time()      #s设定起始时间t0
count0 = 0
while True :
    if count0 == 10000000:
        break
    count0 +=1
print("cost0:",time.time()-t0_start,count0) #打印时间、和计数总数并计时输出



t1_start = time.time()
count1 = 1
while  count1 < 10000000:
    count1 +=1
print("cost1:",time.time()-t1_start,count1)

"""
cost1方式速度快:
[wuchunwei@corp-vm-201-52.c.com caixinglobal-cdn]$python3 test.py 
cost0: 2.075758457183838 10000000
cost1: 1.7892379760742188 10000000
[wuchunwei@corp-vm-201-52.c.com caixinglobal-cdn]$python3 test.py 
cost0: 3.5557329654693604 10000000
cost1: 2.3663055896759033 10000000

"""
while打印1000万并计时输出

 

 while小结

1)条件为真就重复执行代码,直到条件不再为真,而if是条件为真,只执行一次代码就结束了
2)while有计数循环和无限循环两种,无限循环可以用于某一服务的主程序一直处于等待被连接的状态
3)break代表跳出本层循环,continue代表跳出本次循环
4)while循环在没有被break打断的情况下结束,会执行else后代码

 

PYTHON表达式for循环

  for循环提供了Python中最强大的循环结构(for循环是迭代循环机制,而while是条件循环机制;迭代即重复相同的逻辑操作,每次操作都是基于上一次的结果来进行的)

基本语法:

for iter_var in iterable:

    suite_to_repeat

注解:每次循环, iter_var 迭代变量被设置为可迭代对象(序列, 迭代器, 或者是其他支持迭代的对 象)的当前元素, 提供给 suite_to_repeat 语句块使用.


===》单循环
for i in range(10):
    print("loop is :" ,i )


===》嵌套循环

for i in range(5):      #定义循环1
    if i ==2 :
        for n in range(5):    #定义循环2
            print("inner loop:",n)
        continue  ###跳出本次循环,不打印loop2
        #break    ###跳出本层循环,不打印loop2/3/4
        #pass     ###不做任何操作,loop0-4及inner loop 0-4都打印
    print("loop:",i)

 

posted on 2017-01-08 15:28  py_chunwei  阅读(473)  评论(0编辑  收藏  举报