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('管理员登录失败!')