练习题解答(一)

2018-08-1116:12:58

一、字符串

1、如果判断name变量量对应的值前四位"l"出现⼏次,并输出结果
name = "aleX leNb"
print(name.count("l", 0, 4))    #count后面的两个参数是判断开始和结束位置的  顾头不顾尾

2、从name变量量对应的值中找到"N"对应的索引(如果找不不到则报错),并输出结果
name = "aleX leNb"
print(name.index("N"))

3、从name变量量对应的值中找到"N"对应的索引(如果找不不到则返回-1)输出结果
name = "aleX leNb"
print(name.find("N"))

4、从name变量量对应的值中找到"X le"对应的索引,并输出结果
name = "aleX leNb"
print(name.find("X le")     # 是找到的第一个字母的位置

5、通过对s切⽚片形成新的字符串串s3,s3 = "1345"
s = "123a4b5c"
s3 = s[0:7:2]
print(s3)       #1345

6、通过对s切⽚片形成字符串串s5,s5 = "c"
s = "123a4b5c"
s5 = s[-1:-2:-1]
s3 = s[-1:-5:-1]
print(s5)    # c
print(s3)    # c5b4

7、通过对s切⽚片形成字符串串s6,s6 = "ba2"
s = "123a4b5c"
s6 = s[-3:-8:-2]
print(s6)             #ba2

二、列表、字典、文件操作

 1、有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}  (升级题)

str1 = 'k:1|k1:2|k2:3|k3:4'
dic = {}
a = str.split('|')
for i in a :
    k, v  = i.split(":")
    dic[k] =int(v)

print(dic)

2、车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (升级题)

dic = {}
car = ['鲁A25444', '鲁B22333', '京B89889', '黑C23442', '泸Y23454', '黑I34432','渝W87665']
locals = {'': '上海', '': '黑龙江', '': '山东', '': '北京', '': '重庆'}
for cars in car:
    first_name = cars[0]
    localtion = locals[first_name]    # 这里的是一个字典,通过key来取值  取出上海、上东……
    if dic.get(localtion) == None:
        dic[localtion] = 1
    else:
        dic[localtion] += 1
print(dic)

法二:
cars = ["鲁A32444", "鲁B12333", "京B8989M", "黑C49678", "黑C46555", "沪B25041", "黑C34567"]
locations = {"": "上海", "": "北京", "": "黑龙江", "": "山东", "": "湖北", "": "湖南"}
loca = []
dic = {}
for i in locations:
    count = 0
    for el in cars:
        if el.startswith(i):
            count += 1
    dic[locations[i]] = count
print(dic)

3、打印大地区的各个区县:

menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'soho':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{},
        '东城':{},
    },
    '上海':{
        '闵行':{
            "人民广场":{
                '炸鸡店':{}
            }
        },
        '闸北':{
            '火车战':{
                '携程':{}
            }
        },
        '浦东':{},
    },
    '山东':{},
}

while True:
    for key in current_layer:
        print(key)
    choice=input(">>>:").strip()
    if len(choice)==0:continue
    if choice in current_layer:
        # parent_layer=current_layer
        parent_layer.append(current_layer)#把当前级加入父亲级称为列表最后一个元素
        #下一次循环,当输入return,就可以直接取列表最后一个值
        current_layer=current_layer[choice]
    elif choice=="return":
        # current_layer=parent_layer
        current_layer=parent_layer.pop()#取出列表最后一个值,因为他就是当前层的父亲级
    elif choice=="quit":
        break

4、 判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数.
#  那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3

lst = []
count = 0
for i in range(100, 1000):
    a, b, c = str(i)
    if i == int(a)**3 + int(b)**3 + int(c)**3:
        lst.append(i)
    else:
        continue

print(lst)

5、循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换.循环结束的时候. 当前列表中最大的数据就会被移动到最右端.
#冒泡排序
li = [2, 1, 7, 4, 6, 12, 11, 26, 9, 34, 3, 9]
for i in range(len(li) - 1):
    if li[i] > li[i + 1]:
        c = li[i]
        li[i] = li[i + 1]
        li[i + 1] = c
    else:
        continue

print(li)

#选择排序
data_set = [12,45,2,48,66,2,1,56,36,90,5,10,503]

for i in range(len(data_set)):  #大圈决定轮数 也就是我们选择的次数
    minIndex = i
    for j in range(i+1,len(data_set)):  #小圈就是我们每次 选择后比较的次数
        #//如果后面的元素比我选择元素还小 就互换位置
        if data_set[j] < data_set[minIndex] :
            minIndex=j
    temp = data_set[i]
    data_set[i]=data_set[minIndex]
    data_set[minIndex] = temp

print(data_set)

6、有如下文件: le是老男孩python发起人,创建人。 le其实是人妖。 谁说le是sb? 你们真逗,le再牛逼,也掩饰不住资深屌丝的气质。 将文件中所有的alex都替换成大写的SB(文件的改的操作)。 import os with open('haha', 'r', encoding='utf-8') as f,\ open('haha_1', 'w', encoding='utf-8') as w: for i in f: line = i.replace('le', 'sb') w.write(line) os.remove('haha') os.rename('haha_1','haha')
7、将以下list3 改成list4 的样子: list3 = [ {"name": "alex", "hobby": "抽烟"}, {"name": "alex", "hobby": "喝酒"}, {"name": "alex", "hobby": "烫头"}, {"name": "alex", "hobby": "Massage"}, {"name": "wusir", "hobby": "喊麦"}, {"name": "wusir", "hobby": "街舞"}, ] 相同的名字合并并且hobby都装到hobby_list的列表中: 代码: list4 = [] li = [] for i in range(len(list3)): if list3[i]['name'] in li: continue else: li.append(list3[i]['name']) for i in li: hobby_list = [] for v in list3: if v['name'] == i: hobby_list.append(v['hobby']) else: continue dic = {} dic['name'] = i dic['hobby_list'] = hobby_list list4.append(dic) print(list4)


三、函数

1、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题)

import os
import time

def fun(a,b):
    with open(a,'r+',encoding='utf-8') as f,\
        open('副本','w',encoding='utf-8') as w:
        # time.sleep(3)
        for i in f:
            if b in i:
                # w.write(i.replace(b,'*'*len(b)))
                w.write(i.replace(b,''))    #删除文件中的苍老师
            else:
                w.write(i)

    os.remove(a)
    os.rename('副本',a)

fun('信息','苍老师')

2、 编写程序处理理⽇志文件. 每天的日志都会统⼀写⼊到⼀个大文件中(可能上G). 现给出一个大的日志⽂件.
将⽇志文件中每天的日志摘出来. 生成每天的⼩⽂件, 需要时间的相关处理方法请⾃行百度
例如: 有如下⽂文件
2016-01-02 12:22:12 刘德华登录系统
2016-01-02 12:23:18 刘德华买了一盒中华⾹香烟
2016-01-02 12:24:55 刘德华退出系统
2016-01-03 01:00:22 麻花⼉疼登录系统
2016-01-03 01:10:32 刘德华疼登录系统
2016-01-03 04:30:21 麻花⼉疼买了一个麻花
2016-01-03 12:02:42 刘德华显示自己很溜溜 运⾏之后的结果. ⽣成两个文件: 2016-01-02.log

with open('log.txt','r',encoding='utf-8') as f:
    s = set()
    for i in f:
        c = i.strip().split()
        if c[0] not in s:
            s.add(c[0])
            with open('%s'%c[0],'w',encoding='utf-8') as w1:
                w1.write(i)
        else:
            with open('%s' % c[0], 'a+', encoding='utf-8') as w:
                # w.seek(0, 2)
                w.write(i)


3、⽤函数完成登录注册以及购物⻋车的功能.  难度系数一般
要求:
1, 启动程序, ⽤户可选择四个选项:
登录, 注册, 购物, 退出.
2, ⽤户注册, ⽤户名不能重复, 注册成功之后, ⽤用户名密码记录到文件中.
3, ⽤户登录, ⽤户名密码从⽂件中读取,进⾏三次验证, 验证不成功则退出整个程序.
4, ⽤户登录成功之后才能选择购物功能进行购物, 购物功能(就是将购物⻋封装到购物的函数中).
5, 退出则是退出整个程序.
      欢迎计⼊⽼男孩购物系统:
      1. 登录 2. 注册 3. 购物 4. 退出

代码:
import time,os
 
#文件名
file_name = 'user_list.txt'
 
 
def file_exists(*args,**kwargs):
    '''
    # 判断用户列表文件是否存在
    :return: True 存在 False 不存在
    '''
    # 判断文件是否存在
    if os.path.exists(file_name):
        return True
    else:
        with open(file_name, encoding='utf-8', mode='w') as mk:
            mk.write('张三    123')
            return False
 
 
def registered_username(username):
    '''
    #判断注册用户名是否可用
    :param username: 用户名
    :return: True 可用(用户不存在) False 不可用(用户已存在)
    '''
    # 纯用户名列表,不包含密码
    user_list = []
    with open(file_name, encoding='utf-8') as f1:
        for i in f1:
            # 去空格,以空格切割,转换为列表
            li = i.strip().split()  # [张三,123]
            # 将用户名追加到列表中
            user_list.append(li[0])
        # 判断用户名是否存在列表中
        if username in user_list:
            # 返回False
            return False
        else:
            return True
 
 
def write_file(username,password):
    '''
    #写入用户列表文件
    :param username: 用户名
    :param password: 密码
    :return: True 写入成功 False 写入失败
    '''
    with open(file_name, encoding='utf-8', mode='a') as f2:
        f2.write('\n{}    {}'.format(username, password))
        return True
 
 
def username_password(username,password):
    '''
    #判断用户名和密码是否匹配
    :param username: 用户名
    :param password: 密码
    :return: True 匹配成功 False 匹配失败
    '''
    # print(username,password)
    with open(file_name, encoding='utf-8', mode='r') as f3:
        for i in f3:
            # print(i)
            # 去空格,以空格切割,转换为列表
            li = i.strip().split()  # [张三,123]
            # 判断用户名和密码是否匹配
            if username == li[0] and password == li[1]:
                result = True
                # 当找到匹配时,跳出循环
                break
            else:
                result = False
        # 当整个用户列表遍历完成之后,再return
        return result
 
 
def register(*args,**kwargs):
    '''
    注册逻辑
    :return:
    '''
    while True:
        username = input('请输入注册的用户名,或输入q返回菜单:').strip()
        if username == '':
            print('用户名为空,请重新输入!')
        elif username.upper() == 'Q':
            break
        else:
            # 执行判断用户名函数
            result = registered_username(username)
            if result:
                password = input('请输入您的注册的密码:').strip()
                # 判断密码
                if password == '':
                    print('密码为空,请重新输入!')
                else:
                    # 执行写入用户列表文件函数
                    result = write_file(username, password)
                    if result:
                        print('注册成功!,您的用户名为: {}\n倒计时2秒返回菜单!'.format(username))
                        time.sleep(2)
                        user_menu()
                    else:
                        print('注册失败!请重试')
            else:
                print('用户名已经存在,请重新输入!')
 
 
def login(count=0,max=3):
    '''
    登录逻辑
    :param count: 初始失败次数
    :param max: 最大失败次数
    :return:
    '''
    while count < max:
        count += 1
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()
        # 执行验证用户名和密码函数
        result = username_password(username,password)
        if result:
            print('登陆成功\n倒计时1秒返回菜单!')
            time.sleep(1)
            user_menu()
            break
        else:
            print('用户名或密码错误,还剩余{}次机会!'.format(max - count))
 
    # 返回主菜单
    user_menu()
 
 
def user_menu(*args,**kwargs):
    '''
    # 用户菜单
    '''
    # 判断文件是否存在,不存在创建文件
    file_exists()
    # 循环
    while True:
        # 打印菜单
        menu = ['注册', '登录', '退出']
        print('bbs系统'.center(25, '#'))
        for i in range(len(menu)):
            print('{}\t{}'.format(i + 1, menu[i]))
        print(''.center(27, '#'))
        number = input('请选择序号: ').strip()
        if number == '1':
            # 执行注册程序
            register()
        elif number == '2':
            # 执行登录程序
            login()
        elif number == '3':
            exit()
        else:
            print('输入错误,请重新输入!')
 
 
# 执行菜单
user_menu()
4、IBM指数
创建并输出菜单, 菜单是不可变的. 所以使用元组
menus = ("1, 录入", "2, 查询", "3, 删除", "4, 修改", "5, 退出")

存储用户的信息    id: {'name':'名字', 'weight':体重, 'height':身高}
例如:目前有两个用户信息:1. 汪峰, 2. 章子怡
存储结构:
{
  1:{'name':'汪峰', 'weight':80, 'height':1.8, 'BMI':24.7},
  2:{'name':'章子怡', 'weight':50, 'height':1.65, 'BMI':18.4}
}
bodies = {}

body_id = 1  # 编号从1开始

体质指数(BMI)= 体重(kg)÷ (身高(m) x 身高(m))
体重的单位: KG
身高的单位: m
需求:首先。打印菜单,然后用户输入选择的菜单项
输入1:进入录入环节。用户需要录入:名字,身高,体重.
      由程序计算出BMI指数. 保存到bodies字典中. 第一个用户的id是1, 第二个是2, 以此类推
      录入完毕后. 提示用户是否继续录入. 如果选择是, 则继续进行录入, 直到用户输入否. 则返回到主菜单
输入2: 进入查询环节, 提示用户输入要查询的人的id. 如果不存在,给与提示, 如果存在. 则显示出该用户的全部信息(名字,身高,体重,BMI)
      然后提示用户是否继续查询. 如果选择是, 继续进行查询, 直到用户输入否, 返回主菜单
输入3: 进入删除环节, 提示用户输入要删除的人的id, 如果id不存在, 给与提示, 如果存在, 则执行删除操作. 并提示删除成功.
       然后提示用户是否继续删除, 如果是, 继续让用户选择要删除的id, 直到用户输入否, 返回主菜单
输入4: 进入修改环节, 首先让用户输入要修改的人的id, 根据id查找用户信息, 如果不存在, 给与提示, 如果存在, 将用户原信息进行打印,
      然后提示用户输入新的名字, 身高, 体重. 由程序重新计算BMI指数. 并将新的信息保存在bodies中. 同时给用户展示新的用户信息
      然后提示用户是否继续修改, 如果是, 则继续要求用户输入id信息. 直到用户输入否, 返回主菜单.
输入5: 程序退出.
输入其他任何内容. 都予以提示不合法. 让用户重新进行输入


代码区:
bodies = {}
tager = True
while tager:
    print('请输入相应的操作步骤(首菜单)'.center(50, '='))
    menus = ('1, 录入', '2, 查询', '3, 删除', '4, 修改', '5, 退出')
    for i in menus:
        print(i)

    print()
    usr = input("请输入操作序号: ").strip()
    if str(1) == usr:
        tager_1 = True
        while tager_1:
            print('录入菜单'.center(59, '+'))
            menus_ = ('1, 录入', '2, 返回上一层', '3, 查看')
            for v in menus_:
                print(v)
            print("".center(63, '='))

            usr_1 = input('请选择操作序号: ')
            if usr_1 == str(1):
                if not bodies :    # bodies == {} 的简便写法就是 not XX
                    body_id = 1
                else:
                    body_id = len(bodies)+1
                bodies[body_id] = {}
                bodies[body_id]['name'] = input("输入自己的姓名:").strip()
                bodies[body_id]['weigth'] = float(input("输入自己的体重:").strip())
                bodies[body_id]['heigth'] = float(input("输入自己的高度:").strip())
                bodies[body_id]['BMI指标'] = float("%.1f"%(bodies[body_id]['weigth']/(float(bodies[body_id]['heigth'])**2)))
                print('录入完成'.center(59,'='))

            elif usr_1 == str(2):
                tager_1 = False

            elif usr_1 == str(3):
                print(bodies)
            else:
                print("输入有误,请重试!")
                continue

    elif str(2) == usr:
        tager_2 = True
        while tager_2:
            print('查询菜单'.center(59, '+'))
            chaXun = input('请输入想要查询的姓名(输入0返回首页): ')
            if chaXun == str(0):
                tager_2 = False
                usr = 0
            else:
                l1 = []
                print("查询的数据".center(59, '-'))
                for i in bodies:
                    if chaXun == bodies[i]['name']:
                        l1.append(bodies[i])
                    else:
                        continue
                if not l1:    # 判断一个字典或则列表是个空集合时用 == {}  ==[]
                    print("                           查询无果!!!")
                else:
                    for i in l1:
                        print(i)

    elif str(3) == usr:

        tager_3 = True
        while tager_3:
            print("删除菜单".center(59, '+'))
            shanChu = input("请输入删除的名字(输入0返回首页)>>>  ")
            if shanChu == str(0):
                tager_3 = False
                usr = 0
            else:
                li = []
                for i in bodies:
                    if shanChu == bodies[i]['name']:
                        li.append(i)
                        break
                    else:
                        continue
                else:
                    print('%s 没有在数据库里面'%shanChu)
                for v in li:
                    del bodies[v]
                    print('%s  数据已删除!!!'%shanChu)

                tager_5 = True
                while tager_5:
                    print("".center(62, '+'))
                    usr_3 = input("2 ---> 查询删除后的数据    1 ---> 返回上一级     请选择操作>>> ").strip()
                    if str(2) == usr_3:
                        print(bodies)
                    elif str(1) == usr_3:
                        tager_5 = False

    elif str(4) == usr:
        tager_4 = True
        while tager_4:
            print('修改菜单'.center(59,'='))
            usr_4 = input('请输入要修改的名字(输入0返回首页)>>>  ')
            if usr_4 == str(0):
                tager_4 = False
                usr = 0
            else:
                for i in bodies:
                    if bodies[i]['name'] == usr_4:
                        bodies[i]['name'] = input("输入自己的姓名:").strip()
                        bodies[i]['weigth'] = float(input("输入自己的体重:").strip())
                        bodies[i]['heigth'] = float(input("输入自己的高度:").strip())
                        bodies[i]['BMI指标'] = float("%.1f" % (bodies[i]['weigth'] / (float(bodies[i]['heigth']) ** 2)))
                        print(bodies[i])
                        break
                    else:
                        continue
                else:
                    print("                 %s 没有在数据库中"%usr_4)

    elif str(5) == usr:
        exit()

    else:
        print('输入有误,请重试!')
        continue

猜你喜欢

转载自www.cnblogs.com/double-W/p/9460359.html