1.15 ---python-字符串,列表

1、字符串

1)定义字符串

变量='内容'

如何打印单引号'

转移字符 \’
双引号的使用

a = 'hello'
b = 'what\'s up'
c = "what's up"
print(a)
print(b)
print(c)

2)字符串的特性

一、索引----类似于数组索引

s = 'hello'
print(s[0])
print(s[1])

二、切片

切片的规则: s[start:end:step]

print(s[0:3]) # 切片的规则:s[start:end:step] 从start开始到end-1结束,步长:step
print(s[0:4:2])

#显示所有字符
print(s[:])
#显示前3个字符
print(s[:3])
#对字符串倒叙输出
print(s[::-1])
#除了第一个字符以外,其他全部显示
print(s[1:])

三、重复

print(s * 5)

四、连接

print(s + 'world')

五、成员操作符

查看成员是否在字符串中,返回布尔型

print('h' in s)

六、for循环(迭代)

for i in s:
    print(i)

练习1:回文数的判断

num = input('请输入一个数字:')
if num == num[::-1]:
    print('%s是回文数' % (num))
else:
    print('%s不是回文数' % (num))

实验结果

请输入一个数字:121
121是回文数

请输入一个数字:1113
1113不是回文数

3)字符串的一些函数

一、判断字符串里每个元素是否为什么类型,一旦有一个元素不满足,就返回False。

print('123'.isdigit())                 ##是否为数字
print('123abc'.isdigit())         


print('123'.isalpha())               ##是否为字母
print('aaa'.isalpha())


print('hello123'.isalnum())        ##是否为字母或者数字


print('Hello'.istitle())                ##是否为标题:首字母大写
print('HeLlo'.istitle())

大小写的判断

大写:upper
print('hello'.upper())                 ###转换为大写
print('hello'.isupper())              ####判断是否大写
print('HELLO'.lower())             ####转换为小写
print('HELLO'.islower())           ####判断是否为小写

练习1:判断变量名是否合理

变量名是否合法:
 1.变量名可以由字母,数字或者下划线组成
 2.变量名只能以字母或者下划线开头
s = 'hello@'

1.判断变量名的第一个元素是否为字母或者下划线 s[0]
2.如果第一个元素符合条件,判断除了第一个元素之外的其他元素s[1:]

逆向思维

varname = input('请输入变量名')
if varname[0] != '_' and not varname[0].isalpha() :
    print('变量名不合理')
    exit()
for i in varname:
    if i != '_' and not i.isalnum():
        print('变量名不合理')
        exit()
else:
    print('变量名合理')

正向思维

while True:
    s = input('变量名:')
    if s == '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)


二、匹配字符串开头结尾的字母

匹配开头
匹配结尾

测试

# filename = 'hello.loggg'
#
# if filename.endswith('.log'):
#     print(filename)
# else:
#     print('error filename')

url1 = 'file:///mnt'
url2 = 'ftp://172.25.254.250/pub'
url3 = 'https://172.25.254.250/index.html'

if url3.startswith('http://'):
    print('获取网页')
else:
    print('未找到网页')

三、去除字符串两边的内容。  ---去除的是广义的空格,包含换行和\t

去除两边的空格

去除右边的空格

去除左边的空格

去除左右两边的h字符

测试

In [1]: s = '      hello      '                                         

In [2]: s                                                               
Out[2]: '      hello      '

In [3]: s.strip()                                                       
Out[3]: 'hello'

In [4]: s.rstrip()                                                      
Out[4]: '      hello'

In [5]: s.lstrip()                                                      
Out[5]: 'hello      '

In [6]: s = '\nhello\t\t'        

In [8]: s = 'helloh'                                                    

In [9]: s.strip('h')                                                    
Out[9]: 'ello'

In [10]: s.rstrip('h')                                                  
Out[10]: 'hello'

In [11]: s.lstrip('he')                                                 
Out[11]: 'lloh'


"""
# s = '\nhello\t\t'
# print(s)
# print(s.strip())

四、字符串的搜索和替换

搜索

测试

s = 'hello world hello'

#find找到子串,并返回最小的索引
print(s.find('hello'))
print(s.find('world'))
#rfind找到子串,并返回最大索引
print(s.rfind('hello'))

替换

测试

#替换字符串中所有的'hello'为'westos'
print(s.replace('hello','westos'))

五、字符串的对齐

居中对齐

左对齐
右对齐

测试

print('学生管理系统'.center(30))
print('学生管理系统'.center(30,'*'))
print('学生管理系统'.ljust(30,'*'))
print('学生管理系统'.rjust(30,'*'))
print('学生管理系统'.rjust(30,'@'))

六、字符串的统计

个数统计

print('hello'.count('l'))
print('hello'.count('ll'))

长度统计

print(len('hello'))

七、字符串的分离和连接

分离

s = '172.25.254.250'
s1 = s.split('.')
print(s1)
print(s1[::-1])

date = '2019-01-15'
date1 = date.split('-')
print(date1)

连接

#通过指定的字符进行连接
print(''.join(date1))
print('/'.join(date1))

练习1:测试学生是否迟到

给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个
字符:
'A' : Absent,缺勤
'L' : Late,迟到
'P' : Present,到场
如果一个学生的出勤纪录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),
那么这个学生会被奖赏。
你需要根据这个学生的出勤纪录判断他是否会被奖赏。
示例 1:
输入: "PPALLP"
输出: True
示例 2:
输入: "PPALLL"
输出: False

代码

方法一:

# s = input('输入考勤记录:')
# # if s.count('A') <= 1 and s.count('LLL') == 0:
# #     print('True')
# # else:
# #     print('False')
#
# print(s.count('A') <= 1 and s.count('LLL') == 0)

方法二:

record = input('请输入学生的记录')
print(record.count('A') <= 1  and record.count('LLL') ==0 )

练习2:字符串删除

- 题目描述:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例
如,输入”They are students.”和”aeiou”,
则删除之后的第一个字符串变成”Thy r stdnts.”
- 输入描述:
每个测试输入包含2个字符串
- 输出描述:
输出删除后的字符串
- 示例1:
```
输入
    They are students.
    aeiou
输出
    Thy r stdnts.

方法一:

s1=input('第一个字符串')
s2=input('第二个字符串')
# for i in s1:
#     if not i in s2:
#         print(i,end='')

print(''.join(i for i in s1 if i not in s2))

第一个字符串They are student
第二个字符串aeiou
Thy r stdnt

方法二:

s1 = input('s1:')
s2 = input('s2:')

for i in s1:
    if i in s2:
        s1 = s1.replace(i,'')

print(s1)

练习3:

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

练习4:

设计一个程序,帮助小学生练习10以内的加法
        详情:
                - 随机生成加法题目;
                - 学生查看题目并输入答案;
                - 判别学生答题是否正确?
                - 退出时, 统计学生答题总数,正确数量及正确率(保
留两位小数点);

练习5:

 小学生算术能力测试系统:
设计一个程序,用来实现帮助小学生进行百以内的算术练习,它具有以
下功能:
提供10道加、减、乘或除四种基本算术运算的题目;
练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否
正确并显示出相应的信息。

2、列表

1)列表的介绍

数组:存储同一种数据类型的集合 scores = [1,2,3]
列表:可以存储任意数据类型的集合

#列表里:可以存储不同的数据类型
li = [1,1.2,True,'hello']
print(li)
print(type(li))

#列表里也可以嵌套列表(列表:本身也是一种数据类型)
li1 = [1,1.2,True,'hello',[1,2,3,4,5]]
print(li1)
print(type(li1))

测试

In [1]: name1 = 'tom'                                                   

In [2]: name2 = 'Tony'                                                  

In [3]: name3 = 'coco'                                                  

In [4]: name1                                                           
Out[4]: 'tom'

In [5]: name2                                                           
Out[5]: 'Tony'

In [6]: name3                                                           
Out[6]: 'coco'

In [7]:                                                                 

In [7]: name = ['tom','Tony','coco']                                    

In [8]:                                                                 

In [8]: name                                                            
Out[8]: ['tom', 'Tony', 'coco']

In [9]: type(name)                                                      
Out[9]: list

In [10]:  """
 

2)列表的特性


一、索引

正向索引

print(service[0])

反向索引

print(service[-1])

二、切片

print(service[1:])

反转

print(service[:-1])
print(service[::-1])

三、重复

print(service * 3)

四、连接

service1 = ['mysql','firewalld']
print(service + service1)

五、成员操作符

print('firewalld' in service)
print('firewalld' in service1)

六、for循环遍历

for se in service:
    print(se)

七、列表里嵌套列表

service2 = [['http',80],['ssh',22],['ftp',21]]

索引

print(service2[1][1])
print(service2[-1][1])

切片

print(service2[:][1])
print(service2[:-1][0])
print(service2[0][:-1])


练习1:判断月份为那个季节

方法一:

s1 = [[3, 4, 5, '春季'], [6, 7, 8, '夏季'], [9, 10, 11, '秋季'], [12, 1, 2, '冬季']]
month = int(input('请输入月份'))
for i in s1:
    if month in i:
        print(s1[s1.index(i)][3])

方法二:

# month = int(input('Month:'))
# if month in [3,4,5]:
#     print('春季')
# elif month in [6,7,8]:
#     print('夏季')
# elif month in [9,10,11]:
#     print('秋季')
# elif month in [12,1,2]:
#     print('冬季')
# else:
#     print('输入不合法')

练习2:假定有下面的列表:
    names = ['fentiao','fendai','fensi','apple']
    输出结果为:'I have fentiao, fendai, fensi and apple.'

names = ['fentiao','fendai','fensi','apple']

print('I have ' + ','.join(names[:-1]) + ' and ' + names[-1])

3)列表的增加,删除,修改,查看

增加

一、直接添加

print(service + ['firewalld'])

二、append追加一个元素到列表中

service.append('firewalld')
print(service)

三、extend拉伸:追加多个元素到列表中

service.extend(['mysql','firewalld'])
print(service)

四、insert:在指定索引位置插入元素

service.insert(1,'samba')
print(service)

删除

一、pop弹出

测试

In [12]: service = ['http','ssh','ftp']                                 

In [13]:                                                                

In [13]: service.pop()                                                  
Out[13]: 'ftp'

In [14]: service                                                        
Out[14]: ['http', 'ssh']

In [15]: service.pop()                                                  
Out[15]: 'ssh'

In [16]: service                                                        
Out[16]: ['http']

In [17]: service.pop()                                                  
Out[17]: 'http'

In [18]: service                                                        
Out[18]: []

In [19]: service.pop()                                                  
------------------------------------------------------------------------
IndexError                             Traceback (most recent call last)
<ipython-input-19-d8278ea86206> in <module>
----> 1 service.pop()

IndexError: pop from empty list

二、remove:删除指定元素

service = ['http','ssh','ftp']

# a = service.remove('ssh')
# print(service)      
# print(a)                 ##不存在

remove 和 pop的区别

pop后的元素可以存到变量,而remove后的元素不存在

三、del关键字 从内存中删除

print(service)
del service
print(service)


修改

service = ['http','ssh','ftp']

一、通过索引,重新赋值

service[0] = 'mysql'
print(service)

二、通过切片

print(service[:2])
service[:2] = ['samba','ldap']
print(service)

查找

service = ['ftp','http','ssh','ftp']

一、查看出现的次数

print(service.count('ftp'))

二、查看指定元素的索引值(可以指定索引范围查看)

print(service.index('ssh'))
print(service.index('ftp',0,3))

4)列表的排序

sort命令

# service = ['ftp','http','ssh','ftp']
# service.sort()
# print(service)

测试

In [24]: names = ['alice','bob','harry','Borry']                        

In [25]: names.sort()                                           ##按照ascall码排序                                       

In [26]: names                                                          
Out[26]: ['Borry', 'alice', 'bob', 'harry']

In [27]: names.sort(key=str.lower)              ##按照小写字母排序,不分大小写,                             

In [28]: names                                                          
Out[28]: ['alice', 'bob', 'Borry', 'harry']

In [29]: names.sort(key=str.upper)                                      

In [30]: names                                                          
Out[30]: ['alice', 'bob', 'Borry', 'harry']

In [31]: 

生成列表

测试

import random
li=range(10)
print(type(li))
li=list(li)
print(type(li))

实验结果

<class 'range'>        ##输出为range类
<class 'list'>            ##输出为list变量

将原有的列表打乱

random.shuffle(li)
print(li)

作业1:

#  - 添加用户:
#     1). 判断用户是否存在?
#     2).  如果存在, 报错;
#     3).  如果不存在,添加用户名和密码分别到列表中;
#
# - 删除用户
#     1). 判断用户名是否存在
#     2). 如果存在,删除;
#     3). 如果不存在, 报错;
# - 用户登陆
# - 用户查看
#     1) 通过索引遍历密码
# - 退出

1.系统里面有多个用户,用户的信息目前保存在列表里面
    users = ['root','westos']
    passwd = ['123','456']
2.用户登陆(判断用户登陆是否成功
    1).判断用户是否存在
    2).如果存在
        1).判断用户密码是否正确
        如果正确,登陆成功,推出循环
        如果密码不正确,重新登陆,总共有三次机会登陆
    3).如果用户不存在
    重新登陆,总共有三次机会

"""

自己的方法:
userlist = ['root', 'student']
passwdlist = ['123', '456']
while True:
    opt = input('请输入你要进行的操作,添加用户,删除用户,用户登陆,用户查看:')
    if opt == '添加用户':
        adduser = input('请输入需要添加的用户')
        if adduser in userlist:
            print('用户已经存在')
            continue
        else:
            userlist=userlist + [adduser]
            passwdlist.append(input('请输入添加用户的密码'))
    if opt == '删除用户':
        deluser = input('请输入需要删除的用户')
        if not deluser in userlist:
            print('删除用户不存在')
            continue
        else:
            passwdlist.pop(userlist.index(deluser))
            userlist.remove(deluser)
    if opt == '用户查看':
        checkuser = input('请输入查看的用户')
        if checkuser in userlist:
            print('%s的密码为%s' % (checkuser, passwdlist[userlist.index(checkuser)]))
        else:
            print('用户不存在')
    if opt == '用户登陆':
        num = 0
        while True:
            user = input('请输入用户名')
            if not user in userlist:
                print('用户不存在')
                num += 1
                if num <= 2:
                    continue
                else:
                    print('登陆失败')
                    break

            userpasswd = input('请输入密码')
            if not userpasswd in passwdlist:
                print('密码错误')
                num += 1
                if num <= 2:
                    continue
                else:
                    print('登陆失败')
                    break
            else:
                print('登陆成功')
                break

作业2:

设计一个程序,帮助小学生练习10以内的加法
        详情:
                - 随机生成加法题目;
                - 学生查看题目并输入答案;
                - 判别学生答题是否正确?
                - 退出时, 统计学生答题总数,正确数量及正确率(保
留两位小数点);

import random

# count = 0
# right = 0
#
# while True:
#     a= random.randint(0,9)
#     b= random.randint(0,9)
#     print('%d + %d = ' %(a,b))
#     question = input('请输入您的答案:(q退出)')
#     result = a + b
#     if question == str(result):
#         print('回答正确')
#         right += 1
#         count += 1
#     elif question == 'q':
#         break
#     else:
#         print('回答错误')
#         count += 1
#
# percent = right / count
# print('测试结束,共回答%d道题,正确个数为%d,正确率为%.2f%%' %(count,right,percent * 100))

作业3:

小学生算术能力测试系统:
设计一个程序,用来实现帮助小学生进行百以内的算术练习,它具有以
下功能:
提供10道加、减、乘或除四种基本算术运算的题目;
练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否
正确并显示出相应的信息。

提示

op = ['+','-','*','/']
s = random.choice(op)
print(s)

代码

import random

count = 0
right = 0

while True:
    a = random.randint(0, 9)
    # 作为除数
    b = random.randint(1, 9)
    op = ['+', '-', '*', '//']
    d = random.choice(op)
    print('%d %s %d = ' % (a, d, b))
    question = input('请输入您的答案: (q退出)')
    result1 = a + b
    result2 = a - b
    result3 = a * b
    result4 = a // b
    if question == str(result1):
        print('回答正确')
        right += 1
        count += 1
    elif question == str(result2):
        print('回答正确')
        right += 1
        count += 1
    elif question == str(result3):
        print('回答正确')
        right += 1
        count += 1
    elif question == str(result4):
        print('回答正确')
        right += 1
        count += 1
    elif question == 'q':
        break
    else:
        print('回答错误')
        count += 1

percent = right / count
print('测试结束,共回答%d道题,正确个数为%d,正确率为%.2f%%'
          % (count, right, percent * 100))

作业4:

# 1. 后台管理员只有一个用户: admin, 密码: admin
# 2. 当管理员登陆成功后, 可以管理前台会员信息.
# 3. 会员信息管理包含:
#       添加会员信息
#       删除会员信息
#       查看会员信息
#       退出
 - 添加用户:
    1). 判断用户是否存在?
    2).  如果存在, 报错;
    3).  如果不存在,添加用户名和密码分别到列表中;

- 删除用户
    1). 判断用户名是否存在
    2). 如果存在,删除;
    3). 如果不存在, 报错;

print('管理员登录'.center(50,'*'))
inuser = input('UserName:')
inpasswd = input('Password:')

#所有会员用户名
users = ['root','westos']
#所有会员密码
passwds = ['123','456']

if inuser == 'admin' and inpasswd == 'admin':
    print('管理员登录成功!')
    print('会员管理'.center(50,'*'))
    while True:
        print("""
            操作目录
    1.  添加会员信息
    2.  删除会员信息
    3.  查看会员信息
    4.  退出
    """)
        choice = input('请选择你的操作:')
        if choice == '1':
            print('添加会员信息'.center(50,'*'))
            AddUser = input('添加会员名:')
            if AddUser in users:
                print('用户%s已经存在' %(AddUser))
            else:
                AddPasswd = input('密码:')
                users.append(AddUser)
                passwds.append(AddPasswd)
                print('添加用户%s成功!' %AddUser)
        elif choice == '2':
            print('删除会员信息'.center(50,'*'))
            DelUser = input('删除会员名:')
            DelIndex = users.index(DelUser)
            users.remove(DelUser)
            passwds.pop(DelIndex)
            print('删除会员%s成功!' %DelUser)
        elif choice == '3':
            print('查看会员信息'.center(50,'*'))
            print('\t用户名\t密码')
            UserCount = len(users)
            for i in range(UserCount):
                print('\t%s\t%s' %(users[i],passwds[i]))
        elif choice == '4':
            exit()
        else:
            print('请输入正确的选择')
else:
    print('管理员登录失败!')

猜你喜欢

转载自blog.csdn.net/qq_41627390/article/details/86498270