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

以上。

posted @ 2020-02-17 22:53  斐波那切  阅读(227)  评论(0编辑  收藏  举报