Python Day1

本节知识点:

1. 初识Python

2.Python发展史

3.Python2 or Python3

4.安装Python

5.Helloworld小程序

6.数据 类型

7.变量

8.字符编码

9.用户输入小程序

10.if 判断语句 

11.for 循环

12.while循环

13.break and  continue 

一.Python简介

1.什么是Python?

Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。

那Python是一种什么语言?

首先,我们普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。而不同的编程语言,干同一个活,编写的代码量,差距也很大。

比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。

所以Python是一种相当高级的语言。

对于初学者和完成普通任务,Python语言是非常简单易用的。连Google都在大规模使用Python,你就不用担心学了会没用。

用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。

Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。

2.Python发展史

(一)Python发展之路

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

现在,全世界差不多有600多种编程语言,但流行的编程语言也就那么20来种。如果你听说过TIOBE排行榜,你就能知道编程语言的大致流行程度。这是最近10年最常用的10种编程语言的变化图:

 

总的来说,这几种编程语言各有千秋。C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而Python是用来编写应用程序的高级编程语言。

(二)Python给我们带来了什么

Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。

除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。

许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。

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

总的来说,Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。如果一个资深程序员向你炫耀他写的晦涩难懂、动不动就几万行的代码,你可以尽情地嘲笑他。

(三)Python适合什么应用

首选是网络应用,包括网站、后台服务等等;

其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;

另外就是把其他语言开发的程序再包装起来,方便使用。

Python缺点

任何编程语言都有缺点,Python也不例外。优点说过了,那Python有哪些缺点呢?

1.运行速度慢

第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。

但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1秒,你想,用户能感觉到1.001秒和1.1秒的区别吗?这就好比F1赛车和普通的出租车在北京三环路上行驶的道理一样,虽然F1赛车理论时速高达400公里,但由于三环路堵车的时速只有20公里,因此,作为乘客,你感觉的时速永远是20公里。

 

2.不能加密

 第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。

 这个缺点仅限于你要编写的软件需要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件授权的商业模式越来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。

再说了,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿意开放的更重要的原因是代码写得太烂了,一旦开源,就没人敢用他们的产品了

 

二.Python2 or Python3?

Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of

extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is

under active development and has already seen over five years of stable releases, including version 3.3 in 2012,

3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only

available by default in Python 3.x.

Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.

Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x). 

当前最流行的Python版本是2.7,但是,2.7的版本目前只支持到2020年,所以,该换版本就换吧!

Python2 or Python3 区别

1.首先,你不会在为字符编码所惆怅(Python3默认是支持中文的)

2.print 有所改变

Python 2.7

print "AbeoHu"

Python 3.5

print ("AbeoHu")

3.有些库的名字有所变化

Old Name

New Name

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

4.还有谁不支持Python3?

Twisted

Twisted是用Python实现的基于事件驱动的网络引擎框架。Twisted诞生于2000年初,在当时的网络游戏开发者看来,无论他们使用哪种语言,手中都鲜有可兼顾扩展性及跨平台的网络库。

三.安装Python

windows

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

linux

linux默认是自带Python的,如果你是2.6,请升级

四.Hello,World

(1)文本编辑器

和所有程序都一样,我们先来编辑一个Helloworld,先来和他打打招呼把!

那么问题来了,文本编辑器哪家强?

推荐两款文本编辑器:

一个是Sublime Text,免费使用,但是不付费会弹出提示框:

一个是Notepad++,免费使用,有中文界面:

 安装好编辑器后,输入一下代码

print ("Hello,World")

保存文件。

怎么运行这个脚本?

打开cmd命令提示符,进入代码保存的目录,运行python + 代码名字

Python代码运行工具

pythoncharm

Python环境变量

/usr/bin/env  and  /usr/bin/python

#!/usr/bin/env python #在系统中找python环境
print ("helloword")


#!/usr/bin/python #指定python解释环境
print ("helloword")

五.数据类型

什么是数据类型?

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1100-80800,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff000xa5b4c3d2,等等。

浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

字符串

字符串是以单引号'或双引号"括起来的任意文本,比如'abc'"xyz"等等。请注意,''""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I'm,空格,OK这6个字符。

如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:

'I\'m \"OK\"!

那么他显示的内容是

I'm "OK"!

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\

六.Python变量

变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

Linux shell中的变量

name = AbeoHu

Python 中的变量

整数变量

name = 1

字符串变量

name = "AbeoHu"

小游戏

 首先,我先写一个变量

a = 'ABC'
b = a
print (b)

首先,我将name变量 赋值予 a ,将b的变量赋值指向a,那么现在我打印 b 的变量,那么他会显示什么?
大家也已经猜到了,当然是name这个值


那我现在在给a重新赋值,那么代码就成这样了

a = 'ABC'
b = a
a = 'XYZ'
print (b)

那现在呢,这个变量b的值是什么呢?是指向了XYZ 还是 ABC?
别着急,我们先将b打印出来,然后我们分析分析

name

b变量的值还是name,这是什么原因,why?

那么首先,我们来分析下,这个代码!

 第一行,解释器创建了字符串‘ABC’和变量a,并且把a指向了‘ABC’

第二行,解释器创建了b的变量,并且,把b的变量指向的a变量的字符串'ABC'

第三行,解释器创建了字符串'XYZ',并且将a的值重新指向了‘XYZ’,但是b没有更改:

所以,打印出来的b还是指向了‘ABC’

常量

什么是常量?

常量就是指不变的量,比如常用的数学常数pai就是一个常量,在Python中,通常用大写的变量名来表示常量

PAI = 3.1415926

七.字符编码

刚刚我们也说了字符串是数据类型的一种,但是字符串还有一个编码的问题!

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295

由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122

 小结

什么是ASCII编码?

SCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去

你可以想得到的是,全世界有上百种语言,日本把日文编进去,韩国把韩文编进去,各国都有各国的语言标准,都编译进去,一定不会避免冲突,结果就是,字符会出现乱码

于是,为了解决这个问题,Unicode(万国码)出现了

Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

ASCII编码和Unicode编码的区别:

ASCII编码是1个字节,而Unicode编码通常是2个字节。

字母A用ASCII编码是十进制的65,二进制的01000001

字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的;

汉字已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101

你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

因此UTF8出现了

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

字符ASCIIUnicodeUTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

ASCII、Unicode和UTF-8的关系

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:

八.用户输入小程序

用到的命令 input

name = input("please your  name:")
print(name)

 运行结果

please your name:AbeoHu
AbeoHu

那么我们在加一行,做个登录的小程序

name = input("please your  name:")
passwd = input("passwd:")
print(name,passwd)

结果

please your name:xiaohuu
passwd1
xiaohuu 1

那么大家看下,现在密码是明文的,那么怎么给他加密呢?

这就用到Python的模块getpass了

name = input("please your  name:")
import getpass
passwd = getpass.getpass("passwd:")
print(name,passwd)

运行结果:


九.if else 判断
场景1
登录小程序判断
name = input("please your name:")
passwd = input("please your passwd:")
if name=="AbeoHu" and passwd=="cmd" :
print("登录成功")
else:
print("登录失败")


结果

失败测试:

please your name:xiaohu
please your passwd:1
登录失败

成功测试:


please your name:AbeoHu
please your passwd:cmd
登录成功

场景2

猜大小小游戏

代码:

mange = 22
user_input=input("please your mange:")
if mange==user_input :
print("YES,your good")
elif mange>user_input:
print("you are small")
else:
print("you are big")
结果:

please your mange:1
Traceback (most recent call last):
File "C:/python/Day1/coding.py", line 5, in <module>
elif mange > user_input:
TypeError: unorderable types: int() > str()

他这里会提示报错,这个报错信息指的是你输入的数字会强制给你替换成字符串,所以会报错,这个在2.0版本是看不出来的

解决办法

mange = 22
user_input=input("please your mange:")
if mange==int(user_input) :
print("YES,your good")
elif mange>int(user_input):
print("you are small")
else:
print("you are big")
结果

please your mange:444
you are big

强制替换字符类型,int()数字类型

九.for循环

简单的for循环10次

for i in range(10):
print(i)

结果

C:\python3.5\python.exe C:/python/Day1/ceshi.py
0
1
2
3
4
5
6
7
8
9

那么这是最简单的for循环,如果我现在有需求,咱们来尝试下

我现在想循环到5的时候,就跳出这个循环,直接进入下一个循环

用到的知识continue 

for i in range(10):
if i > 5:
continue
print(i)

结果

0
1
2
3
4
5

如果想退出这个循环

break

for i in range(10):
if i > 5:
break
print(i)

10.while true循环

有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

代码

count=0
while True:
print("当山峰没有棱角的时候当河水不再流",count)
count +=1

结果:

当山峰没有棱角的时候当河水不再流 3802005
当山峰没有棱角的时候当河水不再流 3802006
当山峰没有棱角的时候当河水不再流 3802007
当山峰没有棱角的时候当河水不再流 3802008

这样代码会一直不断的死循环,速度还是很快的

如果,我现在想让他到10的时候就停止,跳出循环,怎么写?

这就需要用到if判断了

count=0
while True:
print("当山峰没有棱角的时候当河水不再流",count)
count +=1
if count==10:
print("当当当,duang")
break
结果

当山峰没有棱角的时候当河水不再流 0
当山峰没有棱角的时候当河水不再流 1
当山峰没有棱角的时候当河水不再流 2
当山峰没有棱角的时候当河水不再流 3
当山峰没有棱角的时候当河水不再流 4
当山峰没有棱角的时候当河水不再流 5
当山峰没有棱角的时候当河水不再流 6
当山峰没有棱角的时候当河水不再流 7
当山峰没有棱角的时候当河水不再流 8
当山峰没有棱角的时候当河水不再流 9
当当当,duang

OK满足条件,循环结束

好,那我们继续来做个小游戏,继续上一次的话题,如果我想让这个游戏循环下去,当用户猜到第3次后退出

代码:

mange = 22
count = 0
while count < 3:
user_input=input("please your mange:")
if mange==int(user_input) :
print("YES,your good")
break
elif mange>int(user_input):
print("you are small")
else:
print("you are big")
count +=1
else:
print("你的智商真捉急")
结果:
 

please your mange:1
you are small
please your mange:1
you are small
please your mange:1
you are small
你的智商真捉急

OK,这样咱们的循环就结束了!




原文地址:https://www.cnblogs.com/AbeoHu/p/5701529.html