python基础之1-安装
author:headsen chen
date :2018-03-22 17:16:14
notice :This article created by headsen chen and not allowd to copy.
1,Python安装
windows:下载python3.6_64位,双击,一路默认安装就行了
1)、下载安装包
https://www.python.org/downloads/
2)、安装
默认安装路径:C:\python27
3)、配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
linux、Mac
无需安装,原装Python环境
2,Hello World程序
在linux 下创建一个文件叫hello.py,并输入
print("Hello World!")
然后执行命令:python hello.py ,输出
localhost:~ jieli$ echo "print('hello word')" >hello.py
localhost:~ jieli$ python hello.py
Hello World!
3,指定解释器
上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:
localhost:~ jieli$ cat hello.py
#!/usr/bin/env python ---------> 启用默认的首选python版本,只要是可执行程序,就要告诉操作系统我用什么解释器来解释该程序,如shell写上:#!/bin/bash
print "hello,world"
localhost:~ jieli$ chmod 755 hello.py
如此一来,执行:
localhost:~ jieli$ /tmp/hello.py (执行前需给予 hello.py 执行权限,chmod 755 hello.py!!!!)
补充:python的程序两种写法:
#!/usr/bin/env python ----> 到整个系统里去找python的环境变量
#!/usr/bin/python ----> 这里指定了只能到这个绝对路径下的python,当你用源码包安装了python时,调用的python仍然是这个绝对路径下的python。
实例:
vim chinese.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "你好,世界"
chmod +x chinese.py
4,在交互器中执行(Windows上直接安装python3.6,或者Linux上云溪python)
除了把程序写在文件里,还可以直接调用python自带的交互器运行代码,
localhost:~ jieli$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World!")
Hello World!
5,脚本开头模板配置方法:
#!/usr/bin/env python ------------------> 在Windows中不需要这一条。windows中的pycharm中不需要这一条
#_*_coding:utf-8_*_ ------------------> 使得该文件支持中文,否则中文显示乱码。补:python3.x默认支持utr-8,不加也可以
# Descripe: xxx
# Author:chen
# Date: xxx
配置默认的模板:视图--》工具栏(view ---> toolbar),点击新生成的双头扳手的图标,编辑器(editor)--->文件和代码模板(file and code templates)-->pythor script,添加以上信息--->点击应用,确定。
6,pycharm安装及使用方法:
Windows上安装好之后:运行:先注册,引用python3.6执行程序的绝对路径,新建一个项目,新建一个目录,新建一个python file。直接编辑,
7,变量(pycharm里面演示)
声明变量
#!/usr/bin/env python ------------------>在Windows中不需要这一条。
#_*_coding:utf-8_*_
# Author:chen
name = "Abcd JCK"
print(“My name is ”,name)
上述代码声明了一个变量,变量名为: name,变量name的值为:"Abcd JCK"
注意:代码里中间有个逗号,作用是将代码和变量区分开,代表了两个参数传给了print,否则代码错误,运行后则正常在一起的。
变量定义的规则:
变量名只能是 字母、数字或下划线的任意组合,不能有特殊字符。
变量名的第一个字符不能是数字,变量名中间不能有空格。
以下关键字不能声明为变量名 ['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']
实例:girl_of_oldboy
理解变量的赋值,变量是保存在内存中的。供后续的程序随时调用。
name = "Alex Li"
name2 = name
print(name,name2)
name = "Jack"
print(name,name2) ——————> Jack Alex Li
python里的变量分两种:常量和变量
常量:NAME = abc 大写的变量名,代表这个变量不要改。
变量:name = abc,这个变量的值可以随便重新替换。
8,字符编码
ython解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号,GB2312 支持的汉字太少。
GBK1.0 ,1995年的汉字扩展规范,收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
GB18030,2000年的 是取代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解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
#!/usr/bin/env python
print "你好,世界"
改正:应该显示的告诉python解释器,用utf-8来解释源代码,即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "你好,世界"
注意:python3里面默认就采用utf-8 的编码解释器,所以 # -*- coding: utf-8 -*- 可以省略不写。python2里面必需加上才能支持中文。
9,python里注释的写法:
单行注释:# 被注释内容
多行注释:,,, 被注释内容 ,,, (注意:双引号也可以。python中无区别,完全一样)
,,,另外一个作用:打印多行:
name = ,,,
abadf = asdfaf
sssssss
5555555555
,,,
print(name)
10,用户输入:input函数,将输入的数值赋予给变量。
例1:
#!/usr/bin/env python
#_*_coding:utf-8_*_
#name = raw_input("What is your name?") #only on python 2.x
name = input("What is your name?")
print("Hello " + name )
扩展:
#_*_coding:utf-8_*_
# Author:chen
name = input('What is your name?')
print('\033[031mHello\033[0m','\033[032mname\033[0m')
颜色的输入方法:
红色:\033[031m xxx \033[0m
绿色:\033[032m xxx \033[0m
蓝色:\033[033m xxx \033[0m
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
# 打印输入的内容
print(pwd)
11,格式化输出
例1:
name = input('name:' )
age = input('age:' )
job = input('job:' )
salary = input('salary:' )
info = '''
------ info of %s ---- ------>s是string的简写,这里的%s表示引用变量的占位符,表示这个位置为变量,该变量可以是字符也可以是数字,但数字也当成字符串的类型来处理,d为纯数字类型的。引入这个的作用就是判断输入的数据的类型。
name:%s
age:%s
job:%s
salary:%s
''' % (name,name,age,job,salary) ------> 将占位符与具体的变量对应上。这里必需与站位符一一对应,否则报错。
print(info) -----------------> 注意。引用变量时不能加引号,加了引号就成了打印这个字符串了。
s:string 字符串
d:数字(整数)
f:浮点(小数)
引入这个的作用就是判断输入的数据的类型。
打印一个变量的数据类型:
age = input(age: )
print(type(age))
---->
age:22
<class 'str'> -------------类型:字符串
注意:python中默认所有的输入(当你输入数字123时),都当成了字符串类型的来处理:str
字符串类型转换
强制将一个字符型转成整数型:int函数来处理:integer:整形,整数形式
age = int(input(age: ))
print(type(age),type(str(age)))
------>
age:11
<class 'int'><class 'str'>
扩展:将一个整形的输入再转成字符串:
age = int(input('age:'))
print(age,type(age),type(str(age)))
例2:字符串变量里的一种字符串引用方式:.format使用方法
name = input(name: )
age = input(age: )
job = input(job: )
salary = input(salary: )
info3 = '''
----------- info of {0}---------
Name:{0}
Age:{1}
Job:{2}
Salary:{3}
''' .format(name,age,job,salary)
print(nifo)
12,输入密码时,隐藏密码,在pycharm里不好使,在Python里可以用
12.1,明文输入,例:
username = input('username:')
password = input('password:')
print(username,password)
执行后上面的password是明文的形式
12.2,getpass模块使用
要想将密码的明文改成密文,要引用python自带的一个标准库里的getpass模块。在pycharm里做实验不好使,写法如下:
该实验在cmd里的python中运行和在windows上安装的python3.6上运行的效果一样,都可以模拟一下的实验效果,逐行敲一下命令就可以了
import getpass
username = input("username: ")
password = getpass.getpass("password: ") -------------------getpass是一个模块。模块是一个已经封装好的一堆功能得程序,导入之后就可以直接用,不用重新写了
print(username,password)
实演过程如下(直接在python软件里运行或者开始---cmd ---调用python命令行后运行):
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import getpass
>>> username = input('username:')
username:jack
>>> password = getpass.getpass('password:')
password:
>>> print(username,password)
jack abc123
>>>
开始--->运行--->cmd--->
cd C:\Users\Administrator\AppData\Local\Programs\Python\Python3.6
python
... 下面的过程和上面的一样
补:模块又叫库,分为标准库和第三方库。
标准库:不需要安装,只要导入就可以用的库
第三方库:
windows里运行:在python里运行:
python passwd.py
--->username:alex
--->password: -----------此时输入的密码就不显示出来了
--->alex dfsfsglasjgjasl
验证密码
完整代码:
#_*_coding:utf-8_*_
# Author:chen
_username = 'alex'
_password = 'abc123'
username = input('username:')
password = input('password:')
if _username == username and _password == password:
print('Welcome user {name} login to here.'.format(name=username)) ------------》或者用这种 {0} .fromat{username}
else:
print('Invalid username or password!')
分项解释如下:
_username = 'alex' -------------- 如果写成:_username = alex 此时后面的Alex表示一个变量,将Alex变量的值赋给_username这个变量
_password = 'abc123'
username = input('username:')
password = input('password:')
if _username == username and _password == password: -------------冒号:换行时下一行自动缩进。所以下行会自动有空格
print('Welcome user {name} login ...'.format(name=username)) -------->或者写成:print(‘Welcome user {0} login...’.format(username))
else:
print('Invalid username or password!') ------------------ 可以看做是else的子语句。
shell中不需要缩进。但要有fi来结束。for循环中需要done来结束。在Python中没有这些结尾,Python有强制缩进,所以不需要这些结尾标识符
IndentationError:就是缩进的错误。Python语句中不能随便的缩进。只能顶格写,只能是该语句是上个语句的子语句时才会自动的缩进。
13,if语句和while循环
猜一次就退出,无循环,判断之后就退出了
age_of_oldboy = 56
guess_age = input('guess age:') ------改成:guess_age = int(input('guess age:')) #若不改,会报错,因为你输入的字符串的类型,无法和56进行比较大小
if guess_age == age_of_oldboy:
print("yes,you got it.")
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
注意:Python3里你输入的不论是数字还是字符串都当成字符串,而字符串是不能进行大小比较的
....................................................................................
count = 0
while True:
print('count:',count)
count = count +1 -----------> count +=1 也可以, 此时,该循环会无限循环下去。
if count == 1000: ------------> 当count达到1000时,跳出循环。
break -------> 跳出break的上层的循环,而不是上上层的循环
扩展实例:
for i in range(10):
print(i)
if i==3:
for j in range(10):
print(j)
if j==5:
break
效果如下:
0 ------------ i = 0
1 ------------ i = 1
2 ------------ i = 2
3 ------------ i = 3
0 ------------ j = 0
1 ------------ j = 1
2 ------------ j = 2
3 ------------ j = 3
4 ------------ j = 4
5 ------------ j = 5 ,然后break生效,跳出当前层次for的循环
4 ------------ i = 4 继续上一层的for循环。
5 ------------ i = 5
6 ------------ i = 6
7
8
9
..................................................................................
猜对时才退出:while True 就是死循环,一直循环下去
age_of_oldboy = 56
while True:
guess_age = input('guess age:') ------改成:guess_age = int(input('guess age:'))
if guess_age == age_of_oldboy:
print("yes,you got it.")
break ------------------------------ 猜对了,就跳出循环。不再进行该循环了。不加会一直执行下去。
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
..................................................................................
猜对和猜不对有三次时退出
age_of_oldboy = 56
count == 0
while True:
if count ==3:
break
guess_age = input('guess age:') ------改成:guess_age = int(input('guess age:'))
if guess_age == age_of_oldboy:
print("yes,you got it.")
break ------------------------------ 猜对了,就跳出循环。不再进行该循环了。不加会一直执行下去。
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
count +=1
..........................................................................
上述代码优化下:
age_of_oldboy = 56
count = 0
while count <3:
guess_age = input('guess age:') ------改成:guess_age = int(input('guess age:'))
if guess_age == age_of_oldboy:
print("yes,you got it.")
break ------------------------------ 猜对了,就跳出循环。不再进行该循环了。不加会一直执行下去。
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
count +=1
.......................................................................................
三次猜错加提示:
age_of_oldboy = 56
count = 0
while count <3:
guess_age = int(input('guess age:'))
if guess_age == age_of_oldboy:
print("yes,you got it.")
break ------------------------------ 猜对了,就跳出循环。不再进行该循环了。不加会一直执行下去。
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
count +=1
if count =3: ------------------------------------- 当三次都猜错时,出一个提示。
print('you have tried too many times,fuck off.')
..........................................................................................
上述代码优化如下:while ... else...结构使用
age_of_oldboy = 56
count = 0 ---------------------》 注意:这里的不能用==,而只能用=,赋值的意思。
while count <3: ---------------------》当是while True时,不走else下的代码
guess_age = int(input('guess age:'))
if guess_age == age_of_oldboy:
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
count +=1
else: ---------》当while的条件成立时,走上面的代码,当while的代码不成立时,走else下的代码,当条件是while True时,不走else下的代码
print('you have tried too many times,fuck off.')
注意:shell中没有这种语法。
14,for循环
for i in range(10): -------> i就是临时变量,range(10) 就是循环了10次。赋值从0开始,到9结束。和shell中seq 10不同,从1开始到10结束
print('loop',i)
隔着数循环(从0开始,每次增加2,到10结束,不包括10):
for i in range(0,10,2):
print('loop',i)
------ >
loop 0
loop 2
loop 4
loop 6
loop 8
for i in range(0,10,3): ---> 此时的循环就是:0, 3, 6,9
延伸:for ... else ... 结构(for下面循环走完,走else下面的代码)
age_of_oldboy = 56
for i range(3): --------------------------------> 只循环三次
guess_age = int(input('guess age:'))
if guess_age == age_of_oldboy:
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print(‘think smaller’)
else:
print('think bigger!')
else: 意思:当for循环里的代码正常走完了,就执行else下的代码;不正常走完(break)时,就不走else代码,原理和while...else...一样的。
print('you have tried too many times,fuck off.')
15,continue:跳出本次循环,继续下次循环
break:结束本次循环,跳出整个循环
eg:
for i in range(10):
if i <3:
print("loop",i)
else:
continue
print("hehe......") 注意:此时不打印下面的print内容,又跑到第一层去了。continue继续执行下次循环,本次循环没有执行完成的不执行了(continue后的不执行)
上例要想显示出“hehe......”就得改成:
for i in range(10):
if i<3:
print('loop',i)
else:
print('hehe.....')
continue 可以省略掉,效果一样的。因为实在for循环里,自动循环,而且该循环有结束的控制条件:range(10)