Python基础练习
# 随便输入一段字符串,计算整数的个数 info = input('>>>').strip() for i in info: if i.isalpha(): info = info.replace(i, " ") l = info.split() print(len(l)) # ab互换 a = 1 b = 2 a,b = b,a print(a,b) # 循环迭代字符串(不需要知道字符串多长) s = "qwertyuiopasdfghjkl" index = 0 while 1: print(s[index]) index += 1 if index == len(s): break # 有如下值li= [11,22,33,44,55,66,77,88,99],将所有小于 66 的值 保存至字典的第一个key中,将大于 66 的值保存至第二个key的值中。 即: {'k1': 小于66的所有值列表, 'k2': 大于66的所有值列表} li = [11, 22, 33, 44, 55, 66, 77, 88, 99] dic = {} l_greater = [] #大于66的所有值列表 l_less = [] #小于66的所有值列表 for i in li: if i < 66: l_less.append(i) elif i > 66: l_greater.append(i) dic.setdefault("k1", l_less) dic.setdefault("k2", l_greater) print(dic) # 输出商品列表,用户输入序号,显示用户选中的商品 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] 要求: 1:页面显示 序号 + 商品名称,如: 1 手机 2 电脑 ... 2:用户输入选择的商品序号,然后打印商品名称 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入 4:用户输入Q或者q,退出程序 flag = True while flag: li = ["手机", "电脑", "鼠标垫", "游艇"] for i in li: print("{}\t{}".format(li.index(i)+1, i)) num_of_chioce = input("请输入选择的商品序号/输入Q或者q退出程序:") if num_of_chioce.isdigit(): num_of_chioce = int(num_of_chioce) if num_of_chioce > 0 and num_of_chioce <= len(li): print(li[num_of_chioce-1]) else:print("请输入有效数字") elif num_of_chioce.upper() == "Q": break else: print("请输入数字") # 让用户选择何时退出 x = "" while x != "quit": x = input("如果想退出,请输入quit(不区分大小写:").lower() if x != "quit": #退出成功时不再打印输入内容 print(x) active = True while active: g_input = input("如果想退出,请输入quit(不区分大小写):").lower() if g_input == "quit": active = False else: print(g_input) # 使用用户输入来填充字典 dic = {} #定义一个空字典 active = True #设置一个标志 while active: name = input("您叫什么名字?") response = input("请问您喜欢什么户外运动?") dic[name] = response #名字和答案以键值对存储进字典 repeat = input("非常感谢您的配合!任意键退出/修改请输入yes:") repeat = repeat.lower() #大小写不区分 if repeat != "yes": active = False for name, response in dic.items(): #遍历字典 print("\n姓名:" + name + "\n爱好:" + response) #换行打印 # 注册、保存账号密码、3次机会验证登录 while 1: name = input("请输入注册账号:") password = input("请输入注册密码:") confirm_password = input("请再一次确认密码:") if confirm_password == password: print("恭喜您注册成功") with open("text", mode="w+", encoding="utf-8") as file: file.write("{}\n{}".format(name, password)) break else: continue i = 0 lis = [] while i < 3: use = input("请输入登录账号:") psd = input("请输入登录密码:") with open("text", mode="r+", encoding="utf-8") as file: for x in file: lis.append(x) if use == name and psd == password: print("登录成功") break else: print("登录失败") i += 1 # 用户输入内容,计算"索引为奇数且对应的元素为数字"的个数 content = input(">>>:") count = 0 for i in range(len(content)): if i % 2 != 0 and content[i].isdigit(): count += 1 print(count) # 有列表lis = [1, 2, 3, 4, 5, 7, 8, 9],将所有小于6的值保存至字典 的key1中,将大于6的值保存至字典的key2中 lis = [1, 2, 3, 4, 5, 7, 8, 9] result = {"key1": [], "key2": []} for i in lis: if i < 6: if "key1" not in result: result["key1"] = [] result["key1"].append(i) else: if "key2" not in result: result["key2"] = [] result["key2"].append(i) print(result) lis = [1, 2, 3, 4, 5, 7, 8, 9] result = {} result.setdefault("key1", []) result.setdefault("key2", []) for i in lis: if i < 6: result["key1"].append(i) else: result["key2"].append(i) print(result) # 移除列表lis每个元素的空格、找出以"A"或者"a"开头、并以"c"结尾的所有元素,将这些元素添加到新列表中 lis = ["taibai", "alexC", "AbC", "egon", "Ritian", "Wusir", " aqc"] lis1 = [] lis2 = [] lis3 = [] for i in lis: lis1.append(i.strip()) print(lis1) for i1 in lis1: if i1.startswith("A") or i1.startswith("a"): lis2.append(i1) for i2 in lis2: if i2.endswith("c"): lis3.append(i2) print(lis3) # 写程序:模拟公司HR录入员工账号密码的程序 1)员工的账号密码存储在这种数据类型中 user_list = [{"username": "barry", "password": "1234"} {"username": "ppd", "password": "123456"} ..................................... ] 2)非法字符模板:board = ["张三", "李小四", "王二麻子"] 3)HR输入用户名、密码(可持续输入,如果想终止程序,那就在输入用户名时输入Q或者q),在 HR输入用户名时,检测此用户名是否有board里面的非法字符,如果有非法字符,则将非法字符替 换成同数量的*,然后添加到user_list中,如果没有非法字符,则直接添加到user_list中,每次 添加成功后,打印出刚添加的用户名、密码。 user_list = [] board = ["张三", "李小四", "王二麻子"] while 1: u_name = input("请输入用户名、退出程序请输入Q或者q:") if u_name.upper() == "Q": break for i in range(len(board)): if u_name == board[i]: u_name = len(board[i])*"*" ps_wd = input("请输入用户密码:") user_list.append({"username": u_name, "password": ps_wd}) print(user_list) # 写函数,判断用户传入的值(字符串、列表、元组)的长度是否大于5 def s_lenth(s): if len(s) > 5: return "right" ret = s_lenth("123456") print(ret) # 写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果 def func(x): if type(x) is str: for i in x: if i == ' ': return True elif x and type(x) is list or type(x) is tuple: for i in x: if not i: return True elif not x: return True print(func()) # 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作 import os def alter_content(file, old_str, new_str): """ 将替换的字符串写到一个新的文件中,然后将原文件删除,新文件改为原来文件的名字 file: 文件路径 old_str: 需要替换的字符串 new_str: 替换的字符串 return: None """ with open(testfile, "r", encoding="utf-8") as f1, open("%s.bak" % testfile, "w", encoding="utf-8") as f2: for line in f1: if old_str in line: line = line.replace(old_str, new_str) f2.write(line) os.remove(testfile) os.rename("%s.bak" % testfile, testfile) alter_content("test", "你好", "测试") # 两个数相乘,计算结果保留2位小数 a = eval(input()) b = eval(input()) print("面积是:%.5f" % (a*b)) # 斐波那锲数列1,1,2,3,5,8,13...根据这样的规律,求出400 万以内最大的斐波那锲数,并求出是第几个斐波那锲数 def count(a, b): n = 0 while b < 4000000: a, b = b, a+b n = n + 1 return n, a count(0, 1) # 求第n个斐波那锲数 def recursion(n): if n <= 2: return 1 return recursion(n-1)+recursion(n-2) recursion(5) # 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 def check_file(filename,check_content): with open(filename, encoding="utf-8") as f: for i in f: if check_content in i: yield i generator = check_file("text", "id") for i in generator: print(i) # 如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格。 计算购买每支股票的总价 portfolio = [{'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65}] res = map(lambda dic:{dic["name"]:round(dic["shares"]*dic["price"], 2)},portfolio) # 用递归实现阶乘 def factorial(n): print(n) if n == 0: #等于0就运算完了 return 1 return n * factorial(n - 1) #每次递归相乘,n值都比之前小1 res = factorial(4) print(res) # 随意写一个n行以上的文件 1.运行程序,先将内容读到内存中,用列表存储 2.接收用户输入页码,每页5条,仅输出当页的内容 def check_content(filename): with open(filename, "r", encoding="utf-8") as f: lis = f.readlines() pages, row = divmod(len(lis), 5) if row: pages += 1 while True: page_num = input("请输入页码或者输入Q/q退出:") if page_num.isdigit(): page_num = int(page_num) if page_num <= 0 or page_num > pages: print("\033[31;1m超出页码范围,请重新输入:\033[0m") elif page_num == pages and row !=0: for i in range(row): print(lis[(page_num - 1) * 5 + i].strip()) else: for i in range(5): print(lis[(page_num-1)*5 +i].strip()) elif page_num.lower() == "q": print("\033[32;1m退出成功\033[0m") break else: print("输入有误,请重新输入:") continue check_content("text") import re data = {"time": "2016-80-05T13:13:05", "grp1": {"fld1": 1, "fld2": 2}, "xxx2": {"fld3": 0, "fld5": 0.4}, "fld6": 11, "fld7": 7, "fld46": 8} lis = [] for k in data.keys(): lis.append(str(k)) for v in data.values(): lis.append(str(v)) ret = re.findall("fld[\d]*", str(lis)) ret = "|".join(ret) print(ret) # fld7|fld46|fld6|fld1|fld2|fld3|fld5 # ************************************************* import re def deal_sign(expre_str): """处理表达式中的 +- 或 -- """ exp_str = expre_str.replace("+-", "-") exp_str = expre_str.replace("--", "+") return exp_str def cal_exp_min(exp_min): """计算最小化的表达式(两个数之间的乘除)""" if "*" in exp_min: x, y = exp_min.split("*") return str(float(x)*float(y)) elif "/" in exp_min: x, y = exp_min.split("/") return str(float(x) / float(y)) def deal_express_no_bracket(express_no_bracket): """ 处理没有括号的表达式 exp_no_bra是没有经过处理的最内层带括号的表达式""" exp = express_no_bracket.strip("()") print("3: " + exp) # 先乘除后加减 # -40/5*8+2 while True: ret = re.search("\d+\.?\d*[*/]-?\d+\.?\d*", exp) if ret: # True说明表达式中还有乘除法 exp_min = ret.group() # 得到最简单的表达式 print("4: " + exp_min) ret_min = cal_exp_min(exp_min) # 调用 print("5: " + ret_min) exp = exp.replace(exp_min, ret_min) exp = deal_sign(exp) else: ret = re.findall("-?\d+\.?\d*", exp) sum = 0 for i in ret: sum = sum + float(i) print("结果:", sum) return str(sum) def remove_bracket(express_str): """提取括号里面没有括号的表达式""" while True: ret = re.search("\([^()]+\)", express_str) if ret: express_no_bracket = ret.group() print("2: " + express_no_bracket) new_ret = deal_express_no_bracket(express_no_bracket) # 调用 print("6: " + new_ret) # replace(2, 6) express_str = express_str.replace(express_no_bracket, new_ret) print("7: " + express_str) exp_str = deal_sign(express_str) # 调用 print("8: " + exp_str) else: print(exp_str) ret = deal_express_no_bracket(exp_str) return ret def cal_express(): """去空格""" express_str = input("请输入要计算的表达式:") express_str = express_str.replace(" ", "") print("1: " + express_str) remove_bracket(express_str) if __name__ == "__main__": cal_express()