Python学习-基本类型、str基本操作、for循环
接下来记录下python中基本数据类型、字符串的基本操作以及for循环。
基本数据类型一览
python中基本数据类型有int、str、bool、list、tuple、dict和set。
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# 数据类型
'''
python中一般数据类型如下几种,简单一览
1 数值类型 int
2 字符类型 str
3 布尔型 bool
4 列表 list
5 元祖 tuple
6 字典 dict
7 交集并集差集 set
'''
# int
a=1
# str
b="clyang"
# 布尔
c=True
# 存储大量数据,列表
d=[1,2,"clyang",'123']
# 存储大量数据,元组,值不可以改变
e=(1,2,"clyang",'123')
# 字典,查询效率高
f={'name':'clyang'}
int、bool、str类型相互转化
int类型注意python2和python3的区别,python2中int超出范围,将自动转换成long类型,python3中只有int类型。
#! /usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import division
'''
int类型
int在python2和python3中是有区别的
python2中:
(1)int数字范围在32位电脑和64位电脑有区别
(2)int超出范围,将自动转换成long类型
(3)int做除法运算时,只能得到整数,如果需要得到小数需要在前面添加 from __future__ import division
python3中:
(1)只有int类型
(3)除法运算可以保留小数位
'''
var=9/2
print(var) #4.5
'''
二进制转10进制,比较简单,幂指数运算相加
10进制转2进制,也较为简单,对2取余,参考自己博客
'''
# int类型的方法
i=8
# 二进制的有效位长度
print(i.bit_length()) # 1000 -> 4
i=10
print(i.bit_length()) # 1010 -> 4
i=22
print(i.bit_length()) # 10110 -> 5
'''
数字转字符串,字符串转数字
'''
print(str(i))
str1='520'
print(int(str1))
'''
数字转布尔,布尔转数字
只有0才是False
'''
print(bool(1)) #True
print(bool(0)) #False
print(int(True)) #1
print(int(False)) #0
'''
字符串可以转布尔,但是布尔转字符串没啥意义
只有空字符串,转换才是False,其他都是True
'''
print(bool('')) #False
print(bool(' ')) #True
print(bool('buddy')) #True
# 只要输入内容,a就是True
a=input("请输入内容")
if a:
print(a)
else:
print("你没有输入任何内容")
str相关操作
str的基本操作很多,逐一记录下。
切片
就是截取字符串,它有如下特点。
(1)从左至右是有顺序的,有下标和索引,可以根据下标来切片;
(2)类似java,截取时顾头不顾尾;
(3)可以反着取,最右边字符下标从-1开始,然后往左就是-2,-3…;
(4)切片可以加步长;
name='中华人民共和国'
# 从左至右是有顺序的,有下标和索引,可以根据下标来切片
print(name[0],type(name[0])) #中 <class 'str'>
# 取一定的范围,是顾头不顾尾
print(name[0:2]) #中华
print(name[:2]) #0开始,0可以省略
# 可以反着取,最右边下标为-1
print(name[-1]) # 国
print(name[-3:]) # 共和国
# 切片可以加步长
print(name[::1]) # 从0索引开始到结尾,可以省略0,和最后的索引,步长为1
print(name[::2]) # 中人共国
# 反向切片步长,从最后一位开始,反向步长1,可以实现倒序提取
print(name[-1::-1]) #国和共民人华中
print(name[-1:-5:-2]) #国共
upper/lower
注意,大小写转换都会产生新的字符串,原字符串是不会变化的。
# upper lower
value = 'clyang'
new_value = value.upper()
print(value) # clyang
print(new_value) # CLYANG
startwith/endwith
判断是否以某个字符开头或结尾,比较常用。
# startwith endwith
print(value.startswith('c')) #True
print(value.startswith('cl')) #True
print(value.endswith('g')) #True
strip
可以去除空格,制表符\t,以及换行符\n,有strip、lstrip和rstrip。
# stip去除space \t \n、rstrip右,lstrip左
# 去除字符右边空格
var = 'clyang '
right_new_var = var.rstrip()
print(right_new_var)
# 去除字符左边空格
var = ' clyang'
left_new_var = var.lstrip()
print(left_new_var)
# 去除两边的空格
var = ' clyang '
all_new_var = var.strip()
print(all_new_var)
# 可以去掉指定字符
var = 'abc我靠abc'
print(var) #abc我靠abc
new_var=var.strip('abc')
print(new_var) #我靠
replace
可以进行字符串替换,并且最后一个参数可以指定替换多少个,替换没有左右替换。
# replace
var = '去你大爷的'
new_var = var.replace('大爷', '**')
print(new_var) #去你**的
# 替换两个大爷
var = '去你大爷的大爷SB'
new_var = var.replace('大爷', '**', 2)
print(new_var) #去你**的**SB
split
默认按照空格切割,也有split、rsplit和lsplit,切割完后,返回一个列表list,切割不会改变原字符。
# split 字符串切割
var = '去你,大爷的,大爷,SB'
# new_var = var.split(',') # 全部切割
new_var = var.split(',', 1) # 只按第一个分隔符来切分
print(new_var,type(new_var)) #['去你', '大爷的,大爷,SB'] <class 'list'>
# 字符串从右边开始切割
var = '去你,大爷的,大爷,SB'
new_var = var.rsplit(',', 1)
# new_var = var.rsplit(',')
print(new_var) #['去你,大爷的,大爷', 'SB']
join
非常好用,列表list转换成字符串,但是要求列表里全是字符。
var=['clyang','messi','ronald']
# 使用:拼接
new_var=':'.join(var)
print(new_var,type(new_var)) # clyang:messi:ronald
count
可以计算字符出现的次数。
# 计算a出现的次数
var='abagoghohgoghoghgohg'
print(var.count('a')) # 2
is
is可以判断字符是否是数字,字母,提供了一系列API。
(1)isdigit和isdecimal都可以判断是否为数字,但是后者判断是否为十进制数字,对①这种它就判断不能算数字了;
(2)isalpha:判断是否为字母;
(3)isalnum:判断是否为字母和数字组成;
# is的使用
var ='1000①'
print(var.isdigit()) # True
print(var.isdecimal()) # False
num=input("请输入金额")
if num.isdecimal():
print(int(num))
else:
print("输入错误")
print(var.isalpha()) #False
print(var.isalnum()) #True
len
计算字符串长度。
count = len('123456')
print(count) # 6
format
一般有三种使用方法。
# 字符串格式化1,直接使用{}作为类似占位符使用
name='我叫{},今年{},我为我{}学python,没错,我的名字是{}'.format('clyang',34,'儿子','clyang')
print(name)
# 字符串格式化2 0 1 2 就是后面的索引号,可以重复使用
name = '我叫{0},今年{1},我为我{2}学python,没错,我的名字是{0}'.format('clyang', 34, '儿子')
print(name)
# 字符串格式化3 ,可以使用映射
name = '我叫{name},今年{age},我为我{name}学python,没错,我的名字是{name}'.format(name='clyang',age=28)
print(name)
# console输出
我叫clyang,今年34,我为我儿子学python,没错,我的名字是clyang
我叫clyang,今年34,我为我儿子学python,没错,我的名字是clyang
我叫clyang,今年28,我为我clyang学python,没错,我的名字是clyang
encode
让字符按照指定编码格式输出。
# encode
name = '李杰' # 解释器读取到内存后,按照unicode编码方式存储,这里两个中文字符占8个字节
v1 = name.encode('UTF-8') # b'\xe6\x9d\x8e\xe6\x9d\xb0' 6个字节
print(v1)
v2 = name.encode('GBK') # b'\xc0\xee\xbd\xdc' 4个字节
print(v2)
for循环
(1)for循环适合循环打印字符串,如果想得到死循环,需要用while;
(2)有穷尽的情况优先使用for,没有则优先使用while;
(3)for循环中也可以使用break,continue;
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# while循环
logo='我是最帅的,就问你服不服老铁'
index=0
print(len(logo))
while index<len(logo):
print(logo[index])
index+=1
print("-----for循环-----")
# for循环
for item in logo:
print(item)
# for循环中也可以使用break、continue
print("-----for循环-continue-----")
for item in logo:
if item==',':
continue
print(item)
# for循环中也有for else
print("-----for-else-----")
for item in logo:
if item==',':
continue
print(item)
else:
print("老铁你说的都对")
#控制台打印
14
我
是
最
帅
的
,
就
问
你
服
不
服
老
铁
-----for循环-----
我
是
最
帅
的
,
就
问
你
服
不
服
老
铁
-----for循环-continue-----
我
是
最
帅
的
就
问
你
服
不
服
老
铁
-----for-else-----
我
是
最
帅
的
就
问
你
服
不
服
老
铁
老铁你说的都对
Process finished with exit code 0
for循环中可以配合range使用。
# range的使用,配合for循环,打印1-10
for item in range(1,11): # range里是一个列表,自动生成[1,2,3,...,10]
print(item)
# range的使用,配合for循环,打印1-10,但是不打印7
for item in range(1,11): # range里是一个列表,自动生成[1,2,3,...,10]
if item==7:
continue
print(item)
# 控制台打印
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
8
9
10
Process finished with exit code 0
以上。