python 基础篇练习题
一、练习题
# 1.统计元组中所有数据属于字符串的个数,提示:isinstance() # 数据:t1 = (1, 2, '3', '4', 5, '6') # 结果:3 # 2.将以下数据存储为字典类型 # 数据:info = "name:Owen|age:18|gender:男" # 结果:{'name': 'Owen', 'age': 18, 'gender': '男'} # 注:年龄存储为数字类型 # 3.完成数据的去重 # 数据:t3 = (1, 2, 1, 2, 3, 5, 9) # 结果:t3 = (1, 2, 3, 5, 9) # 注:从不考虑顺序、考虑顺序两方面完成 # 4.计算元组中所有可以转换为数字的数据的总和 # 数据:t4 = (10, 'abc', '100', '3') # 运算结果:113 # 5.将数据转换类型存储 # 原数据:dic = {'name': 'Owen', 'age': 18, 'gender': '男'} # 处理后:info = [('name', 'Owen'), ('age', 18), ('gender', '男')] # 拓展:选做 # 1.计算元组中所有可以转换为数字的数据的总和 # 数据:t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,)) # 运算结果:11118 # 提示: # -- 利用字符串isnumeric()判断汉字 # -- 利用字典{'壹': 1 ...}将汉字转换为数字 # -- 利用isinstance()将list和tuple中数据取出来 # -- 先将所有转化为数字的数据存放在一个单列集合中,在做运算 # 2.完成录入电话本 # 需求: ''' -- 从键盘中录入姓名(不区分大小写): -- 姓名必须是全英文组成,不是则重新录入姓名,如果是q,代表退出 -- 从键盘中再录入电话: -- 电话必须为数字且长度必须是11位(不能转换为数字) -- 如果出现姓名相同,则保留最后一次电话号码 -- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成 -- { 'O': { 'Owen': '13355667788' } } 最终数据,分组名一定大写: { 'E': { 'egon': '17788990000', 'engo': '16633445566' }, 'O': { 'Owen': '13355667788' } } '''
# 1.统计元组中所有数据属于字符串的个数,提示:isinstance() # 数据:t1 = (1, 2, '3', '4', 5, '6') # 结果:3 t1 = (1, 2, ') count = 0 for v in t1: if isinstance(v, str): count += 1 print(count) # 2.将以下数据存储为字典类型 # 数据:info = "name:Owen|age:18|gender:男" # 结果:{'name': 'Owen', 'age': 18, 'gender': '男'} # 注:年龄存储为数字类型 info = "name:Owen|age:18|gender:男" infos = info.split('|') # ['name:Owen', 'age:18', 'gender:男'] info_dic = {} for msg in infos: k, v = msg.split(':') info_dic[k] = v print(info_dic) # 3.完成数据的去重 # 数据:t3 = (1, 2, 1, 2, 3, 5, 9) # 结果:t3 = (1, 2, 3, 5, 9) # 注:从不考虑顺序、考虑顺序两方面完成 t3 = (1, 2, 1, 2, 3, 5, 9) l3 = [] for v in t3: if v not in l3: l3.append(v) t3 = tuple(l3) print(t3) t3 = (1, 2, 1, 2, 3, 5, 9) t3 = tuple(set(t3)) print(t3) # 4.计算元组中所有可以转换为数字的数据的总和 # 数据:t4 = (10, 'abc', '100', '3') # 运算结果:113 t4 = (10, ') total = 0 for v in t4: if isinstance(v, int): total += v elif isinstance(v, str): if v.isdigit(): v = int(v) total += v print(total) # 5.将数据转换类型存储 # 原数据:dic = {'name': 'Owen', 'age': 18, 'gender': '男'} # 处理后:info = [('name', 'Owen'), ('age', 18), ('gender', '男')] dic = {'name': 'Owen', 'age': 18, 'gender': '男'} info = [] for k, v in dic.items(): info.append((k, v)) print(info) # 拓展1.计算元组中所有可以转换为数字的数据的总和 # 数据:t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,)) # 运算结果:11118 # 提示: # -- 利用字符串isnumeric()判断汉字 # -- 利用字典{'壹': 1 ...}将汉字转换为数字 # -- 利用isinstance()将list和tuple中数据取出来 # -- 先将所有转化为数字的数据存放在一个单列集合中,在做运算 t4 = (10, ', '壹', '肆', [1000], (10000,)) num_map = {'壹': 1, '贰': 2, '仨': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9, '拾': 10} nums = [] for v in t4: if isinstance(v, int): nums.append(v) elif isinstance(v, str): if v.isdigit(): nums.append(int(v)) elif v.isnumeric(): nums.append(num_map[v]) elif isinstance(v, tuple) or isinstance(v, list): # 只考虑该具体数据,不考虑更复杂情况 for n in v: nums.append(n) total = sum(nums) # python内置方法 print(total) # 拓展2.完成录入电话本 # 需求: ''' -- 从键盘中录入姓名(不区分大小写): -- 姓名必须是全英文组成,不是则重新录入姓名,如果是q,代表退出 -- 从键盘中再录入电话: -- 电话必须为数字且长度必须是11位(不能转换为数字) -- 如果出现姓名相同,则保留最后一次电话号码 -- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成 -- { 'O': { 'Owen': '13355667788' } } 最终数据,分组名一定大写: { 'E': { 'egon': '17788990000', 'engo': '16633445566' }, 'O': { 'Owen': '13355667788' } } ''' # 电话本 phone_map = {} # 是否退出系统 is_over = False while not is_over: # 姓名初始制空,完成只有姓名输入正确才录入电话 name = '' while True: # 姓名必须录入正确 if not name: name = input("name:") if name == 'q': # 退出系统 is_over = True break elif not name.isalpha(): # 录入错误,置空名字 print('name error') name = '' continue # 录入电话,保证是11位的数字字符串 phone = input("phone:") if not (phone.isdigit() and len(phone) == 11): continue # 取组名 group = name[0:1].upper() # 对于组名的操作:无组名,添加分组 | 有组名,不操作 phone_map.setdefault(group, {}) phone_map[group][name] = phone # 一条信息添加完毕,重置信息 name = '' phone = '' print('录入成功') print(phone_map)
答案
# 1.统计文件数据中字母e出现的次数(不区分大小写) # 文件内容:hello friend, can you speak English! # 结果:4 # 分析:将文件内容读出,然后统计读出的字符串中字符e的个数(字符串count功能) # 2.统计文件数据中出现的的所有字符与该字符出现的个数(不区分大小写,标点与空格也算) # 文件内容:hello friend, can you speak English! # 结果: { 'h': 1, 'e': 4, 'l': 3, 'o': 2, ' ': 5, ... } # 分析:将文件内容读出,然后统计读出的字符串中每个字符的个数,形成字段(for遍历读取的字符串) # 3.读取文件内容,分析出所有的账号及对应的密码 # 文件内容:owen:123456|egon:123qwe|liuxx:000000 # 结果: { ', 'egon': '123qwe', ' } # 分析:将文件内容读出,然后按|拆分出 账号:密码 格式的子字符串,再按:拆分成 账号及密码,存放到字典中 # 4.在题3的基础上,账号密码已经被存储在文件中,完成用户登录成功或失败(只做一次性判断) # 文件内容:owen:123456|egon:123qwe|liuxx:000000 # 需求:输入账号、密码,然后进行登录判断,账号密码均正确打印登录成功,否则打印登录失败 # 分析:先完成题3,分析出账号密码字典,然后拿输入的账号密码与字典中数据进行校验 # 5.在题3的基础上,完成用户注册的功能(只做一次性判断) # 文件内容:owen:123456|egon:123qwe|liuxx:000000 # 需求:输入注册的账号、密码,账号已存在的打印账号已存在,注册失败,反正打印注册成功,并将新账号密码录入文件 # 结果:如果输入mac、123123 => owen:123456|egon:123qwe|liuxx:000000|mac:123123 # 分析:先完成题3,分析出账号密码字典,然后拿输入的注册账号与字典中数据进行校验,如果校验没有新账号 # -- 1.采用 w 模式写文件,可以在读取文件的内容后拼接 |mac:123123 字符串,将拼接后的总字符串一次性写入 # -- 2.采用 a 模式写文件,可以直接追加写入 |mac:123123 字符串 # ------------------------------------------- # 拓展1.统计文件中大写字母、小写字母、数字及其他字符出现的次数 # 文件内容:Abc123,-+XYZopq000.?/ # 结果: { '大写字母': 4, '小写字母': 5, '数字': 6, '其他字符': 6 } # 分析:利用ASCII表,for循环遍历每一个字符value,eg:'a' < value < 'z'就代表是小写字母 # 拓展2.完成登录注册系统(从空文件开始做) # 需求分析: ''' 1.可以循环登录注册,输入1代表选择登录功能,输入2代表注册功能,输入0代表退出其他,其他输入代表输入有误,重输 2.用户的账号密码信息存放在usr.txt文件中,保证用户注册成功后,重启系统,用户信息仍然保存 3.登录在账号验证通过才输入密码验证登录,账号验证三次失败自动进入注册功能,登录三次验证失败自动退出系统 4.第一次注册,文件写入 账号:密码 信息,再次注册追加写入 |账号:密码 信息 分析过程:略 '''
# 1.统计文件数据中字母e出现的次数(不区分大小写) # 文件内容:hello friend, can you speak English! # 结果:4 # 分析:将文件内容读出,然后统计读出的字符串中字符e的个数(字符串count功能) f = open('info.txt', 'r', encoding='utf-8') s_data = f.read().lower() f.close() count = s_data.count('e') print(count) # 2.统计文件数据中出现的的所有字符与该字符出现的个数(不区分大小写,标点与空格也算) # 文件内容:hello friend, can you speak English! # 结果: ''' { 'h': 1, 'e': 4, 'l': 3, 'o': 2, ' ': 5, ... } ''' # 分析:将文件内容读出,然后统计读出的字符串中每个字符的个数,形成字段(for遍历读取的字符串) f = open('info.txt', 'r', encoding='utf-8') s_data = f.read().lower() f.close() c_map = {} for v in s_data: c_map.setdefault(v, 0) c_map[v] += 1 print(c_map) # 3.读取文件内容,分析出所有的账号及对应的密码 # 文件内容:owen:123456|egon:123qwe|liuxx:000000 # 结果: { ', 'egon': '123qwe', ' } # 分析:将文件内容读出,然后按|拆分出 账号:密码 格式的子字符串,再按:拆分成 账号及密码,存放到字典中 f = open('usr.txt', 'r', encoding='utf-8') s_data = f.read() f.close() usr_map = {} for k_v in s_data.split('|'): k, v = k_v.split(':') usr_map[k] = v print(usr_map) # 4.在题3的基础上,账号密码已经被存储在文件中,完成用户登录成功或失败(只做一次性判断) # 文件内容:owen:123456|egon:123qwe|liuxx:000000 # 需求:输入账号、密码,然后进行登录判断,账号密码均正确打印登录成功,否则打印登录失败 # 分析:先完成题3,分析出账号密码字典,然后拿输入的账号密码与字典中数据进行校验 f = open('usr.txt', 'r', encoding='utf-8') s_data = f.read() f.close() usr_map = {} for k_v in s_data.split('|'): k, v = k_v.split(':') usr_map[k] = v usr = input('usr: ') pwd = input('pwd: ') if pwd == usr_map.get(usr): print('登录成功') else: print('登录失败') # 5.在题3的基础上,完成用户注册的功能(只做一次性判断) # 文件内容:owen:123456|egon:123qwe|liuxx:000000 # 需求:输入注册的账号、密码,账号已存在的打印账号已存在,注册失败,反正打印注册成功,并将新账号密码录入文件 # 结果:如果输入mac、123123 => owen:123456|egon:123qwe|liuxx:000000|mac:123123 # 分析:先完成题3,分析出账号密码字典,然后拿输入的注册账号与字典中数据进行校验,如果校验没有新账号 # -- 1.采用 w 模式写文件,可以在读取文件的内容后拼接 |mac:123123 字符串,将拼接后的总字符串一次性写入 # -- 2.采用 a 模式写文件,可以直接追加写入 |mac:123123 字符串 f = open('usr.txt', 'r', encoding='utf-8') s_data = f.read() f.close() usr_map = {} for k_v in s_data.split('|'): k, v = k_v.split(':') usr_map[k] = v # 默认w usr = input('usr: ') pwd = input('pwd: ') # if usr in usr_map: # print('账号已存在,注册失败') # else: # w = open('usr.txt', 'w', encoding='utf-8') # w_data = '%s|%s:%s' % (s_data, usr, pwd) # w.write(w_data) # w.close() if usr in usr_map: print('账号已存在,注册失败') else: w = open('usr.txt', 'a', encoding='utf-8') w.write('|%s:%s' % (usr, pwd)) w.close() # 拓展1.统计文件中大写字母、小写字母、数字及其他字符出现的次数 # 文件内容:Abc123,-+XYZopq000.?/ # 结果: { '大写字母': 4, '小写字母': 5, '数字': 6, '其他字符': 6 } # 分析:利用ASCII表,for循环遍历每一个字符value,eg:'a' < value < 'z'就代表是小写字母 r = open('info.txt', 'r', encoding='utf-8') r_data = r.read() r.close() res_map = {} for v in r_data: if 'a' <= v <= 'z': res_map.setdefault('小写字母', 0) res_map['小写字母'] += 1 elif 'A' <= v <= 'Z': res_map.setdefault('大写字母', 0) res_map['大写字母'] += 1 elif v.isdigit(): res_map.setdefault('数字', 0) res_map['数字'] += 1 else: res_map.setdefault('其他字符', 0) res_map['其他字符'] += 1 print(res_map) # 拓展2.完成登录注册系统(从空文件开始做) # 需求分析: ''' 1.可以循环登录注册,输入1代表选择登录功能,输入2代表注册功能,输入0代表退出,其他输入代表输入有误,重输 2.用户的账号密码信息存放在usr.txt文件中,保证用户注册成功后,重启系统,用户信息仍然保存 3.登录在账号验证通过才输入密码验证登录,账号验证三次失败自动进入注册功能,登录三次验证失败自动退出系统 4.第一次注册,文件写入 账号:密码 信息,再次注册追加写入 |账号:密码 信息 分析过程:略 ''' is_over = False while not is_over: tag = input('''请输入: 1:登录 2:注册 0:退出 >>>''') ': print('退出系统!') break ']: # 用户信息表usr_map分析过程 r = open('usr.txt', 'r', encoding='utf-8') r_data = r.read() r.close() usr_map = {} if r_data: # 存在用户信息才有用户信息表usr_map for k_v in r_data.split('|'): k, v = k_v.split(':') usr_map[k] = v ': print('欢迎来到登录页面') # 没有任何初始用户信息 if not usr_map: print('无用户信息,请先注册') tag = ' # 有用户信息,可以登录 else: # 记录账号验证失败次数 usr_count = 0 # 记录登录失败次数 login_count = 0 while True: usr = input('usr: ') if usr not in usr_map: usr_count += 1 if usr_count >= 3: print('账号验证次数过多,可以注册') tag = ' break else: pwd = input('pwd: ') if pwd != usr_map.get(usr): login_count += 1 if login_count >= 3: print('登录验证次数过多,可以注册') tag = ' break else: print('登录成功!!!') is_over = True break # 不用elif是保证,登录中可以通过tag = '2'直接来到注册页面 ': print('欢迎来到注册页面') new_usr = input('new usr: ') if new_usr in usr_map: print('用户已存在,无需注册') continue new_pwd = input('new pwd: ') w = open('usr.txt', 'a', encoding='utf-8') info = '%s:%s' % (new_usr, new_pwd) # 已有用户,不是首次添加 if usr_map: info = '|%s' % info w.write(info) w.close() print('注册成功!!!') else: print('输入有误!')
答案
python 基础篇练习题的更多相关文章
- python基础篇-day1
python基础篇 python是由C语言写的: pass 占位符: del,python中全局的功能,删除内存中的数据: 变量赋值的方法: user,pass = 'freddy','freddy1 ...
- python基础篇之进阶
python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython 使用c解释器生产 ...
- python基础篇(六)
PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...
- python基础篇(五)
PYTHON基础篇(五) 算法初识 什么是算法 二分查找算法 ♣一:算法初识 A:什么是算法 根据人们长时间接触以来,发现计算机在计算某些一些简单的数据的时候会表现的比较笨拙,而这些数据的计算会消耗大 ...
- python基础篇(一)
PYTHON基础篇(一) 变量 赋值 输入,输出和导入 A:输入 B:输出 C:导入 运算符 A:算数运算符 B:比较运算符 C:赋值运算符 D:位运算符 E:逻辑运算符 F:成员运算符 G:身份运算 ...
- python基础篇(二)
PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...
- python基础篇(三)
PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...
- python基础篇(四)
PYTHON基础篇(四) 内置函数 A:基础数据相关(38) B:作用域相关(2) C:迭代器,生成器相关(3) D:反射相关(4) E:面向对象相关(9) F:其他(12) 匿名函数 A:匿名函数基 ...
- Python基础篇--输入与输出
站长资讯平台:Python基础篇--输入与输出在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和输出输出输入END在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和 ...
随机推荐
- SQL中# 与$ 的区别
区别: (1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是id,则解析成的sql为order by "id&quo ...
- H5移动端rem适配
/** * 移动端自适应 */ <meta name="viewport" content="width=device-width,user-scalable=no ...
- Bootstrap中内联单选按钮
<div class="form-group"> <label class="control-label">性别:</label& ...
- asp.net/wingtip/显示数据和详细信息
前边我们的工作处于wingtip工程基础建设阶段,先是建立了“数据访问层”,然后设计建设了“UI和导航”的框架,接下来要充实工程的内容,显示“数据和详细信息”. 一. 添加数据控件(Data Cont ...
- .net mvc session失效问题
最近解决基于.net mvc项目的session失效问题,这个跟大家聊聊. 1.问题分析 .net mvc中,Session失效需要考虑几种情况: 基于权限认证的Action,使用非Ajax请求: 基 ...
- iOS----------Xcode9无线调试教程
软硬件要求: - Xcode 9.0 beat 及以上版本 - macOS 10.12.5 及以上版本 - iOS 11.0 beat 及以上版本 网络连接要求 - 电脑和设备处于同一 Wifi 环境 ...
- 三、View的事件体系
1.View基础知识 1.1.什么是View View是Android中所有控件的基类.View是一种界面层的控件的一种抽象,代表了一个控件.除了View,还有ViewGroup,内部包含了许多个控件 ...
- myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)
1.Github项目地址 https://github.com/baiyexing/myapp.git 2.功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n ...
- C#如何生成JSON字符串提交给接口(服务器)
C#如何生成JSON字符串提交给接口(服务器) 第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化 ...
- 使用mybatis操作AS400数据库
先简单说一下怎么使用[jt400.jar]连接AS400上的DB2数据库. ※ jt400.jar资源,如果有安装AS400客户端的话,参考IBM官网 ※ http://www-01.ibm.com/ ...