######Python(三)字符串####

####字符串####
1)字符串的创建:
字符串是python中最常见的数据类型,创建字符串只要给变量指定一个字符类型的值即可。

字符串的定义
1.使用单引号定义字符串

a = 'westos'

2.使用双引号定义字符串

b = "redhat"

3.使用"""允许一个字符串跨多行,字符串中可以包含换行符、制表符及其他特殊字符

c = """
westos
redhat
student
"""

###字符串的特性###
1)索引
字符串是字符的有序集合,可以通过其位置获得具体元素;python中,字符串中的字符通过索引来提取,索引从0开始;
python可以取负值表示从末尾提取,最后一个位-1(即程序认为可以从结束处反向计数)
索引丛0开始,使用变量名称[索引]得到字符串中的字符

[kiosk@foundation46 bin]$ ./python3   ##运行脚本
Python 3.6.4 (default, May 23 2019, 18:41:28) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'westos'  ##定义字符串共六个字符,索引0,1,2,3,4,5
>>> print(s[0])  ##输出的一个字符
w
>>> print(s[2])   ##输出第二个字符
s
>>> print(s[-1]) ##倒数,输出倒数第一个字符
s
>>> print(s[-2])  ##倒数,输出倒数第二个字符i
o
>>> print(s[6])   ##该字符中没有索引6
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

2)切片
切片可以提取相应部分数据,通常右边界不包括在提取字符串内
变量名[start:stop:step] 从start开始到stop -1结束 步长为step


print(s[0:3])   ##输出提取的从索引0到索引2的所有字符(不包括右边界3)
print(s[0:4:2])   ##输出提取的从索引0到索引4的所有字符,步长为2
print(s[:]) #左右边界都为空,显示所有的字符  
print(s[:3]) #左边界为空,显示前3个字符
print(s[::-1]) #字符串的翻转
print(s[1:]) #除了第一个字符之外的其他全部字符

在这里插入图片描述
3)重复
变量 * 重复次数

s = westos
>>> print(s * 3)  ##重复3次
westoswestoswestos

4)连接
变量1 + 变量2

>>>s = 'westos'
>>> c = 'redhat'
>>> c + s
'redhatwestos'

5)成员操作符:
in : 是成员为真
not in : 不是成员为真
#可以判断指定字符是不是包含在字符串,输出值为真或假

>>>s = 'westos'
>>> c = 'redhat'
>>> 're' in c   ##判断字符re 是否包含在c 变量
True  ##包含,输出true
>>> 're' in s##判断字符re 是否包含在s 变量
False ##不包含,输出False
>>> 'we' in s
True
>>> 'we' in c
False

6)for遍历字符串的每个字符
使用for语句可以循环输出字符串中的每个字符

name = 'westos'
for i in name :
       print(i)

在这里插入图片描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)
读都是一样
的整数。
1.字符串特性:

方法一:
num = input('请输入一个数字:')  
if num == num [::-1]:    
    print('是回文数')        
else:                    
    print('不是回文数')  
    方法二:     
num = input('Number:')
print(num == num [::-1])  ##数字的正序和倒序一样(#切片的方式做)
运行:
Number:121
True
Number:-121
False

2.其他方法实现

##字符串的常用方法##
1)格式:字符串,函数名称

istitle()  ##判断字符串是否为标题(标题首字母大写)输出为True或Flase
isupper()  ##判断字符串是否全部为大写
islower() ##判断字符串是否全部为小写
lower()  ##将字符串转换成小写
upper() ##将字符串转换成大写
title()  ##将字符串转换成标题

在这里插入图片描述
2)

endswith('str')  ##判断是否以‘str’结尾
startswith('str')  #判断是否以‘str’开头
isalpha()   ##判断字符串是否全部由字母组成
isalnum() ##判断字符串是否全部由字母和数字组成
isdigit()  ##判断字符串是否全部由数字组成

在这里插入图片描述
3)

strip()  ##取出左右两边的空格,空格为广义的空格 包含:\t   \n
lstrip()   ##取出左边的空格,空格为广义的空格 包含:\t   \n
rstrip()   ##取出右边的空格,空格为广义的空格 包含:\t   \n
还可以在括号中指定字符,去掉指定字符两边的空格

在这里插入图片描述
练习:
变量名定义是否合法:
1.变量名可以由字母 数字 下划线组成
2.变量名只能以字母和或者下划线开头

while True:                            
    s = input('请输入变量名:')               
    if s == 'exit':   #输入exit 退出       
        print('退出')                    
        break                          
    #索引判断如果以字母或—开头                     
 if s[0].isalpha() or s[0] == '_':  
        for i in s[1:]:  #切片判断除了第一个字符的字
                    if not(i.isalnum() or i == 
                           print('%s变量名不合法' %(s)) 
                            break                  
        else:                          
              print('%s变量名合法' %(s))    
 else:                              
          print('%s变量名不合法' %(s))       
     运行结果:
     请输入变量名:efe3
efe3变量名合法
请输入变量名:er@q
er@q变量名不合法
请输入变量名:_q1
_q1变量名合法
请输入变量名:1sdf
1sdf变量名不合法

##字符串的对齐##

center(30,'#')  ##预留值为30个,指定字符居中指定用#填满( 默认以空格填充)
ljustr(30,'#') ##预留值为30个,指定字符居左指定用#填满
rjustr(30,'#') ##预留值为30个,指定字符居右指定用#填满

在这里插入图片描述
##字符的搜索和替换##

s = 'hello world hello'  #定义一个变量
find找到子字符串,并返回最小的索引
print(s.find('hello'))
print(s.find('world'))
print(s.rfind('hello'))
替换字符串中的hello(旧值)为westos(新值)
print(s.replace('hello','westos'))

在这里插入图片描述
##字符串的统计##
count(子字符串) ##统计子字符串出现的次数
len(字符串) ##统计字符串的长度
在这里插入图片描述
##字符串的分离和连接##
split(分隔符) ##以指定的分隔符将字符串分离 (分离后支持索引)
符号.jion(分隔后的字符串) ##用符号将分离后的字符串连接

s = '172.25.254.250'
s1 = s.split('.')   ##以.位分隔符进行分离
print(s1[::-1])  ##支持索引,除了最后一个全部打印
date = '2019-05-24'
date1 = date.split('-')  ##以-位分隔符进行分离

#连接 通过指定的连接符,连接每个字符串
print(''.join(date1))  ##连接date1
print('/'.join(date1))  ##用/进行连接
print('~~'.join('hello'))##用~~进行连接

在这里插入图片描述

  • 题目描述:

给定一个句子(只包含字母和空格), 将句子中的单词位置反转,
单词用空格分割, 单词之间只有一个空格,前>后没有空格。
比如: (1) “hello xiao mi”-> “mi xiao hello”

  • 输入描述:

输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

  • 输出描述:

对于每个测试示例,要求输出句子中单词反转后形成的句子

  • 示例1:

  • 输入
    hello xiao mi

  • 输出
    mi xiao hello

方式一
#接受一个句子                           
sentence = input('请输入一个句子:')      
#将句子用空格分离                         
sentence1 = sentence.split(' ')   
#用切片的方式将句子反转                      
sentence2 = sentence1[::-1]       
#用空格符连接                           
sentence3 = ' '.join(sentence2)   
print(sentence3)  
方法二
print(' '.join(input().split()[::-1]))            
    
  1. 设计一个程序,帮助小学生练习10以内的加法
    详情:
    - 随机生成加法题目;
    - 学生查看题目并输入答案;
    - 判别学生答题是否正确?
    - 退出时, 统计学生答题总数,正确数量及正确率(保留两位小数点);
import random                                                                             
wrong = 0      #定义答错的变量                                                                        
right = 0      #答对 的变量                                                                      
                                                                                          
while True:  #建立一个无限循环的程序                                                                 
#两个随机数的范围                                                                                 
       num1 = random.randint(0,10)                                                        
       num2 = random.randint(0,10)                                                        
       print('%d + %d = ' %(num1,num2))   #将随机的加数输出                                       
       answer = input('请输入答案:')        #输入答案                                       
       if answer == 'exit':    #如果输入exit退出                                                
            break                                                                         
       elif int(answer) == num1 + num2:   ##如果答案=  num1 + num2:                                
            print('回答正确')                                                                 
            right +=1         #回答正确,回答正确的变量上加一                                            
       else:                                                                              
            print('回答错误')   #否则回答错误,错误变量加一                                                
            wrong +=1                                                                     
       z = wrong + right  #定义总答数 = 正确 + 错误                                                
       p = right/z        #正确率= 正确题数/总题数                                                  
       print('总共答题%d,正确%d,错误%d,正确率%.2f%%' %(z,right,wrong,p * 100) )                  
      运行结果:
      9 + 9 = 
请输入答案:18
回答正确
总共答题1,正确1,错误0,正确率100.00%
8 + 7 = 
请输入答案:16
回答错误
总共答题2,正确1,错误1,正确率50.00%
9 + 6 = 
请输入答案:15
回答正确
总共答题3,正确2,错误1,正确率66.67%
10 + 3 = 
请输入答案:13
回答正确
总共答题4,正确3,错误1,正确率75.00%
3 + 0 = 
请输入答案:exit
     
                                                                                          
  1. 小学生算术能力测试系统:
    设计一个程序,用来实现帮助小学生进行百以内的算术练习,
    它具有以下功能:提供10道加、减、乘或除四种基本算术运算的题目;
    练习者根据显示的题目输入自己的答案,
    程序自动判断输入的答案是否正确并显示出相应的信息。
import random                                                                                
                                                                                             
wrong = 0      #答错                                                                           
right = 0      #答对                                                                           
z = wrong + right                                                                            
while z <9:  #建立一个无限循环的程序                                                                    
      op = ['+','-','*','/']                                                                 
      act = random.choice(op)   ##随机执行加、减、乘、除                                                
#两个随机数的范围                                                                                    
      num1 = random.randint(0,10)                                                            
      num2 = random.randint(0,10)                                                            
      if act == '+':                                                                         
           answer = input ('%d + %d = ' %(num1,num2))                                        
           if  int(answer) == num1 + num2:                                                   
               print('回答正确')                                                                 
               right +=1                                                                     
           else:                                                                             
               print('回答错误')   #                                                             
               wrong +=1                                                                     
      elif act == '-':                                                                       
           answer = input ('%d - %d = ' %(num1,num2))                                        
           if  ((int(answer) == num1 - num2) and (num1>num2)) :                              
               print('回答正确')                                                                 
               right +=1                                                                     
           else:                                                                             
               print('回答错误')                                                                 
               wrong +=1                                                                     
      elif act == '*':                                                                       
           answer = input ('%d * %d = ' %(num1,num2))                                        
           if  int(answer) == num1 * num2:                                                   
              print('回答正确')                                                                  
              right +=1         #                                                            
           else:                                                                             
             print('回答错误')                                                                   
             wrong +=1                                                                       
      elif act == '/':                                                                       
           answer = input ('%d / %d = ' %(num1,num2))                                        
           if  (answer == num1 / num2) and (num1!=0,num2!=0):                                
               print('回答正确')                                                                 
               right +=1                                                                     
           else:                                                                             
               print('回答错误')                                                                 
               wrong +=1                                                                     
      z = wrong + right                                                                      
      p = right/z                                                                            
      print('总共答题%d,正确%d,错误%d,正确率%.2f%%' %(z,right,wrong,p * 100))                           

#######列表######
序列是python中最基本的数据结构
列表是最常用的数据类型
数组:存储同一种数据类型的集合 scores = [12,23,45]
列表(打了激素的数组):可以存储任意数据类型
##列表的创建##
创建一个列表,只需要以逗号作为分隔符将不同数据项隔开并使用[ ] 括起来就可以

>>> list = [1,23,2,5]   #创建列表
>>> list
[1, 23, 2, 5]
>>> list1 = [1.3,4,'redhat',True, list]  ##列表可以嵌套,并包含不同类型
>>> list1
[1.3, 4, 'redhat', True,[1, 23, 2, 5]]

##列表的特性##

ervice = [‘http’,‘ftp’,‘ssh’]

1.索引
正向索引和反向索引

>>> list1 = [1.3,4,'redhat',True,list]  ##创建一个列表
>>> list1 
[1.3, 4, 'redhat', True, [1, 23, 2, 5]]
正向索引
>>> list1[0]  ##从左到右索引 第一个元素
1.3
>>> list1[4]
[1, 23, 2, 5]
反向索引
>>> list1[-1] ##从右到左索引 第一个元素
[1, 23, 2, 5]
>>> list1[-3]
'redhat'
  1. 切片
>>> list1 = [1.3,4,'redhat',True,list]  ##创建一个列表
>>> list1 
[1.3, 4, 'redhat', True, [1, 23, 2, 5]]
>>> list1[:]   ##查看所有元素
[1.3, 4, 'redhat', True, [1, 23, 2, 5]]
>>> list1[::-1]  ##列表元素反转
[[1, 23, 2, 5], True, 'redhat', 4, 1.3]
>>> list1[1:]  ##查看除了第一个元素的列表元素
[4, 'redhat', True, [1, 23, 2, 5]]
>>> list1[1:3]   ##查看一到三之间的元素
[4, 'redhat']
>>> list1[:3]  ## 查看前三个元素
[1.3, 4, 'redhat']
>>> list1[3:] ##查看第三个以后的元素
[True, [1, 23, 2, 5]]
>>> 

  1. 重复
>>> list1 
[1.3, 4, 'redhat', True, [1, 23, 2, 5]]
>>> list1 * 3  #将list1重复3次
[1.3, 4, 'redhat', True, [1, 23, 2, 5], 1.3, 4, 'redhat', True, [1, 23, 2, 5], 1.3, 4, 'redhat', True, [1, 23, 2, 5]]
  1. 连接
>>> list1 
[1.3, 4, 'redhat', True, [1, 23, 2, 5]]
>>> list = ['tom',10]
>>> list
['tom', 10]
>>> list + list1
['tom', 10, 1.3, 4, 'redhat', True, [1, 23, 2, 5]]
>>> 

  1. 成员操作符
    in ##判断元素是否属于该列表,属于为True,不属于为False
    not in ##判断元素是否不属于该列表,属于为True,不属于为False
    在这里插入图片描述

1.假定有下面这样的列表:
names = [‘fentiao’, ‘fendai’, ‘fensi’, ‘apple’]
输出结果为:‘I have fentiao, fendai, fensi and apple.’

names = ['fentiao', 'fendai', 'fensi', 'apple']              
name1 = ('I have ' + ' '.join(names[:-1]) + 'and apple')      #用空格连接字符串
print(name1)                                                 
                                                             

2.题目:输入某年某月某日(yyyy-MM-dd),判断这一天是这一年的第几天

##列表元素的增加##
append():追加一个元素到列表

>>> list
['tom', 10]
>>> list.append('westos')
>>> list
['tom', 10, 'westos']

extend():拉伸 追加多个元素到列表中

>>> list
['tom', 10, 'westos']
>>> list.extend(['redhat',10])
>>> list
['tom', 10, 'westos', 'redhat', 10, ]

insert() 在指定索引处插入元素

>>> list
['tom', 10, 'westos', 'redhat', 10, 'redhat', 10]
>>> list.insert(1,'python')
>>> list
['tom', 'python', 10, 'westos', 'redhat', 10, 'redhat', 10]
>>> list.insert(3,'linux')
>>> list
['tom', 'python', 10, 'linux', 'westos', 'redhat', 10, 'redhat', 10]
>>> 

###列表元素的删除##
pop( ) ##默认删除列表的最后一个元素,可以在括号内索引指定删除的元素,删除的元素可以被变量指定接受

>>> list
['tom', 'westos', 'redhat', 10]
>>> list.pop()
10
>>> list.pop()
'redhat'
>>> list.pop(0)
'tom'
>>> a = list.pop(0)   ##pop删除的元素由a接受
>>> a
'westos'
>>> 

remove:删除列表元素,通过指定元素的内容删除并且删除的元素不能被变量接受

>>> list
['tom', 'python', 10, 'linux', 'westos', 'redhat', 10, 'redhat', 10]
>>>  list.remove('linux')
>>> a = list.remove('linux')
>>> a
>>> list
['tom', 'python', 10, 'westos', 'redhat', 10, 'redhat', 10]
>>> list.remove('redhat')
>>> list
['tom', 'python', 10, 'westos', 10, 'redhat', 10]


#从内存中删除一个数据

>> list
['tom', 'python', 10, 'westos', 10, 'redhat', 10]

>>> del list[1]
>>> list
['tom', 10, 'westos', 10, 'redhat', 10]
>>> del list[3]
>>> list
['tom', 10, 'westos', 'redhat', 10]

##列表元素的查看##
count()查看元素在列表中出现的次数

>>> s = ['hello','tom','hello','tony','hello']
>>> s 
['hello', 'tom', 'hello', 'tony', 'hello']
>>> s.count('hello')
3

index(元素,start,stop):查看指定元素的索引值,返回最小索引值(可以指定索引范围)

>>> s 
['hello', 'tom', 'hello', 'tony', 'hello']
>>> s.index('tom')
1
>>> s.index('hello')  ##默认返回最小索引值
0 
>>> s.index('hello',1,4)  ##指定索引范围查看
2

##列表元素的排序##
默认是按照Ascii码进行排序的
sort( ) ##正序
sort (reverse=True) ##倒序
sort(key=str.upper) ##忽略大小写

>>> s = ['Q','a','R','f','e','D','x','G']
>>> s
['Q', 'a', 'R', 'f', 'e', 'D', 'x', 'G']
>>> s.sort()  ##查看排序,默认方式排序
>>> s
['D', 'G', 'Q', 'R', 'a', 'e', 'f', 'x']
>>> s.sort(reverse=True)  ##倒序
>>> s
['x', 'f', 'e', 'a', 'R', 'Q', 'G', 'D']
>>> s.sort(key=str.upper)##忽略大小写
>>> s
['a', 'D', 'e', 'f', 'G', 'Q', 'R', 'x']

随机打乱排序
import random ##安装随机模块
random.shuffle( 列表) ## 打乱列表中的元素顺序

>>> import random
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> random.shuffle(a)##打乱列表中的元素顺序
>>> a
[6, 3, 5, 8, 1, 7, 4, 0, 9, 2]
>>> s = ['Q','a','R','f','e','D','x','G']
>>> s
['Q', 'a', 'R', 'f', 'e', 'D', 'x', 'G']
>>> random.shuffle(s)   ##打乱列表中的元素顺序
>>> s
['a', 'x', 'e', 'D', 'G', 'R', 'Q', 'f']

题目:输入三个整数x,y,z,请把这三个数由小到大输出

##列表元素的修改##
通过索引值,重新赋值

>>> s
['a', 'x', 'e', 'D', 'G', 'R', 'Q', 'f']
>>> s[0]=2   
>>> s
[2, 'x', 'e', 'D', 'G', 'R', 'Q', 'f']
>>> s[5]=10
>>> s
[2, 'x', 'e', 'D', 'G', 10, 'Q', 'f']
>>> s[3]=4 
>>> s
[2, 'x', 'e', 4, 'G', 10, 'Q', 'f']

通过切片赋值:截取一部分元素,然后让一个新的列表代替被截部分

>>> s
[2, 'x', 'e', 4, 'G', 10, 'Q', 'f']
>>> s[:3] = [5,9,10]
>>> s
[5, 9, 10, 4, 'G', 10, 'Q', 'f']

猜你喜欢

转载自blog.csdn.net/weixin_44821839/article/details/90574088
今日推荐