python 练习题(二)

一、针对列表names=[‘金角大王’, ‘黑姑娘’, ‘rain’, ‘eva’, ‘狗蛋’, ‘银角大王’, ‘eva’,’大头’]
1.通过names.index()的方法返回第2个eva的索引值

names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','大头']
print(names.index('eva',4))

2.把以上的列表通过切片的形式实现反转

names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','大头']
names.reverse()
print(names)

第二种:

names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','大头']
print(names[::-1])

3.打印列表中所有下标为奇数的值

names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','大头']
print(names[::2])

4.通过names.index()方法找到第2个eva值 ,并将其改成EVA

names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','大头']
names[(names.index('eva',4))]='EVA'
print(names)

二、编程练习-购物车程序开发 根据以下数据结构:
goods = [ {"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]
实现功能要求:
1.启动程序后,让用户输入工资,然后进入循环,打印商品列表和编号
2.允许用户根据商品编号选择商品
3.用户选择商品后,检测余额是否够,够就直接扣款,并加入购物车,不够就提醒余额不足
4.可随时退出,退出时,打印已购买商品和余额

salary = int(input("请输入你的工资: "))
shoppingmart = []
money=0
items = (["华为手机",3800],
         ["苹果手机",6000],
         ["历史书 ",80])
msg_items = '''
----------商品价格表----------
1. 华为手机    ¥3800
2. 苹果手机    ¥6000
3. 历史书      ¥80
-------------------------------
'''
while True:
    print(msg_items)
    shopindex = int(input("请选择要购买的商品编号(1-3): "))
    if shopindex > 3:
        print("商品编号超出选择范围,请重新选择!")
        continue
    if salary > items[shopindex-1][1]:
     shoppingmart.append(items[shopindex-1])
     money+=int(items[shopindex-1][1])
     salary -= int(items[shopindex-1][1])
     print("您已购买商品是:{name} ".format(name = items[shopindex-1][0]))
     print("您的余额是: ¥", salary)
    else:
        print("对不起,您的余额不足!")
        recharge_ans = input("您想充值吗?(y/n):")
        if recharge_ans == "y":
          recharge = int(input("请输入充值金额: "))
          salary += recharge
          print("你已经充值成功!\n您的余额是: ",salary)
        else:
            break
    decision = input("是否继续购买? (y/n):")
    if decision == "y":
        continue
    else:
        break
print("------------------\n""您的消费明细:",shoppingmart)
print("您一共消费金额: %d元" %money)
print("您的余额是: %d元" %salary)
print("欢迎下次光临!")

三、用你能想到的最少的代码生成一个包含100个key的字典,每个value的值不能一样

key = {}
for i in range(100):
  key.setdefault(i,i)
print(key)

四、{‘k0’: 0, ‘k1’: 1, ‘k2’: 2, ‘k3’: 3, ‘k4’: 4, ‘k5’: 5, ‘k6’: 6, ‘k7’: 7, ‘k8’: 8, ‘k9’: 9}
1.请把这个dict中key大于5的值value打印出来。

list={'k0': 0, 'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6, 'k7': 7, 'k8': 8, 'k9': 9}
for k in list.keys():
     if list[k] > 5:
        print(list[k],end=' ')

2.把题2中value是偶数的统一改成-1

list={'k0': 0, 'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6, 'k7': 7, 'k8': 8, 'k9': 9}
for k in list.keys():
     if list[k] % 2==0:
        list[k]=-1
print(list)

五、请设计一个dict, 存储你们公司每个人的信息,信息包含至少姓名、年龄、电话、职位、工资,并提供一个简单的查找接口,用户按你的要求输入要查找的人,你的程序把查到的信息打印出来
方法一:

info = {
'张三':{"age": 23, "电话": 123453},
'李四':{"age": 23, "电话": 123454 },
'王五':{"age": 23, "电话": 123455},
'赵六':{"age": 23, "电话": 123456},
}
way=input("请输入查询方式,姓名或电话?(n/t):")
#选择查询方式
if way=='n':  #姓名查询
    name=input("请输入查询姓名:")
#有此人,直接输出,没有返回默认值!
    print(info.get(name,'输入错误,没有此人信息'))
elif way=='t':
    tel=int(input("请输入查询电话:"))    #电话查询
    for index,i in enumerate(info):     #使用列表循环
         if tel == info[i]["电话"]:  #根据key,找values
             print(i,info[i])
         elif index==len(info)-1:  #判断索引长度
             print("no people")
else:
    print("输入错误,请重新输入!")

方法二:

info = {
'张三':{"age": 23, "电话": 123453},
'李四':{"age": 23, "电话": 123454 },
'王五':{"age": 23, "电话": 123455},
'赵六':{"age": 23, "电话": 123456},
}
way=input("请输入查询方式,姓名或电话?(n/t)  ")
if way=='n':
    name=input("请输入查询姓名:")
    print(info.get(name,'输入错误,没有此人信息'))
elif way=='t':
    tel=int(input("请输入查询电话:"))
    for index,i in enumerate(info):
        for index1,s in enumerate(info[i].items()):
            if tel in s:
                print(i, info[i])
            elif index == len(info)-1 and index1 == len(info[i].items())-1:  #外层索引是3,内层索引是1
                print("no people")
else:
    print("输入错误,请重新输入!")

练习题--模拟登陆:
用户输入帐号密码进行登陆
用户信息保存在文件内
用户密码输入错误三次后锁定用户,下次再登录,检测到是这个用户也登录不了

#设置密码
f= open('name.txt','a+')
u=input("请设置账号:")
p=input("请设置密码:")
f.write(u)
f.write(p)
f.close()
#读取黑名单
count=0
f1 = open('name.txt','r')
line = f1.readline()
f1.close()
lock=open('black.txt', 'r')
lines=lock.readlines()
while count<3:
    #判断黑名单用户
    lock1 = open('black.txt', 'a+')
    user = input("请输入用户名:")
    passwd = input("请输入密码:")
    if user in lines:
        print("您的账号已锁定,请联系管理员!")
        break
    if user in line and passwd in line : #判断密码正确
        print("输入正确,成功进入!")
        break
    else:
        print("输入错误,请重新输入!")  #判断密码错误
        count += 1
else:
    print("对不起,账户密码已锁定!")   #锁定账号
    lock1.write(user)

1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’]

li=['alex', 'eric', 'rain']
print('_'.join(li))

2.查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素。

li = ["alec", " aric", "Alex", "Tony", "rain"]
for item in li:
    item = item.strip().replace(" ", "")
    if (item.startswith("A") or item.startswith("a")) and item.endswith("c"):
        print(item)
tu = ("alec", " aric", "Alex", "Tony", "rain")
for item in tu:
    item = item.strip().replace(" ", "")
    if (item.startswith("A") or item.startswith("a")) and   item.endswith("c"):
        print(item)
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"}
for item in dic:
    value = dic[item].strip().replace(" ", "")
    if (value.startswith("A") or value.startswith("a")) and value.endswith("c"):
        print(value)

3、写代码,有如下列表,按照要求实现每一个功能
li=[‘alex’, ‘eric’, ‘rain’]
计算列表长度并输出

li=['alex', 'eric', 'rain']
print(len(li))

列表中追加元素“seven”,并输出添加后的列表

li=['alex', 'eric', 'rain']
li.append('seven')
print(li)

请在列表的第1个位置插入元素“Tony”,并输出添加后的列表

li=['alex', 'eric', 'rain']
li.insert(0,'Tony')
print(li)

请修改列表第2个位置的元素为“Kelly”,并输出修改后的列表

li=['alex', 'eric', 'rain']
li[1] = "Kelly"
print(li)

请删除列表中的元素“eric”,并输出修改后的列表

li=['alex', 'eric', 'rain']
li.remove('eric')
print(li)

请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表

li=['alex', 'eric', 'rain']
print(li.pop(1))
print(li)

请删除列表中的第3个元素,并输出删除元素后的列表

print(li.pop(2))
或者
print(li.pop())

请删除列表中的第2至4个元素,并输出删除元素后的列表

li=['Tony','alex', 'eric', 'rain','tom']
del li[1:4]
print(li)
['Tony', 'tom']

请将列表所有的元素反转,并输出反转后的列表

li=['Tony','alex', 'eric', 'rain','tom']
li.reverse()
print(li)
或者
li=['Tony','alex', 'eric', 'rain','tom']
print(li[::-1])

请使用for、len、range输出列表的索引

li=['Tony','alex', 'eric', 'rain','tom']
for index in range(len(li)):
    print(index)

请使用enumrate输出列表元素和序号(序号从100开始)

li=['Tony','alex', 'eric', 'rain','tom']
for index,i in enumerate(li):
    print(index,i)

请使用for循环输出列表的所有元素

li=['Tony','alex', 'eric', 'rain','tom']
for i in li:
    print(i)

4、写代码,有如下列表,请按照功能要求实现每一个功能

li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]

请根据索引输出“Kelly”

li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
print(li[2][1][1])

请使用索引找到’all’元素并将其修改为“ALL”,如:li[0][1][9]…

li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
li[2][2]='ALL'
print(li)

5、有如下变量,请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
请问tu变量中的”k2”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”

答:列表,可以被修改
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
tu[1][2]['k2'].append('Seven')
print(tu)

6、转换
将字符串s = “alex”转换成列表

s = 'alex'
print(list(s))

将字符串s = “alex”转换成元祖

s = 'alex'
print(tuple(s))

将列表li = [“alex”, “seven”]转换成元组

li = ['alex', 'seven']
print(tuple(li))

将元组tu = (‘Alex’, “seven”)转换成列表

li = ['alex', 'seven']
print(list(li))

将列表li = [“alex”, “seven”]转换成字典且字典的key按照10开始向后递增

li = ['alex', 'seven']
count = 10
dic = {}
for i in range(len(li)):
    dic[count]=li[i]
    count+=1
print(dic)
{10: 'alex', 11: 'seven'}

7、元素分类
有如下值集合li=[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。
即:{‘k1’:大于66的所有值, ‘k2’:小于66的所有值}。

li=[11,22,33,44,55,66,77,88,99,90]
dic={'k1':[],'k2':[]}
for i in li:
    if i>66:
        dic['k1'].append(i)
    elif i < 66:
        dic["k2"].append(i)
print(dic)

8、在不改变列表数据结构的情况下找最大值li = [1,3,2,7,6,23,41,243,33,85,56]。(编程题)

print(max(li))

9、在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值的数

li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]。
li = [-100,1,3,2,7,6,142,120,121,140,23,411,99,243,33,85,56]
avg=((min(li))+(max(li)))/2
n=li[0]
for i in li:
    if abs(i-avg)<abs(n-avg):
        n=i
print(n)

10、利用for循环和range输出9 * 9乘法表 。(编程题)

for i in range(1,10):
    for j in range(1,10):
        print("%s*%s=%s" % (j, i, i * j), end=" ")
    print(end='\n')
或者
for i in range(1, 10):
    if i>1:
        print()
    for j in range(1, i+1):
        print('{}x{}={}\t'.format(j, i, i * j), end='')

11、求100以内的素数和。(编程题)

sum=0
for i in range(2,101):
    for j in range(2,i):
        if j%i==0:
            break
        else:
            sum=sum+i
print(sum)

猜你喜欢

转载自blog.51cto.com/13760351/2489862