数据类型-----字符串、字节

 

 

一、字符串

是一组由字符组成的序列,每一个字符都是字符串中的一个元素。

注意:不存在字符str,最小单位为字符串

字符串是不可修改类型(基本数据类型)

1. 字符串的创建-----单引号、双引号、三引号

  • 单引号和双引号交替使用可以到输出双引号的和单引号的作用
  • 三引号----自带换行
  • 续行符"\"可以换行
  • 空字符串 strnull = '

2. 字符转义----(可以转义的字符由' " \

在需要转义的字符前面添加"\",对特殊字符进行转义

   

# 换行\n, \t, \r----换行,制表符,回车

b = 'nnnnn\n'

   

   

3. 字符串的操作(运算符、索引、切片)

(1)        运算符 ---- + * in is < >

+

合并的字符串(新创建字符串)

print('a'+'b')

*         

重复

in/not in

值判断        

print('a' in 'asdasda')

is/is not

对象判断

eg:

a = 'asd'

b = 'asd'

print(a is b)

< > <= >=

比较运算

print('a' < 'b')                 # 比较ASCII

*****

print('absdc' < 'abd')          # 按照元素顺序,依次比较

(2)        索引----获取单个元素

格式: 变量名[index]

  • index的第一个元素是0,最后一个元素是-1
  • index 为正数从左往右,负数从右往左
  • index范围(-len() len()-1
  • 字符串长度可以通过len()获得

   

(3)        切片----获得字符串中的多个元素

格式: 变量名[start:end:step],三个参数都可以省略

注意start方向问题

注意start对应字符输出end对应字符不输出

[:]

提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串

[start:]

start 提取到结尾

[:end]

从开头提取到end - 1

[start:end]

start 提取到end - 1

[start:end:step]

start 提取到end - 1,每step 个字符提取一个左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1

   

Example:

a[:]                         # 整切片

a[0:]

a[-4:]                        # 切片索引可以越界

a[:4]

a[-5:-1]

a[-1:-5:-1]

a[::-1]                        # 颠倒

   

局部切片新创建对象,整体切片不新建对象

print(a is a[:]) ------ True

print(id(a), id(a[:]), id(a[1:4]) )        

   

Practice:

使用切片工具,截取data中的年月日,data = '2018-06-28'

4. 字符串的相关方法

定义的字符串,相当于创建的一个str对象

s = 'fssdfgsdfg'

print(tpye(s))

   

   

  1. count()统计一个字符在字符串中的数量

    x                待统计自字符串

    start        起始位置

    end                结束为止默认从头到尾

    # 几乎在所有包含startend的地方都是包含start,不包含end

       

  2. index() 返回查找字串的位置,默认输出第一次子串出现为止

    当查不到查找字串时报错

    index(sub, start, end)

    sub 为查找字串

       

  3. find() 如果找不到,返回 -1
  4. join() 将序列中的每一个元素,使用字符串拼接起来

    # 填充元素在前,被填充序列在括号中

    s = '123'

    b = '-'

    print(b.join(s))

  5. replace(old new, count)

    old         待替换字符串

    new         要替换的字符串

    count        不写全部替换,指定后从左往右替换,可以超出实际次数

       

    # replace不修改原数据,而是新创建字符串存储

       

  6. strip(chr) 剪切,按照传入的参数,去掉两端的对应字符串

    chr        默认空格

    剪切时按照剪切字符的所有单子符,从两端一直剪切到不存在符合字符为止

       

    s = ' adasdferasda '

    print(s.strip('ad'))

       

    # 左剪切        lstrip()

    # 右剪切        rstrip()

  7. split(sep, max)        切割:被切割的字符会去掉

    sep        切割字符

    max        最大切割次数

    # 默认按照空格切割,返回值为列表类型

       

    s = ' adasdferasda '

    print(s.split('er'))

       

    对字符串的所有操作都不会原地去做(修改字符串),而是新建。

  • upper() / lower() 变成大写或小写
  • capitalize()        首字母大写
  • isnumeric()         判断字符串是否完全是数字[汉字数字返回True]
    • 数字包括罗马数字、中文数字、Unicode数字、byte数字(单字节)、全角数字(双字节)

    isdigit()                判断字符串是否完全是数字[汉字数字返回Flase]

    isdecimal()

  1. isalpha()         判断是否完全都是字符[中文/英文]
  2. isidentifier()        判断字符串是否是合法标识符[变量名[字符、数字、下划线]]
  3. isupper()        判断是字符串内字母否完全是大写

    islower() 判断是字符串内字母否完全是小写

    isspace()        判断是否完全是空格

  4. center(width, fillchar)                向两端填充字符,先左后右

    width 填充完毕后的宽度

    fillchar 填充字符

     

    二、字节

字节是一系列单字节的组合,每一个字节都是[0, 255](无符号)范围内组成。

单字节:一个字节8个数据位

字节也不支持修改(类似字符串、简单变量)

   

1. 字节的创建

b = b'abc'

c = b'' --------- 汉字报错,因为汉字不能以字节形式报错

8个数据位,最多存储256不同内容

2. 字节的操作        运算符、索引、切片

(1) 运算符         + - * / is in >

eg:

print(b'abc' in b'abcsd')

print(b'abc' >= b'abcsd')

(2)        索引         索引显示ASCII

eg:        

print(b'b')

(3)        切片        切片显示字节

三、格式化 format:

方便打印输出的时候显示

   

# 将数字格式化成字符串

方法1 %

s% == str()

print('jj %s' % 1)

print('jj %s %s' % (1, 3))

   

方法2:format

print("'jj', 'java', {}, {}".format(1,2,4))

 

# 1.输出如下内容:分别使用双引号,和三引号

# Aare you "tom"

# Bno

   

a = ''''

Aare you "tom"

Bno

'''

b = "Aare you \"tom\"\n" \

"Bno"

   

print(a , b)

   

   

print('第二题=========================\n')

# 2.定义两个字符串,a="hello" b="hello",令c=a

# 思考:是否能对a中的h进行修改

# 输出abc三个变量的值

# 使用is==判断abc之间的关系,并画出内存图

   

m = 'hello'

n = 'hello'

t = m

   

idx = m.index('h')

chang = input('To change \'h\' as what:\n')

m_new = chang + m[idx:]

print('m修改后的结果是:',m_new)

############################

# def namestr(obj, namespace = globals()):

# return [name for name in namespace if namespace[name] is obj]

# import inspect

# import re

#

# def get_variable_name(variable):

# loc = locals()#locals()方法移到函数内

# for key in loc:

# if loc[key] == variable:

# return loc

###############################

def judge(a, b):

if a is b:

return '{}{}同一对象'.format(a, b)

elif a == b:

return '{}{}是同一值'.format(a, b)

else:

return '{}{}没半毛钱关系'.format(a, b)

   

print(judge(m, n))

print(judge(m, t))

print(judge(n, t))

print(judge(m_new, t))

   

   

print('第三题=========================\n')

# 3.分别输入3个爱好,打印出来"我的爱好是******"

# 使用格式化输出

hobby1 = 'hiking'

hobby2 = 'biking'

hobby3 = 'computer'

   

print('Method1\n My hobby is {}, {} and {}'\

.format(hobby1, hobby2, hobby3))

print('Method2\n My hobby is %s %s and %s' % (hobby1, hobby2, hobby3))

   

   

print('第四题=========================\n')

# 4.这是一个地址,http://news.gzcc.cn/html/2017/xiaoyuanxinwen_1027/8443.html

# 其中1027/8443是新闻编号,想办法获得新闻编号。至少两种方法。

website = 'http://news.gzcc.cn/html/2017/xiaoyuanxinwen_1027/8443.html'

   

# 第一种方案:split

cut1 = website.split('_')

cut1 = cut1[1].split('.')

print('采用split方法:', cut1[0])

   

# 第二种方案,切片(已知数字位数)

cut_back = website[-13: -5]

print('倒数位置固定的话,采用位数:', cut1[0])

# 第三种方案,切片(倒数第一个反斜杠)

lens = len(website)

website_back = website[::-1]

slash = website_back.index('/')

result = website_back[slash-4 : slash+4]

result = result[::-1]

print('采用寻找倒数第一个'/'方法:', cut1[0])

   

   

print('第五题=========================\n')

# 5.做如下练习:

# # 1.输入一种水果,如葡萄

# # 2.打印类似"吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮"的效果

# # 3.使用切片,切出自己输入的水果

# # 4.使用strip,剪切到自己输入的水果

# # 5.统计打印的的文本中,水果出现的次数

   

fruit = input('>>>>>>step1\nPlease input a fruit name\n')

   

   

# 替换

lyric = '吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮'

lyric_new = lyric.replace('葡萄', fruit)

print('>>>>>>step2\nreplace方案:'+ lyric_new)

   

# 格式化输出

print('>>>>>>step2\nformat方案:'+'{}不吐{}皮,不吃{}倒吐{}'.format(fruit, fruit, fruit, fruit))

   

# step3,切出水果

   

# 模拟索引index()函数,寻找第一个相符点

def my_index(lyric_new, fruit):

index_list = []

count= 0

   

# 遍历句子,判断和水果名的比较

for stri in range(len(lyric_new)-len(fruit)+1):

for dexi in range(0, len(fruit)):

# print(stri, lyric_new[stri + dexi], fruit[dexi],lyric_new[stri + dexi] == fruit[dexi])

if lyric_new[stri + dexi] == fruit[dexi]:

count += 1

index_list.append(stri)

   

# 计算出现次数

# print(count, len(fruit))

count_total = count // len(fruit)

# 修改出现位置列表

index_list = index_list[::len(fruit)]

   

# 切片获得随机一个fruit

import random

dex_redom = random.randint(0, len(index_list)-1)

fruit_cut = lyric_new[index_list[dex_redom]:index_list[dex_redom] + len(fruit)]

   

print('>>>>>>step3\n使用切片法获得的第{}fruit为:{}'.format(dex_redom,fruit_cut))

   

# 使用strip获得fruit名称

lyric_new_split = lyric_new.split('不吐', 1)

lyric_new_split = lyric_new_split[0].strip('')

print('>>>>>>step4\n采用split方法获得的fruit名称:' + lyric_new_split)

   

#输出

print('>>>>>>step5\n在第{} / {} / {} / {}位置出现fruit'.format(index_list[0],\

index_list[1], index_list[2], index_list[3]))

print('出现次数: {}'.format(len(index_list)))

return index_list, count_total, fruit_cut

   

(my_index(lyric_new, fruit))

   

# print('寻找+切片,得出结果:'+my_index(lyric_new, fruit)[1])

   

猜你喜欢

转载自www.cnblogs.com/geoffreyone/p/9241643.html