Linux —— Python(string,list,tuple,set,dict)的使用

String的练习

设计一个程序,帮助小学生练习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('Please input your answer:(q for exit)')
    result = a + b
    if question == str(result):
        print('OK!')
        right += 1
        count += 1
    elif question == 'q':
        break
    else:
        print('Failed!')
        count += 1
percent = right / count
print('测试结束,共回答%d道题,正确个数为%d,正确率为%.2f%%' %(count,right,percent*100))

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

str = input('Please input str:')
delete = input('Please input del part:')
for i in str:
    for j in delete:
        if j == i:
            str1 = str.replace(j,'')
print(str1)

list

# list列表
s = ['lili',1.2,True]
print(s)
print(type(s))
# list嵌套
s1 = ['lili',1.2,True,[1,2,3,4]]
print(s1)
print(type(s1)

service = ['http','ssh','ftp']
# index
print(service[0])
print(service[-1])
# slide 切片
print(service[::-1]) # 反转
print(service[1:])
print(service[:-1])
# repeat 重复
print(service * 3)
# link 连接
service1 = ['mysql','firewalld']
print(service + service1)
# in/ not in
print('firewalld' in service)
print('firewalld' in service1)
print('firewalld' not in service1)
# for
for se in service:
    print(se)

service2 = [['http','80'],['ssh','22'],['ftp','21']]
# index
print(service2[0][1])
print(service2[-1][1])
# slide 切片
print(service2[:][1])

增加

service = ['http','ssh','ftp']
#1 添加
print(service + ['firewalld'])
#2 append追加
service.append('firewalld')
print(service)
#3 extend拉伸
service.extend(['mysql','firewalld'])
print(service)
#4 insert插入[在指定地方]
service.insert(1,'samba')
print(service)

删除

# service = ['http','ssh','ftp']
# #1 pop,默认弹出最后一个
# a = service.pop()
# b = service.pop(0)
# print(a)
# print(b)
# print(service)
#2 remove 移除选中
service1 = ['http','ssh','ftp']
a = service1.remove('ssh')
print(a)
print(service1)
#3 del 从内存中已经删除,已经不占用空间
# print(service1)
# del service1
# print(service1)

修改

service = ['http','ssh','ftp']
# 通过索引方式重新赋值
service[0] = 'mysql'
print(service)
# 通过切片方式
print(service[:2]) #除去索引为2的值
service[:2] = ['samba','nfs'] # 将索引值2前的替换掉
print(service)

查看

# look 查看
service = ['http','ssh','ftp','http']
# count
print(service.count('http')) # 查看http出现了几次
# 查看指定元素的索引值
print(service.index('ssh'))
print(service.index('http',0,9))

排序

# 按照ASCLL码排序
service = ['http','ssh','ftp','http']
service.sort()
print(service)
#
import random
li = list(range(10))
print(li)
random.shuffle(li) # 使用random.shuffle()打乱顺序
print(li)

练习 

示例1:

假定有下面这样的列表:
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])
# ','.join(names[:-1]):除最后一项外其余,中间通过,隔开
# name[-1]: 最后一位

示例2: 

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

users = ['root', 'westos']
passwd = ['123', '456']
count = 0
while count < 3:  # 三次机会
    inuser = input('Username:')
    inpasswd = input('Password:')
    count += 1
    if inuser in users: # 如果用户存在
        index = users.index(inuser) # 找到对应索引值
        password = passwd[index] # 通过用户名对应索引值来寻找对应的密码
        if inpasswd == password: # 如果输入的密码与该用户名对应的密码一致时
            print('%s login success!' %inuser)
            break
        else:
            print('%s login failed: password not correct!' %inuser)
    else: # 如果用户不存在
        print('User %s not exist!' %inuser)
else: # 超过三次机会,则没有机会
    print('no more chance!')

示例3:

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

str = input('Please input str:')
delete = input('Please input del part:')
for i in str:
    if i in delete:
        str = str.replace(i,'')
print(str)

示例4: 

1、后台管理员只有一个用户:admin,密码:admin
2、当管理员登陆成功后,可以管理前台会员信息
3、会员信息管理包括:
        添加会员信息
        删除会员信息
        查看会员信息
        退出

print('管理员登陆'.center(50,'*'))
inUser = input('Username:')
inPasswd = input('Password:')
user = ['root','westos']
passwd = ['123','456']
if inUser == 'admin' and inPasswd == 'admin':
    print('管理员登陆成功!')
    print('会员信息管理'.center(50,'*'))
    while True:
        print('''
          目录
       1. 添加会员信息 
       2. 删除会员信息 
       3. 查看会员信息 
       4. 退出
       ''')
        choice = input('Please input your choice:')
        if(choice == '1'):
            print('添加会员信息'.center(50,'*'))
            addUser = input('添加会员名:')
            if addUser in user:
                print('会员%s已存在!'%addUser)
            else:
                addPasswd = input('Password:')
                user.append(addUser)
                passwd.append(addPasswd)
                print('添加会员%s成功!'%addUser)
        elif(choice == '2'):
            print('删除会员信息'.center(50,'*'))
            delUser = input('删除会员名:')
            delIndex = user.index(delUser)
            user.remove(delUser)
            passwd.pop(delIndex)
            print('删除会员%s成功!'%delUser)
        elif(choice == '3'):
            print('查看会员信息'.center(50,'*'))
            print('\t会员名\tPassword')
            userCount = len(user)   # 通过len()函数测量user长度
            for i in range(userCount):
                print('\t%s\t%s' %(user[i],passwd[i]))
        elif(choice == '4'):
            print('退出'.center(50,'*'))
            exit()
        else:
            print('Please check your input!')
else:
    print('管理员登陆失败!')

python内置方法 

min(3,4)                # min()求最小值
max(3,4)                # max()求最大值
sum(range(1,101,2))     # sum()方法求和,range(start,stop,step)函数整数列表
enumerate('hello')      
# enumerate(sequence, [start=0])可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

示例1: 

for i,v in enumerate('hello'):
    print(i,v)   # 
(索引值,对应的value值)

示例2:

s1 = 'abc'
s2 = '123'
for i in zip(s1,s2):
    print(i)
for i in zip(s1,s2):
    print(''.join(i))

tuple元组 

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可

tup1 = ()    # 创建空元组
tup1 = (50,) # 元组中只包含一个元素时,需要在元素后面添加逗号

t = (1,2.3,True,'westos')
print(type(t))   # The type is tuple
t[0] = 2
print(t)

# 元组不支持赋值
# Traceback (most recent call last):
#   File "D:/Pycharm/Project/day03/03_tuple.py", line 3, in <module>
#     t[0] = 2
# TypeError: 'tuple' object does not support item assignment

元组查看 

 元组可以使用下标索引来访问元组中的值

tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]

元组修改

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')

# 以下修改元组元素操作是非法的。
# tup1[0] = 100

# 创建一个新的元组
tup3 = tup1 + tup2
print tup3

元素删除

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元素

tup = ('physics', 'chemistry', 1997, 2000)
print(tup)
del tup
print(tup)

基本用法

users = ('westos','root','redhat')
password = ('123','456','789')
# index切片
print(users[0])
print(users[-1])
print(users[1:])
print(users[::-1])
# repeat重复
print(password * 2)
# link 连接
print(users + ('linux','python'))
# in/not in
print('westos' in users)
print('westos' not in users)
# for
for user in users:
    print(users)
for index,user in enumerate(users):
    print(index,user)
for user,password in zip(users,password):
    print(user,':',password)

t = (1,1.2,True,'westos')
print(t.count('westos'))  # westos出现的数量
print(t.index(1))         # 寻找1所在的索引值

求平均成绩(去除最大值和最小值) 

scores = (100,89,75,78,65)
scorelist = list(scores)
scorelist.sort()
t = tuple(scorelist)
print(t)

minscore,*middlescore,maxscore = t
# *表示接收多个值
print(minscore)
print(middlescore)
print(maxscore)
print(minscore,*middlescore,maxscore)
# 求平均成绩
averageScore = sum(middlescore) / len(middlescore)
print(averageScore)

set集合

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等,不支持索引、切片、重复

s = {1,2,3,1,2,3,4,5}
print(s)
print(type(s))

s1 = {1}
print(s1)
print(type(s1))

s2 = {}
print(type(s2))

s3 = set([])
print(type(s3))

循环遍历

s = {1,2,3}
print(1 in s)
print(1 not in s)

# for i in s:
#     print(i,end='|')

for i,v in enumerate(s):
    print(i,v)

增添和删除

s = {6,7,8,9}   # 增加单个元素
s.add(1)
print(s)

s.update({5,3,2})  # 增加多个元素
print(s)

s.pop()
print(s)   # 随意弹出元素

s.remove(5) # 移除特定元素
print(s)

交集、差集、并集和对等差分

# 交集、并集、差集
s1 = {1,2,3}
s2 = {2,3,4}

# 并集:两个集合所有元素
print('并集:',s1.union(s2))
print('并集:',s1 | s2)
# 交集:两个集合相交的元素
print('交集:',s1.intersection(s2))
print('交集:',s1 & s2)
# 差集
print('差集:',s1.difference(s2)) # s1-(s1&s2)
print('差集:',s2.difference(s1)) # s2-(s1&s2)
# 对等差分:并集-差集
print('对等差分:',s1.symmetric_difference(s2))
print('对等差分:',s1^s2)

超集和子集 

s3 = {1,2}
s4 = {1,2,3}
print(s3.issuperset(s4))  # s3是不是s4的超集
print(s3.issubset(s4))    # s3是不是s4的子集

set练习 

明明想在学校中申请一些同学做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1~1000之间的随机整数(N <= 1000),N是用户输入的,
对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的同学从小到大排序,按照排好的顺序去找同学做调查,请你协助明明
完成去重和排序工作

import random
s = set([]) # 先注册一个set空集合
for i in range(int(input('Num:'))):
    s.add(random.randint(1,1001))
print(s)    # 去重后集合内容
print(sorted(s)) # 排序后

字典 

dict() 函数用于创建一个字典

dict()   # 传入空字典
dict(a='a', b='b', t='t') # 传入关键字
dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 映射函数方式来构造字典
dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代对象方式来构造字典

字典的简单使用

users = ['user1','user2']
passwds = ['123','456']
print(zip(users))
print(list(zip(users,passwds)))
print(dict(zip(users,passwds)))

s = {}
print(type(s))
# 字典是通过[key,value]形式,key只有一个,但value可有多个
s1 = {
    'linux':[100,99,88],
    'westos':[190,543,345]
}
print(s1)
print(type(s1))

d = dict()
print(d)
print(type(d))

student = {
    'westos':{
        'id':'03113009',
        'age':'18',
        'score':90,
    },
    'redhat':{
        'id':'03113010',
        'age':'20',
        'score':'100'
    }
}
print(student['westos']['id'])

print({}.fromkeys({'1','2'},000000))

d = {
    '1':'a',
    '2':'b'
}
# 不支持索引,切片会报错
# print(d[0])
print('1' in d)
print('1' not in d)
for key in d:
    print(key)
    print(key,d[key])

增改

services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
# 不存在的增加(增加一个元素)
services['mysql'] = 3306
print(services)
# 已存在的修改
services['http'] = 443
print(services)
# 更新多个元素
services_backup = {
    'http':443,
    'tomcat':8080,
    'http':8080
}
services.update(services_backup)
print(services)

services.update(flask=9000,http=8000)
print(services)
# setdefault添加key值,如果key存在则不改变,若不存在,则添加
services.setdefault('http',9090)
print(services)
services.setdefault('oracle',44575)
print(services)

删除

services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
# del services['http']
# print(services)

# item = services.pop('http')
# print(item)
# print(services)
# # 如果key不存在,直接报错
# # 如果key存在,删除key和value键值对,并且返回key对应的value值

# item = services.popitem()
# # 删除最后一个key/value值
# print('The last key-value is:',item)
# print(services)

# 全部删除,清空字典
services.clear()
print(services)

查找

services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
# 显示所有的key
print(services.keys())
# 显示所有的value
print(services.values())
# 显示所有的item
print(services.items())
# 查找对应key的value值
print(services['http'])
# 如果key不存在,默认返回none
# 如果key不存在,但是有default值,就会返回该default值(可为value值,可为报错信息)
print(services.get('https'))
print(services.get('https',443))
# 遍历字典,注意只写services时,只访问它的key值,若key和value都访问,此时需要services.items
for k,v in services.items():
    print('key:',k,'value:',v)
for k in services:
    print('key:',k,'value:',services[k])

1. 随机生成100个卡号
    卡号以6102009开头,后面3位依次是(001,002,003...100),
2. 生成关于银行卡号的字典,默认每个卡号的初始密码位"redhat"
3. 输出卡号和密码信息,格式如下:
卡号                 密码
6102009001          000000

num = []
for i in range(100):
    num.append('6102009%.3d' %(i+1))
info = {}.fromkeys(num,'redhat')     # 创建一个新字典
print('卡号\t\t\t\t密码')
for k,v in info.items():
    print(k,'\t\t\t\t',v)

练习

示例1:

数字重复统计
1). 随机生成1000个整数
2). 数字的范围[20,100]
3). 升序输出所有不同的数字及其每个数字重复的次数

import random
nums = []
for item in range(1000):
    nums.append(random.randint(20,100))
print(nums)
sorted_nums = sorted(nums)
nums_dict = {}
for num in sorted_nums: # num为sorted_nums中的一个值
    if num in nums_dict: # 如果这个值在nums_dict字典中
        nums_dict[num] += 1
    else:
        nums_dict[num] = 1
print(nums_dict)

运行结果: 

{20: 10, 21: 12, 22: 11, 23: 15, 24: 13, 25: 9, 26: 13, 27: 13, 28: 13, 29: 11, 30: 9, 31: 11, 32: 14, 33: 15, 34: 19, 35: 10, 36: 17, 37: 12, 38: 16, 39: 11, 40: 10, 41: 13, 42: 12, 43: 9, 44: 9, 45: 10, 46: 13, 47: 10, 48: 11, 49: 8, 50: 13, 51: 17, 52: 17, 53: 19, 54: 14, 55: 15, 56: 14, 57: 8, 58: 9, 59: 10, 60: 7, 61: 15, 62: 15, 63: 16, 64: 9, 65: 20, 66: 7, 67: 8, 68: 11, 69: 10, 70: 12, 71: 6, 72: 12, 73: 16, 74: 9, 75: 11, 76: 15, 77: 14, 78: 13, 79: 11, 80: 9, 81: 18, 82: 12, 83: 16, 84: 14, 85: 11, 86: 13, 87: 14, 88: 12, 89: 16, 90: 13, 91: 17, 92: 11, 93: 8, 94: 13, 95: 16, 96: 7, 97: 13, 98: 12, 99: 14, 100: 9}

示例2: 

重复的单词:此处认为单词之间以空格为分隔符,并且不包含,和.
    # 1. 用户输入一句英文句子
    # 2. 打印出每个单词及重复的次数
    ”hello java hello python“
# hello  2
# java   1
# python 1

依次循环遍历列表
    如果列表元素不在字典的key中,将元素作为key 1作为value值
    如果列表元素在字典的key中,直接更新元素value值,在原有基础上加1

statement = input('Please enter a sentence in English:')
statements = statement.split(' ')		# 以空格为分隔符,按照空格分离字符串,形成列表
words = {}				                # 注册字典
for i in statements:			        # 遍历列表
    if i == ',' or i == '.':		    # 判断出现,和.时跳出此次循环
        continue
    count = statements.count(i)		    # 统计次数
    words[i] = count                    # key=单词,value=重复的次数,添加到字典中,字典中如果key值存在则更新value值,所以生成的字典中key不会重复。
print(words)				            # 打印字典

示例3:

栈的工作原理
    入栈 s.append()
    出栈 s.pop()
    栈顶元素 s[-1]
    栈的长度 len(s)
    栈是否为空 长度是否为0

stack = []
while True:
    print('''
        栈操作
    1.  入栈
    2.  出栈
    3.  栈顶元素
    4.  栈的长度
    5.  栈是否为空
    6.  退出
        ''')
    choice = input('请输入选择:')
    if choice == '1':
        inStack = input('入栈元素:')
        stack.append(inStack)
        print('元素%s入栈成功!' %inStack)
    elif choice == '2':
        # 判断是否空栈
        if not stack:
            print('栈为空')
        else:
            outStack = stack.pop()
            print('元素%s出栈成功!' %outStack)
    elif choice == '3':
        if len(stack) == 0:
            print('栈为空')
        else:
            print('栈顶元素为%s' %(stack[-1]))
    elif choice == '4':
        print('栈的长度为:%s' %(len(stack)))
    elif choice == '5':
        if len(stack) == 0:
            print('栈为空')
        else:
            print('栈不为空')
    elif choice == '6':
        print('退出')
        break
    else:
        print('请输入正确的选择')

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值