python 开发之路 - 入门

 

一. python 介绍

  Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。1991年 发布Python第一个版本。

  

   2017年7月的TIOBE排行榜,Python已经占据第四的位置, Python崇尚优美、清晰、简单,是一个优雅并广泛使用的语言。 

由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!

#C语言:
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

#C++:
C++是C语言的继承的扩展,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

#JAVA:
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

#Python:
Python是一门优秀的综合语言, Python的宗旨是简明、优雅、强大,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向应用广泛,已是全球第4大最流行的语言。
主流语言介绍

  Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维自动化测试大数据分析、爬虫、Web 等。

注视:上述重点字体表示该公司主要使用Python语言开发

Python主要应用领域

1. WEB开发——最火的Python web框架Django, 支持异步高并发的Tornado框架,短小精悍的flask,bottle, Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)
2. 网络编程——支持高并发的Twisted网络框架, py3引入的asyncio使异步编程变的非常简单
3. 爬虫——爬虫领域,Python几乎是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥
4. 云计算——目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算
5. 人工智能——谁会成为AI 和大数据时代的第一开发语言?这本已是一个不需要争论的问题。如果说三年前,Matlab、Scala、R、Java 和 Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明确了,特别是前两天 Facebook 开源了 PyTorch 之后,Python 作为 AI 时代头牌语言的位置基本确立,未来的悬念仅仅是谁能坐稳第二把交椅。
6. 自动化运维——问问中国的每个运维人员,运维人员必须会的语言是什么?10个人相信会给你一个相同的答案,它的名字叫Python
7. 金融分析——我个人之前在金融行业,10年的时候,我们公司写的好多分析程序、高频交易软件就是用的Python,到目前,Python是金融分析、量化交易领域里用的最多的语言
8. 科学运算—— 你知道么,97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,使的Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛
9. 游戏开发——在网络游戏开发中Python也有很多应用。相比Lua or C++,Python 比 Lua 有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,与 Lua 相比,Python 更适合作为一种 Host 语言,即程序的入口点是在 Python 那一端会比较好,然后用 C/C++ 在非常必要的时候写一些扩展。Python 非常适合编写 1 万行以上的项目,而且能够很好地把网游项目的规模控制在 10 万行代码以内。另外据我所知,知名的游戏<文明> 就是用Python写的
领域

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解释器的发展历程

989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。
Granddaddy of Python web frameworks, Zope 1 was released in 1999
Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
Python 2.5 - September 19, 2006
Python 2.6 - October 1, 2008
Python 2.7 - July 3, 2010
In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
Python 3.0 - December 3, 2008
Python 3.1 - June 27, 2009
Python 3.2 - February 20, 2011
Python 3.3 - September 29, 2012
Python 3.4 - March 16, 2014
Python 3.5 - September 13, 2015
Python 3.6 - December 16,2016
发展历程

 Pyhton的发展前景怎么样?

知乎上有一篇文章,问Python未来10年的发展前景,Alex强烈要求我告诉你们去看看他的回答
未来十年Python的前景会怎样? https://www.zhihu.com/question/22112542/answer/166053516

Python的种类

  我们现在知道了Python是一门解释型语言,代码想运行,必须通过解释器执行,Python的解释器本身也可以看作是个程序(翻译官司是哪国人不重要),这个程序是什么语言开发的呢? 
  答案是好几种语言? what? 因为Python有好几种解释器,分别基于不同语言开发,每个解释器特点不同,但都能正常运行我们的Python代码,下面分别来看下:

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

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

  • IPython

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

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

  • Jyhton
        Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
  • IronPython
       IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
  • PyPy(特殊)
       PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

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

总结:

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

二. 搭建环境

 Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上需要安装一下,超简单

 打开官网 https://www.python.org/downloads/windows/ 下载中心

'

测试安装是否成功
windows --> 运行 --> 输入cmd ,然后回车,弹出cmd程序,输入python,如果能进入交互环境 ,代表安装成功。

多版本共存方案:
注意:在安装目录下找到python.exe,拷贝一份,命名为python2.exe或python3.exe,一定要保留原版,因为pip工具会调用它。

linux:

无需安装,原装Python环境
  
注意:如果自带2.6,请更新至2.7
查看默认Python版本
python -V
  
1、安装gcc,用于编译Python源码
    yum install gcc
2、下载源码包,https://www.python.org/ftp/python/
3、解压并进入源码文件
4、编译安装
    ./configure
    make all
    make install
5、查看版本
    /usr/local/bin/python2.7 -V
6、修改默认Python版本
    mv /usr/bin/python /usr/bin/python2.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python
7、防止yum执行异常,修改yum使用的Python版本
    vi /usr/bin/yum
    将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
Linux版本 更新方式

三.第一个python程序

1.执行代码:

执行python代码两种方式:

1.进入解释器的交互式模式:调试方便,无法永久保存代码

2.脚本文件的方式(使用nodpad++演示):永久保存代码 

强调:python解释器执行程序是解释执行,即打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾 

#C++
#include <iostream>
 int main(void)
 {
  std::cout<<"Hello world";
 }

#C
#include <stdio.h>
int main(void)
{
printf("\nhello world!");
return 0;
}

#JAVA
public class HelloWorld{
  // 程序的入口
  public static void main(String args[]){
    // 向控制台输出信息
    System.out.println("Hello World!");
  }
}

#PHP
<?php  
             echo "hello world!";  
?>

#Ruby
日本人开发的,砸日本车的时候,顺手就把你拖出去打死了,祭天
 puts "Hello world."

#GO
package main
import "fmt"
func main(){

    fmt.Printf("Hello World!\n God Bless You!");

}

精通各种语言的hello world,看一看还是python的好
hello world 大全

2.解释器 

上一步中执行 python c:\\hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。

如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:

#!/usr/bin/env python
  
print "hello,world"

如此一来,执行: ./hello.py 即可。

ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py

3.内容编码

python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),而python3对内容进行编码的默认为utf-8。

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

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

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

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

所以,python2 解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

 报错:ascii码无法表示中文

print "你好,世界"

改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

# -*- coding: utf-8 -*-
  
print "你好,世界"

4.注释  

  随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,这太正常了。 另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。

    代码注释分单行和多行注释:

  当行注视:  # 被注释内容

  多行注释:  """ 被注释内容 """

 代码注释的原则:

#1. 不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
#2. 注释可以用中文或英文,但不要用拼音

 5.文件头

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

四.变量

  1. 什么是变量

变量:就是一个存储地址的符号化表示,在程序的执行中,在某个范围内其值可以发生变化。

 2. 为什么要有变量

变量是为了能够更好处理一类数据,而不是一个数据。如果没有变量那么就只能针对某个数据来做运算了,显然这样的程序是没有什么作用的。
例如:
  人的年龄(age): 刚出生为1,然后每年增长一次,+1
  人的身高(height): 初始状态为20cm,慢慢变成200cm
  游戏的英雄等级: 随着经验的增加而增长.

3.如何定义变量

#定义变量

name = 'alex'
age =12
height =155
level = 2

4. 变量的定义规范  

变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
关键字不能声明为变量名,例如:
['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']
变量的定义要具有可描述性。

5.定义方式:

#驼峰体
AgeOfOldboy = 56 
NumberOfStudents = 80

#下划线(推荐使用)
age_of_oldboy = 56 
number_of_students = 80

6.定义变量会有:id,type,value

#1 等号比较的是value,
#2 is比较的是id

#强调:
#1. id相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x = 'alex is xxx'
>>> y = 'alex is xxx'
>>> id(x)
42848432
>>> id(y)
42851888
>>> x==y
True
>>> x is y
False

 

7.  变量的修改与内存管理(引用计数与垃圾回收机制)

画图..补充

五.常量

  常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量

  举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

例如: AGE_OF_OLDBOY = 56

注意: 在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错

六.用户与程序交互

#在python3中
input:用户输入任何值,都存成字符串类型

#在python2中
input:用户输入什么类型,就存成什么类型
raw_input:等于python3的input

示例:

# 将用户输入的内容赋值给 name 变量
name = input('who are you? \n>>')
age = input('how old are you? \n>>')

# 打印输入的内容
print('my name is', [name], 'my age is ',[age])

七.基本数据类型 

   什么是数据?

    数据:就是我们常用来描述一些事物的值,比如 你的工资 name='张飞'  ,age =18岁 ,salary=100000 美元  等等.

  什么是数据类型?

    数据类型:就是对上面的数据进行分类,以便计算机更好的对数据进行处理.(比如:数据存储空间大小的分配,还有数据的计算等.)

  下面介绍一下python中的数据类型:

  1. 数字类型: 

  1.1 整型

#int 整数型
定义: age = 18 #age = int(18)

用途: 年龄  身份证号 手机号 QQ号 等 
注意:
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64
>>> type(a)  #type()是查看数据类型的方法
<type 'long'>
>>> b = 2**60
>>> type(b)
<type 'int'>

1.2 浮点型

#float 浮点型 
定义: salary= 12500.65 #salary = float(12500.65)

用途:金额, 身高, 体重 等等

  2. 字符串类型

#在python中,加了引号的字符就是字符串类型,python并没有字符类型。
定义:name='xxx' #name=str('xxx') 
用于标识:描述性的内容,如姓名,性别,国籍,种族
#那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is wipeiqi , I'm 18 years old!"

#多引号什么作用呢?作用就是多行字符串必须用多引号
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)
单引号、双引号、多引号有什么区别
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加""相乘"运算。
>>> name='xxx'
>>> age='18'
>>> name+age #相加其实就是简单拼接
'xxx18'
>>> name*10 
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'


#注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,

#注意2:只能字符串加字符串,不能字符串加其他类型
字符串拼接

  3.列表类型

#在[]内用逗号分隔,可以存放n个任意类型的值
定义:teacher=['egon','alex','wupeiqi',] #teacher=list(['egon','alex','wupeiqi',]) 
用于标识:存储多个值的情况,比如一个人有多个爱好
#存放多个学生的信息:姓名,年龄,爱好
>>> students_info=[['egon',18,['吃鸡',]],['alex',18,['吃鸡','荣耀']]]
>>> students_info[0][2][0] #取出第一个学生的第一个爱好
'吃鸡'
列表嵌套,取值

  4.字典类型

#为何要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
>>> info=['alex','male',18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
>>> info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
       #name, sex, age
info=['alex','male',18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
注意:在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
定义:info={'name':'alex','age':18,'sex':'男'} #info=dict({'name':'alex','age':18,'sex':'男'})
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值

  5.布尔类型 

布尔类型就两个值,一个True一个False

为什么要有布尔类型?
  计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,
  人脑的主要作用是数据运行与逻辑运算,此处的布尔类型可以模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识 >>> a=3 >>> b=5 >>> >>> a > b #不成立就是False,即假 False >>> >>> a < b #成立就是True, 即真 True 接下来就可以根据条件结果来干不同的事情了: if a > b print(a is bigger than b ) else print(a is smaller than b ) 上面是伪代码,但意味着, 计算机已经可以像人脑一样根据判断结果不同,来执行不同的动作。

 布尔类型的重点知识!!!: 

 所有数据类型都自带布尔值
 1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
 2、其余均为真 
#1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典

#2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间) 
重点

八.格式化输出

 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式

    比如要求用户输入用户名和年龄,然后打印如下格式:

    My name is xxx,my age is xxx.

    很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。

    这就用到了占位符,如:%s、%d

#%s字符串占位符:可以接收字符串,也可接收数字
print('My name is %s,my age is %s' %('axxx',18))
#%d数字占位符:只能接收数字
print('My name is %s,my age is %d' %('axxx',18))
print('My name is %s,my age is %d' %('axxx','18')) #报错

#接收用户输入,打印成指定格式
name=input('your name: ')
age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d

print('My name is %s,my age is %s' %(name,age))

#注意:
#print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以会报错
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Alex-----------
Name  : Alex
Age   : 46
Sex   : male
Job   : Teacher 
------------- end -----------------
练习

九. 基本运算符

  计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算

算数运算

    以下假设变量:a=10,b=20

 比较运算

   以下假设变量:a=10,b=20

 赋值运算

    以下假设变量:a=10,b=20

 逻辑运算

>>> True or Flase and False
True
>>> (True or Flase) and False
False

针对逻辑运算的进一步研究:

  1.在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。

1: 3>4 or 4<3 and 1==1
2: 1 < 2 and 3 < 4 or 1>2 
3: 2 > 1 and 3 < 4 or 4 > 5 and 2 < 1
4: 1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8
5: 1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
6: not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
例题

  2.  x or y , x为真,值就是x,x为假,值是y;

            x and y, x为真,值是y,x为假,值是x。

  例题:求出下列逻辑语句的值。

8 or 4
0 and 3
0 or 4 and 3 or 7 or 9 and 6

  3. in,not in :

  判断子元素是否在原字符串(字典,列表,集合)中:

  例如:

print('a' in 'abcdefg')
print('python' in '我喜欢学习python')
print('c' not in 'sadsad')

身份运算

#is比较的是id
#而==比较的是值

十 流程控制之if...else

  既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反映,比如

 1 如果:女人的年龄>30岁,那么:叫阿姨

age = 40
if age > 30 :
  print('阿姨好')

  2 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐

age=18
if age > 30:
    print('阿姨好')
else:
    print('小姐好')	

3.如果 年龄<30,身高 >170, 而且漂亮,那么就表白,否则拜拜

age= 32
height = 172
is_pretty = True

if age <30 and height >170 and is_pretty==True:
	print('表白')
else:
	print('拜拜')

4.if 嵌套使用  

#在表白的基础上继续:
#如果表白成功,那么:在一起
#否则:打印。。	
age= 32
height = 172
is_pretty = True
success = True
if age <30 and height >170 and is_pretty==True:
	print('表白')
	if success:
		print('在一起')
	else:
		print('QTM的爱情')
else:
	print('拜拜')

5.猜年龄游戏

age = 30 #设定年龄

inp_age = input('请输入年龄:')
inp_age =int(inp_age) #注意: input()函数接收到的参数在python3中统一为str类型

if inp_age > age:
  print('猜大了')
elif inp_age < age:
  print('猜小了')
else:
  print('猜对了')

6.判断成绩等级

  需求:

  如果:成绩>=90,那么:优秀

             成绩>=80且<90,那么:良好

             成绩>=70且<80,那么:普通

             其他情况:很差

score = input('请输入您的成绩:')
score =int(score) #注意: input()函数接收到的参数在python3中统一为str类型

if score >=90:
    print('优秀')
elif score >=80:
    print('良好')
elif score >=60:
    print('普通')
else:
    print('楼比')
示例

7.if 语法

if 条件1:
  缩进的代码块
elif 条件2:
  缩进的代码块
elif 条件3:
  缩进的代码块
  ......
else:  
  缩进的代码块

8.三目表达式(三元表达式

# 书写格式
result = 值1 if 条件 else 值2
# 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量
result = '' if 1<2 else ''
print(result)
代码示例

9.练习:

name=input('请输入用户名字:')
password=input('请输入密码:')

if name == 'xxx' and password == '123':
    print('xxx login success')
else:
    print('用户名或密码错误')
练习1:登录验证
#根据用户输入内容打印其权限

'''
wfm --> 超级管理员
alex  --> 普通管理员
wupeiqi,yuanhao --> 业务主管
其他 --> 普通用户
'''
name=input('请输入用户名字:')

if name == 'wfm':
    print('超级管理员')
elif name == 'alex':
    print('普通管理员')
elif name == 'wupeiqi' or name == 'yuanhao':
    print('业务主管')
else:
    print('普通用户')
练习2:根据用户输入的内容,输出其权限
# 如果:今天是Monday,那么:上班
# 如果:今天是Tuesday,那么:上班
# 如果:今天是Wednesday,那么:上班
# 如果:今天是Thursday,那么:上班
# 如果:今天是Friday,那么:上班
# 如果:今天是Saturday,那么:出去浪
# 如果:今天是Sunday,那么:出去浪


#方式一:
today=input('>>: ')
if today == 'Monday':
    print('上班')
elif today == 'Tuesday':
    print('上班')
elif today == 'Wednesday':
    print('上班')
elif today == 'Thursday':
    print('上班')
elif today == 'Friday':
    print('上班')
elif today == 'Saturday':
    print('出去浪')
elif today == 'Sunday':
    print('出去浪')
else:
    print('''必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ''')

#方式二:
today=input('>>: ')
if today == 'Saturday' or today == 'Sunday':
    print('出去浪')

elif today == 'Monday' or today == 'Tuesday' or today == 'Wednesday' \
    or today == 'Thursday' or today == 'Friday':
    print('上班')

else:
    print('''必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ''')


#方式三:
today=input('>>: ')
if today in ['Saturday','Sunday']:
    print('出去浪')
elif today in ['Monday','Tuesday','Wednesday','Thursday','Friday']:
    print('上班')
else:
    print('''必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ''')
练习3:休息日

十一 流程控制之while循环

 1. 什么是循环?

    循环:就是让计算机执行重复任务的方法。

  2. 循环可以帮助我们什么?

  我们已经学会用if .. else 来猜年龄的游戏啦,但是只能猜一次就中的机率太小了,如果我想给玩家3次机会呢?就是程序启动后,玩家最多可以试3次,这个怎么弄呢?你总不会想着把代码复制3次吧。。。。

age = 30 #设定年龄

#第1次
inp_age = input('请输入年龄:')
inp_age =int(inp_age) #注意: input()函数接收到的参数在python3中统一为str类型

if inp_age > age:
  print('猜大了')
elif inp_age < age:
  print('猜小了')
else:
  print('猜对了')

#第2次
inp_age = input('请输入年龄:')
inp_age =int(inp_age) #注意: input()函数接收到的参数在python3中统一为str类型

if inp_age > age:
  print('猜大了')
elif inp_age < age:
  print('猜小了')
else:
  print('猜对了')

#第3次
inp_age = input('请输入年龄:')
inp_age =int(inp_age) #注意: input()函数接收到的参数在python3中统一为str类型

if inp_age > age:
  print('猜大了')
elif inp_age < age:
  print('猜小了')
else:
  print('猜对了')
示例:正常写法
age = 30 #设定年龄

i = 0
while i < 3:
	inp_age = input('请输入年龄:')
	inp_age =int(inp_age) #注意: input()函数接收到的参数在python3中统一为str类型

	if inp_age > age:
		print('猜大了')
	elif inp_age < age:
		print('猜小了')
	else:
		print('猜对了')
		break
	i+=1

  3. while 循环语法

while 条件:    
    # 循环体
 
    # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
    # 如果条件为假,那么循环体不执行,循环终止

  4. 关键字 break 与 continue

#break用于退出本层循环
while True:
    print "123"
    break
    print "456"

#continue用于退出本次循环,继续下一次循环
while True:
    print "123"
    continue
    print "456"

  5.while循环 + else  

  与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句

count = 0
while count <= 5 :
    count += 1
    print("看我",count)

else:
    print("循环正常执行完啦")
print("-----结束------")
输出
看我 1
看我 2
看我 3
看我 4
看我 5
看我 6
循环正常执行完啦
-----结束------

#如果执行过程中被break啦,就不会执行else的语句啦
count = 0
while count <= 5 :
    count += 1
    if count ==3: break
    print("看我",count)

else:
    print("循环正常执行完啦")
print("-----结束------")
输出

看我 1
看我 2
-----结束------
示例

  6.死循环

count = 0;
while True: #当条件一直为真时,此循环则为死循环
  print(count)
  count+=1

  7.循环嵌套

#循环嵌套的语法
tag = True
while  tag:
    ...
    while tag:
        ...
        while tag:
            ...
            tag=False
练习:要求如下:
    1 循环验证用户输入的用户名与密码
    2 认证通过后,循环打印用户输入的内容
    3 当用户输入命令为quit时,则退出整个程序 
#方式一
while True:
    name = input("输入用户名:")
    password = input("输入密码:")
    
    if name=='xxx' and password=='123':
        while tag:
            info=input(">>")
            if info=='quit': 
                tag=False
                break
            print(info)
    else:
        print("用户名和密码错误")
        continue
    break


#方式二
tag = True
while tag:
    name = input("输入用户名:")
    password = input("输入密码:")
    
    if name=='xxx' and password=='123':
        while tag:
            info=input(">>")
            if info=='quit': 
                tag=False
                continue
            print(info)
    else:
        print("用户名和密码错误")
示例

  8. while循环作业

#1. 使用while循环输出1 2 3 4 5 6     8 9 10
#2. 求1-100的所有数的和
#3. 输出 1-100 内的所有奇数
#4. 输出 1-100 内的所有偶数
#5. 求1-2+3-4+5 ... 99的所有数的和
#6. 用户登陆(三次机会重试)
#7:猜年龄游戏
要求:
    允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
#8:猜年龄游戏升级版 
要求:
    允许用户最多尝试3次
    每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
    如何猜对了,就直接退出 
#1. 使用while循环输出1 2 3 4 5 6   8 9 10
num = 1
while num <= 10:
    if num != 7:
        print(num,end=" ")
    else:
        print(" ",end="")
    num+=1

#2. 求1-100的所有数的和
sum = 0
num = 1
while num<=100:
    sum+=num
    num+=1
print(sum)

#3. 输出 1-100 内的所有奇数
num = 1
while num <=100:
    if num%2==1:
        print(num)
    num+=1

#4. 输出 1-100 内的所有偶数
num = 1
while num <=100:
    if num%2==0:
        print(num)
    num+=1

#5. 求1-2+3-4+5 ... 99的所有数的和
num = 1
sum = 0
while num <100:
     if num%2==0:
         sum-=num
     else:
         sum+=num
     num+=1
print(sum)

#6. 用户登陆(三次机会重试)
count = 0
while count < 3:
    name=input("用户名:")
    password = input("密码:")
    if name=='xxx' and password == '123':
        print("进来了啊")
        break
    else:
        count+=1
        print("错误",count,'')
print("----------game over-----------")

#7:猜年龄游戏
要求:
    允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出

count = 3
age = 120
while count >= 1:
    input_age = int(input("请输入年龄:"))
    if input_age == age:
        print("大哥,你猜对了")
        break
    count-=1
    print("傻x,再给你",count,"机会")


#8:猜年龄游戏升级版
要求:
    允许用户最多尝试3次
    每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
    如何猜对了,就直接退出
count=0
while count<3:
    name = input('请输入你的用户名:')
    password = input('请输入你的密码:')
    if name=='xxx' and password=='123':
        print("大哥,聪明呀")
        break
    else:
        print("错啦")
    count+=1
    if count == 3:
        #表示3次都没猜对
        flag = input("是否继续? Y/N ?")
        if flag =='Y':
            count = 0
失败者:请看

 

十二 :流程控制之for循环

 1 迭代式循环:for,语法如下

  for i in range(10):

    缩进的代码块

2 break与continue(同上)

3 循环嵌套

for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ')
    print()
九九口诀乘法表

练习:请利用for循环依次对list中的每个名字打印出Hello, xxx!  sx:

list = ['egon', 'alex', 'wupeiqi','太白']
效果:
  hello egon sx
  hello alex sx
  hello wupeiqi sx
  hello 太白 sx

4. for+else

for i in range(1,10):
    if i ==6:
        break
        #continue
    print(i)
else:
    print("没有被break的for循环")
示例 

5.enumrate 枚举类型

为可迭代的对象添加序号

li = [11,22,33]
for k,v in enumerate(li, 1):
    print(k,v)

6. range 函数

指定范围,生成指定的数字

print range(1, 10)
# 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
 
print range(1, 10, 2)
# 结果:[1, 3, 5, 7, 9]
 
print range(30, 0, -2)
# 结果:[30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2]  

for i in range(1,10):
    print(i,end=' ')
#结果[1 2 3 4 5 6 7 8 9 ]

for i in range(1,10,2):
    print(i,end=' ')
#结果[1 3 5 7 9 ]

十三. 作业

一.简答题

  1. 简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型
  2. 执行 Python 脚本的两种方式是什么
  3. Pyhton 单行注释和多行注释分别用什么?
  4. 布尔值分别有什么?
  5. 声明变量注意事项有那些?
  6. 如何查看变量在内存中的地址?
  7. 现有如下两个变量,请简述 n1 和 n2 是什么关系? 

     n1 = 123456

     n2 = n1

二. 编程题

1.实现一下功能

  1. 实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
  2. 实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
  3. 实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次

2. 编写登录入口

  基础需求:

  • 让用户输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后退出程序
    dic={
        'xxx1':{'password':'123','count':0},
        'xxx2':{'password':'123','count':0},
        'xxx3':{'password':'123','count':0},
    }
    
    while True:
        user=input("用户名:")
        if user not in dic:
            print("用户不存在")
            continue
        if dic[user]['count'] >2:
            print("尝试次数过多,锁定该用户")
            break
        password=input("密码:")
    
        if password == dic[user]["password"]:
            print("欢迎[%s]登录本系统" %user)
        else:
            print("密码错误")
            dic[user]['count'] = dic[user]['count']+1
    代码示例

3.升级需求:

  • 可以支持多个用户登录 (提示,通过列表存多个账户信息)
  • 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
#data.txt内容:xxx2|xxx3|
dic={
    'xxx':{'password':'123','count':0},
    'xxx1':{'password':'123','count':0},
    'xxx2':{'password':'123','count':0},
    'xxx3':{'password':'123','count':0},
}
count=0
while count < 3:
    user=input("用户名:")

    if user not in dic:
        print("用户不存在")
        continue

    with open("data.txt",'r',encoding='utf-8') as f:
        userinfo = f.read().split("|")
        # print(userinfo)
        if user in userinfo:
            print("%s 该用户被锁定,暂时不能登录" %user)
            break

    if dic[user]['count'] >2:
        print("尝试次数过多,锁定用户")
        with open('05编写登录入口的升级版.txt','a',encoding='utf-8') as f:
            f.write("|%s" %user)
        continue

    password=input("密码:")

    if password == dic[user]["password"]:
        print("登录成功")
    else:
        print("登录失败")
        dic[user]['count'] = dic[user]['count']+1
代码 示例

 

posted @ 2018-01-17 18:50  A.隔壁老王  阅读(1014)  评论(0编辑  收藏  举报