python安装
安装python3:
1.拿到源码安装包(python3.6)--->去官网下载
2.解压安装包到/opt目录
3.安装编译过程中需要的依赖包:gcc,zlib,zlib-devel,openssl-devel
3.进入解压的安装包进行编译
cd /opt/Python-3*
# --prefix= :安装路径 --with-ssl:添加ssl加密
./configure --prefix=/usr/local/python3 --with-ssl
安装:make && make install
4.添加python3的命令到环境变量中
echo $PATH :查看系统的环境变量
#临时添加
export PATH="python3命令所在的路径:$PATH"
#永久添加
echo export PATH="/usr/local/python3/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
5.如何检测是否安装成功
在命令行执行:python3
第一个python程序
ASCII:
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
UTF-8:
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-8 (Unicode)编码范围
- u4e00-u9fa5 (中文)
- x3130-x318F (韩文)
- xAC00-xD7A3 (韩文)
- u0800-u4e00 (日文)
UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是6个字节。
UTF-16:
UTF-16编码是以16位无符号整型数据为单位的。能够对Unicode的所有1,112,064个有效代码点进行编码。编码是可变长度的,因为编码点是用一个或两个16位代码单元编码的。
# -*- coding:utf-8 -*- #在python2.*中需要添加该行语句,使其能识别中文
print'hello world' #python2.*
print('hello world') #python3.*
printt('hello world') #python3.*
print('hello world') #python3.*
print('python')print('linux')
print'你好'
# 每一行代码只负责完成一个动作
# print的作用:把内容输出到屏幕上来
# python是一个格式非常严格的程序设计语言,每行代码前面都不要增加空格
错误示范:
正确示范:
python的数据类型
# 整型
In [14]: a = 1
In [15]: print(a)
1
In [16]: type(a)
Out[16]: int
# 浮点型
In [17]: b = 1.2
In [18]: type(b)
Out[18]: float
# 字符串类型
In [20]: c = 'westos'
In [21]: type(c)
Out[21]: str
# 类型转换
In [22]: float(a)
Out[22]: 1.0
In [23]: int(b)
Out[23]: 1
In [24]: float(c) ##字母字符串类型不能转换成浮点型和整型
------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-24-36b90e4449a0> in <module>
----> 1 float(c)
ValueError: could not convert string to float: 'westos'
In [25]: str(a)
Out[25]: '1'
In [26]: str(b)
Out[26]: '1.2'
In [27]: d = '123456'
In [28]: d
Out[28]: '123456'
In [29]: int(d)
Out[29]: 123456
In [30]: float(d)
Out[30]: 123456.0
# 如何删除内存中的变量
In [31]: del a
In [32]: a
------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-32-3f786850e387> in <module>
----> 1 a
NameError: name 'a' is not defined
# bool类型
bool:只有两个值(True False)
# 非0即真,非空即真
In [34]: a = 1
In [35]: bool(a)
Out[35]: True
In [36]: bool(0)
Out[36]: False
In [37]: bool(1)
Out[37]: True
In [38]: bool(' ')
Out[38]: True
In [39]: bool('')
Out[39]: False
In [40]: bool(2412414)
Out[40]: True
python的输入和输出
程序:输入(键盘)----代码(java/python/c)----输出(屏幕)
输入:
#在pyhon2*中input:(只接收数值类型)
>>> help(input) ##查看帮助手册
>>> input()
1
1
>>> num = input('请输入密码:')
请输入密码:123456
>>> print num
123456
>>> num = input('请输入密码:')
请输入密码:westos12345
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'westos12345' is not defined
raw_input(接收字符串类型)
>>> name = raw_input('请输入用户名:')
清输入用户名:tom
>>> print name
tom
>>> name = raw_input('请输入年龄:')
请输入年龄:18
>>> print name
18
>>> type(name)
<type 'str'>
"""
变量的定义:
在python中,每个变量在使用之前都必须赋值,变量赋值后该变量才会被创建
等号(=):就是用来给变量赋值的
=左边是一个变量名
=右边是存储在内存中的值(被变量名所指向)
变量名=值
"""
python3:(没有raw_input)
input:接收的都是字符串类型
In [1]: num = input()
12
In [2]: num
Out[2]: '12'
In [3]: name = input('请输入你的名字:')
请输入你的名字:harry
In [4]: name
Out[4]: 'harry'
"""
格式化输出
在python中可以使用print函数将信息输出到控制台
如果希望输出文字的同时,一起输出数据
语法格式:
print('格式化字符串' %(变量1,变量2...))
格式化字符串 含义
%s: 字符串
%d: 十进制的整数
%f: 浮点数
%%: 输出%
"""
例题:
1.定义字符串变量name,输出:我的名字叫小明,请多多关照
2.定义整数变量student_num,输出:我的学号是000001
# %06d:不到6位就补0,如果是6位,该是多少是多少
3.定义小数 price,weight,money,输出:水果的单价是?元,购买了?斤,需要多少钱
# %.2f:保留小数点后两位
4.定义一个小数scale 输出:数据比例是10.00%
输入输出练习:
求平均成绩(python3解释器)
- 输入学生姓名;
- 依次输入学生的三门科目成绩;
- 计算该学生的平均成绩, 并打印;
- 平均成绩保留一位小数点;
- 计算该学生语文成绩占总成绩的百分之多少?并打印。eg: 78%;
代码:
name=input('输入学生姓名:')
print('依次输入%s的三门科目成绩:' %(name))
math=float(input('数学成绩:'))
chinese=float(input('语文成绩:'))
english=float(input('英语成绩:'))
print('%s的平均成绩是%.1f' %(name,(math+chinese+english)/3))
print('%s的语文成绩占总成绩的%d%%' %(name,yuwen/(math+chinese+english)*100))
分支语句
"""
判断语句(if)
if 要判断的条件:
条件成立的时,要做的事情
else:
条件不成立的时候,要做的事情
# 注意:代码的缩进为一个tab键,或者四个空格(tab键和空格不要混用)
"""
例子:
age = 13
if age >= 18:
print('允许进入网吧')
else:
print('未成年,不允许进入网吧')
print('~~~~~~~~~~~~~')
逻辑运算符
"""
and:
条件1 and 条件2
两个条件同时满足,返回True
只要有一个不满足,就返回False
or:
条件1 and 条件2
两个条件只要有一个满足,返回True
两个条件都不满足,返回False
not:
对一个条件取反:not 条件
"""
例子:
python_score = 60
c_score = 55
if python_score > 60 or c_score > 60:
print('考试通过')
else:
print('请继续努力')
if案例:
需求:
1.从控制台输入要出的拳 ---石头(1)/剪刀(2)/布(3)
2.电脑随即出拳--先假定电脑只会出石头,完成整体代码功能
3.比较胜负
石头 胜 剪刀
剪刀 胜 布
布 胜 石头
"""
import random ##倒入生成随机数模块
In [10]: random.randint(12,20)
Out[10]: 12
In [11]: random.randint(12,20)
Out[11]: 13
random.randint(a,b) # 随机返回[a,b]之间的整数,包含a,b
如果a=b:结果不变
如果a>b:结果报错,下限必须小于上限
"""
代码:
fist=int(input('请输入要出的拳:---石头(1)/剪刀(2)/布(3)'))
import random
e_fist=random.randint(1,3)
print('控制台出的是:%d,电脑出的是:%d' %(fist,e_fist))
if ((fist ==1 and e_fist==2) or (fist==2 and e_fist==3) or (fist==3 and e_fist==1)) :
print('控制台胜出。')
elif fist<1 or fist>3 :
print('输入错误。')
elif fist==e_fist :
print('平局。')
else :
print('电脑胜出。')
if案例2:
判断闰年?
用户输入年份year, 判断是否为闰年?
- year能被4整除但是不能被100整除 或者 year能被400整除, 那么就是闰年;
代码:
year=int(input('输入年份:'))
if (((year%4==0)and(year%100!=0)) or (year%400==0)) :
print('该年是闰年。')
else :
print('该年不是闰年。')
算术运算符
In [1]: 1+2
Out[1]: 3
In [2]: 3-1
Out[2]: 2
In [3]: 2*3
Out[3]: 6
In [4]: 6/3
Out[4]: 2.0
In [5]: 9/2
Out[5]: 4.5
In [6]: 9//2 ##除后取整
Out[6]: 4
In [7]: 9%2 ##取余数
Out[7]: 1
In [8]: 2**2 ##幂次方
Out[8]: 4
#先乘除后加减
#同级运算符是从左至右 计算
#可以使用()调整计算的优先级
练习:
1. 输入年、月,输出本月有多少天。合理选择分支语句完成设计任务。
输入样例1:2004 2
输出结果1:本月29天
输入样例2:2010 4
输出结果2:本月30天
代码:
year=int(input('输入年:'))
month=int(input('输入月:'))
if ((month%2==1) and (1<=month<=7)) or (month%2==0 and (8<=month<=12)):
print('本月31天')
elif month==2:
if (year%4==0 and year%100!=0) or (year%400==0):
print('本月29天')
else:
print('本月28天')
else:
print('本月30天')
2. 用 if 判断输入的值是否为空?如果为空,报错Error
代码:
a=input()
if not a:
print('Error')
3. 根据用于指定月份,打印该月份所属的季节。
**提示: 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
代码:
month=int(input('输入月份:'))
if 3<=month<=5:
print('%d月为春季' %(month))
elif 6<=month<=8:
print('%d月为夏季' %(month))
elif 9<=month<=11:
print('%d月为秋季' %(month))
else:
print('%d月为冬季' %(month))
循环语句
for 循环的语法:
for 变量 in range(10):
循环需要执行的代码
else:
循环结束时需要执行的代码
1+2+3+...+100=
"""
# c语言或者java
sum = 0
for(int i=1;i<=100;i++):
sum = sum + i
print sum
"""
# python
"""
In [1]: range(5)
Out[1]: [0, 1, 2, 3, 4]
In [2]: range(7)
Out[2]: [0, 1, 2, 3, 4, 5, 6]
In [3]: help(range)
In [4]: range(1,10)
Out[4]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [5]: help(range)
# 拿出1~10之间的所有偶数
In [6]: range(1,10,2)
Out[6]: [1, 3, 5, 7, 9]
In [7]: range(1,11,2)
Out[7]: [1, 3, 5, 7, 9]
# 拿出1~10之间的所有偶数
In [8]: range(2,11,2)
Out[8]: [2, 4, 6, 8, 10]
****range()函数
range(stop): 0~stop 1
range(start,stop):start~stop 1
range(start,stop,step):start~stop step(步长)
"""
sum = 0
for i in range(1,101):
sum = sum + i
print(sum)
例子:
需求1:求1~100之间的所有偶数之和
需求2:求1~100之间的所有奇数之和
需求3:用户输入一个整形数,求该数的阶乘;3!=3*2*1
代码:
sum1=0
for i in range(2,101,2):
sum1 = sum1 + i
print('1~100之间的所有偶数之和为%d' %(sum1))
sum2=0
for i in range(1,101,2):
sum2 =sum2 + i
print('1~100之间的所有奇数之和为%d' %(sum2))
num=int(input('输入一个整型数:'))
mul=1
for i in range(1,num+1):
mul =mul * i
print('%d的阶乘为%d' %(num,mul))
用户登陆程序:
"""
用户登陆程序需求:
1.输入用户名和密码
2.判断用户名和密码是否正确(name = 'root',passwd='westos')
3.为了防止暴力破解,登陆仅有三次机会,如果超过三次,程序就报错
"""
# 为了让登陆代码循环三次
for i in range(3):
name = input('用户名:')
passwd = input('密码:')
if name == 'root' and passwd == 'westos':
print('登陆成功')
break
else:
print('登陆失败')
print('您还剩余%d次机会' %(2-i))
else:
print('登陆次数超过三次,请等待100s后再登陆')
break_continue
"""
break:跳出整个循环,不会再执行循环后续的内容
continue:跳出本次循环,continue后面的代码不再执行,但是还是会继续循环
exit():结束程序的运行
"""
例子:
for i in range(10):
if i == 5:
break
print(i)
break练习_实现命令行提升雏形
代码:
import os ##导入linux命令模块
for i in range(1000):
cmd = input('[root@test]$')
if cmd:
if cmd == 'exit':
print('logout')
break
print('hello') ##break退出循环后该语句不会执行
else:
print('run %s' %(cmd))
# 运行shell命令
os.system(cmd)
else:
continue
print('hello')
# 死循环
while True:
cmd = input('[root@test]$')
if cmd:
if cmd == 'exit':
print('logout')
break
print('hello')
else:
print('run %s' %(cmd))
# 运行shell命令
os.system(cmd)
else:
continue
print('hello')
for循环练习:
"""
输入两个数值:
求两个数的最大公约数和最小公倍数.
最小公倍数=(num1*num2)/最大公约数
"""
代码:
#1.输入两个数值
num1 = int(input('Num1:'))
num2 = int(input('Num2:'))
# 2.找出两个数中的最小值
min_num = min(num1,num2)
# 3.最大公约数的范围1~min_num之间
# 最大公约数就是num1和num2能整除的最大的数
for i in range(1,min_num+1): #1,2
if num1 % i == 0 and num2 % i ==0:
"""
2%1 ==0; 6%1==0 gys =1
2%2==0; 6%2==0 gys =2
"""
# 当我们循环结束的时候,gys中保存的一定是最大的约数
gys = i
# 4.最小公倍数
lcm = int((num1*num2)/gys)
print('%d和%d的最大公约数为%d' %(num1,num2,gys))
print('%d和%d的最小公倍数为%d' %(num1,num2,lcm))
# while 循环
代码:
num1=int(input('输入整数num1:'))
num2=int(input('输入整数num2:'))
min_num=min(num1,num2)
i=1
while i<=min_num:
if num1%i==0 and num2%i==0:
k=i
i+=1
print('%d和%d的最大公约数为%d' %(num1,num2,k))
print('%d和%d的最小公倍数为%d' %(num1,num2,num1*num2/k))
range和xrange的区别:
"""
python2:
-range(1,5):即刻生成数据,消耗时间并且占用内存
-xrange(1,5):先生成一个xrange对象,使用值的时候才生成数据,才占用内存
python3:
-range(1,5):相当于python2中的xrange
"""
while循环:
"""
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
.....
"""
例子:
# 'hello python'
# 1.定义一个整数变量,记录循环次数
i=1
# 2.开始循环
while i<=5:
print ('hello python')
# 处理计数器
i += 1
# 执行之后会打印5次'hello python'
# 计算0~100之间的所有偶数累计求和
i = 0
sum = 0
while i <= 100:
if i % 2 ==0:
sum += i
i += 1
print('0~100之间的所有偶数累计求和的结果是 %d' %sum)
#死循环
while True:
print('hello python')
# 一直处在循环之中,ctrl+c强制退出循环
while练习:
如图打印乘法表:
"""
*
**
***
****
*****
"""
代码:
row=1
while row<=9:
col=1
while col<=row:
print('%d*%d=%d\t' %(col,row,row*col),end='')
col+=1
print()
row+=1
# \t:在控制台输出一个制表符,协助我们在输出文本时在垂直方向保持对齐
"""
*
**
***
****
*****
"""
代码:
row=1
while row<=9:
col=1
while col<=9-row:
print(' \t',end='')
col+=1
t=row
while t>0:
print('%d*%d=%d\t' %(col,row,row*col),end='')
col+=1
t-=1
print()
row+=1
"""
*****
****
***
**
*
"""
代码:
row=1
while row<=9:
col=1
while col<=10-row:
print('%d*%d=%d\t' %(col,row,row*col),end='')
col+=1
print()
row+=1
"""
*****
****
***
**
*
"""
代码:
row=1
while row<=9:
col=1
while col<row:
print(' \t',end='')
col+=1
t=col
while t<=9:
print('%d*%d=%d\t' %(t,row,t*row),end='')
t+=1
print()
row+=1
循环练习:
"""
# 猜数字游戏
if , while(for), break
1. 系统随机生成一个1~100的数字;
** 如何随机生成整型数, 导入模块random, 执行random.randint(1,100);
2. 用户总共有5次猜数字的机会;
3. 如果用户猜测的数字大于系统给出的数字,打印“too big”;
4. 如果用户猜测的数字小于系统给出的数字,打印"too small";
5. 如果用户猜测的数字等于系统给出的数字,打印"恭喜中奖100万",并且退出循环;
"""
# while循环
代码:
import random
n=5
computer=random.randint(1,100)
print('电脑生成的数字为%d' %computer)
while n>0 :
user=int(input('输入整数:'))
if user>computer :
print('too big')
elif user<computer :
print('too small')
else :
print('恭喜中奖100万')
break
n-=1
print('您还有%d此机会' %(n))
else :
print('很遗憾,您的机会已用完' )
# for循环
代码:
import random
computer=random.randint(1,100)
print('电脑生成的数字为%d' %computer)
for i in range(1,6):
user=int(input('请输入整型数:'))
if user==computer:
print('恭喜中奖100万')
break
elif user<=computer:
print('too small')
print('还剩余%d此机会' %(5-i))
else:
print('too big')
print('还剩余%d此机会' %(5-i))
else:
print('很遗憾,您的机会已用完')
字符串的定义
a = 'hello'
b = "python"
c = """
用户管理系统
1.添加用户
2.删除用户
3.显示用户
"""
print(type(a))
print(type(b))
print(type(c))
print(a)
print(b)
print(c)
# 字符串常用的转义符号
"""
\n:换行
\t:一个tab键
\":打印"
\':打印'
"""
# 打印guido's
# 打印"hello guido's python"
print('guido\'s')
print("guido's")
print('"hello guido\'s python"')
print("\"hello guido's python\"")
print('%s\n%s' %(a,b))
print('%s\t%s' %(a,b))
字符串的特性
s = 'hello'
# 索引:0,1,2,3,4 索引是从0开始的
print(s[0])
print(s[4])
# 拿出字符串的最后一个字符
print(s[-1])
#切片
# s[start:end:step] 从start开始,到end-1结束,步长为step(默认是1)
print('~~~~~~~~~~~~~~~~~~~~~~~~~~')
print(s)
print(s[0:3])
print(s[0:4:2])
# 显示所有字符
print(s[:])
# 显示前3个字符
print(s[:3])
# 字符串倒序输出
print(s[::-1])
# 除了第一个字符之外,其他的全部显示
print(s[1:])
#重复
print(s*10)
#连接
print('hello '+'world')
#成员操作符
print('he' in s)
print('aa' in s)
print('he' not in s)
字符串特性的应用
题目要求:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样
的整数。
示例:
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数
# 用字符串的形式
代码:
back=input('输入一个整数:')
print(back==back[::-1])
# 用整数型
代码:
back=int(input('输入一个整数:'))
b=back
a=''
if b>0:
while int(b/10):
a=a+str(b%10)
b=int(b/10)
if int(b/10)==0:
a=a+str(b)
print(back==int(a))
elif b==0:
print(True)
else:
print(False)
字符串_开头和结尾匹配
"""
变量名.startswith('该变量的值中要匹配的开头')
变量名.endswith('该变量的值中要匹配的结尾')
"""
例子:
# 匹配字符串的开头和结尾
filename='hello.logggh'
if filename.endswith('.log'): ##匹配结尾
print(filename)
else:
print('error file')
url1 = 'file:///mnt'
url2 = 'ftp://172.25.254.250/pub/'
url3 = 'http://172.25.254.250/index.html'
if url3.startswith('http://'): ##匹配开头
print('爬取网页')
else:
print('不能爬取网页')
字符串_去掉两边的空格
"""
变量名.strip() ##默认去掉字符串两边的空格,若括号内添加'h'则表示去掉字符串两边相应的字符'h'
变量名.lstrip() ##去掉字符串左边的空格
变量名.rstrip() ##去掉字符串右边的空格
"""
例子:
>>> s=' hello '
>>> s
' hello '
>>> s.strip()
'hello'
>>> s.lstrip()
'hello '
>>> s.rstrip()
' hello'
>>> s='\nhello '
'hello'
>>> s='\thello '
'hello'
>>> s='helloh'
>>> s.strip('h')
'ello'
>>> s.lstrip('h')
'elloh'
>>> s.rstrip('h')
'hello'
“““
字符串.center(50,'*') ##字符串居中,并且左右两边有50个'*'
字符串.ljust(50,'*') ##字符串左对齐,并且右边有50个'*'
字符串.rjust(50,'*') ##字符串右对齐,并且左边有50个'*'
“““
例子:
>>> 'hello world'.center(50,'*')
'*******************hello world********************'
>>> 'hello world'.ljust(50,'*')
'hello world***************************************'
>>> 'hello world'.rjust(50,'*')
'***************************************hello world'
字符串的搜索和替换
"""
find:查找变量中含有要被找字符或字符串的首字母的位置,rfind表示从左边开始查找
replace:表示用某个字符或字符串代替变量中含有的字符或字符串,不会改变变量的值
count:统计被找字符或字符串在变量中出现的次数
"""
例子:
>>> s='hello python,learn python'
>>> s.find('python')
6
>>> s.rfind('python')
19
>>> s.replace('p','w')
'hello wython,learn wython'
>>> s.replace('python','linux')
'hello linux,learn linux'
>>> s
'hello python,learn python'
>>> s.count('p')
2
>>> s.count('he')
1
字符串的分离和拼接
"""
split:将字符串用某个字符将其分离
join:用某个字符将分离的字符串拼接
"""
例子:
>>> ip='172.25.254.126'
>>> ip.split('.')
['172', '25', '254', '126']
>>> date='2018-11-20'
>>> date.split('-')
['2018', '11', '20']
ip1=ip.split('.')
>>> ip1
['172', '25', '254', '126']
>>> ''.join(ip1)
'17225254126'
>>> '/'.join(ip1)
'172/25/254/126'
小米笔试体练习
- 题目描述:
> 给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前>后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”
- 输入描述:
> 输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)
- 输出描述:
> 对于每个测试示例,要求输出句子中单词反转后形成的句子
- 示例1:
-输入
hello xiao mi
-输出
mi xiao hello
# while循环
代码:
while 1 :
a=input('输入一个长度小于1000个字符的句子:\n')
b=a.split()
c=' '.join(b[::-1])
print(c)
# for循环
代码:
for i in range(1,1000):
a=input('输入一个长度小于1000个字符的句子:\n')
b=a.split()
c=' '.join(b[::-1])
print(c)