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,先来聊一聊输入和 ...
随机推荐
- TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)
1.什么是TSP问题 一个售货员必须访问n个城市,这n个城市是一个完全图,售货员需要恰好访问所有城市的一次,并且回到最终的城市. 城市于城市之间有一个旅行费用,售货员希望旅行费用之和最少. 完全图:完 ...
- CANVAS画布与SVG的区别
CANVAS是html5提供的新元素<canvas>,而svg存在的历史要比canvas久远,svg并不是html5专有的标签,最初svg是用xml技术(超文本扩展语言,可以自定义标签或属 ...
- Windows中通过命令行新建文件夹、新建文件,和一些常用命令
新建文件 和Linux不太一样,Linux中的touch和vi命令创建新文件的方法都不能用了,在windows命令行下得用type nul>文件名.后缀名来创建: F:\study\vue\wo ...
- WebView断网提示
转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/9913968.html 重写WebViewClient中的方法,然后WebView.setWebViewC ...
- TextView走马灯
设置textView走马灯形式显示: android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally ...
- RN开发中的报错以及告警
报错一: Attempted to transition from state `RESPONDER_INACTIVE_PRESS_IN` to `RESPONDER_ACTIVE_LONG_PRES ...
- Visual Studio 2019 RC入门
介绍 在本文中,让我们看看如何开始使用Visual Studio 2019 RC.Microsoft现已发布Visual Studio Release Candidate,现在可以下载了.最初,Mic ...
- C++ 浅拷贝与深拷贝探究
C++浅拷贝与深拷贝探究 浅拷贝与深拷贝的概念是在类的复制/拷贝构造函数中出现的. 拷贝构造函数使用场景 对象作为参数,以值传递方式传入函数(要调用拷贝构造函数将实参拷贝给函数栈中的形参) 对象作为返 ...
- 基于raspberry搭建个人web server
树莓派系统介绍 安装操作系统及网络\远程控制配置 安装常用软件 构建web服务器(nginx + php + sqlite) 构建web服务器(appach+mysql+php) 构建NAS服务器 其 ...
- maven常用仓库
==================2014-04-19添加========可访问=============================== http://nexus.openkoala.org/ ...