python3学习案例

""" 请打印出 1024 * 768 = *** """ shu = 1024 * 768 print("1024 * 768 = %d" %shu) """ 请打印出以下变量的值: # -*- coding: utf-8 -*- n = 123 f = 456.789 s1 = 'Hello, world' s2 = 'Hello, \'Adam\'' s3 = r'Hello, "Bart"' s4 = r'''Hello, Lisa!''' """ n = 123 f = 456789 / 1000 s1 = "'Hello, World'" s2 = "'Hello, \\'Adam\\''" s3 = "r'Hello, \"Bart\"'" s4 = 'r''\'\'\'Hello,\nLisa!\'\'\'' print('n=', n, '\nf=', f, '\ns1=', s1, '\ns2=', s2, '\ns3=', s3, '\ns4=', s4) """ ×××的成绩从去年的72分提升到了今年的85分,请计算×××成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位: """ zuo_nain = 72 / 100 jin_nain = 85 / 100 r = (jin_nain - zuo_nain) * 100 print("提升%.1f%%" %r ) """ 请用索引取出下面list的指定元素: # -*- coding: utf-8 -*- L = [ ['Apple', 'Google', 'Microsoft'], ['Java', 'Python', 'Ruby', 'PHP'], ['Adam', 'Bart', 'Lisa'] ] # 打印Apple: print(?) # 打印Python: print(?) # 打印Lisa: print(?) """ L = [ ['Apple', 'Google', 'Microsoft'], ['Java', 'Python', 'Ruby', 'PHP'], ['Adam', 'Bart', 'Lisa']] print(L[0][0]) print(L[1][1]) print(L[2][2]) """ ×××身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮×××计算他的BMI指数,并根据BMI指数: 低于18.5:过轻 18.5-25:正常 25-28:过重 28-32:肥胖 高于32:严重肥胖 用if-elif判断并打印结果: """ s = input("高》:") height = float(s) a = input("重》:") weight = float(a) BMI = weight / height ** 2 if BMI < 18.5: print("过轻") elif BMI < 25: print("正常") elif BMI < 28: print("过重") elif BMI < 32: print("肥胖") elif BMI > 32: print("严重肥胖") """ 请利用循环依次对list中的每个名字打印出Hello, xxx!: L = ['Bart', 'Lisa', 'Adam'] """ L = ['Bart', 'Lisa', 'Adam'] for i in L: print("Hello, %s" % i) """ 实现将列表:['a','a','b','a','b','c']输出为字典:{'a':3,'b':2,'c':1} """ str_list = ['a', 'a', 'b', 'a', 'b', 'c'] st_set = set(['a', 'a', 'b', 'a', 'b', 'c']) dic = {} for i in st_set: cont = str_list.count(i) dic[i] = cont print(dic) """ 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串: """ n1 = 233 n2 = 1000 print(hex(n1), hex(n2)) """ 请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2+bx+c=0 的两个解。 计算平方根可以调用math.sqrt()函数 """ import math def quadratic(a, b, c): b2 = b ** 2 - 4*a*c if not isinstance(a + b + c, (int, float)): raise TypeError('error type') if b2 >= 0: ma_x1 = math.sqrt(b ** 2 - 4*a*c) x1 = (-b - ma_x1) / (2 * a) x2 = (-b + ma_x1) / (2 * a) print("x1=%.2f ,x2=%.2f" % (x1, x2)) else: print("无解") quadratic(1, 5, 5) """ 以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积: def product(x, y): return x * y """ def product(*arges): if len(arges) == 0: raise TypeError('参数不能为空, 否则没有意义!') s = 1 for i in arges: if not isinstance(i, (int, float)): raise TypeError('error type') s = i * s #return s print(s) product(10, 25) """ 请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法,例如: """ def move(n, a, b, c): if n < 0: product("请输入大于0") elif n == 1: print(a, '-->', c) else: move(n - 1, a, c, b) # 1, A, B, C move(1, a, b, c) #1, A, B, C move(n - 1, b, a, c) #1, A, B, C move(2, 'A', 'B', 'C') """ 利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法: """ def trim(s): if s[:1] == ' ': s = s[1:] print(s) elif s[-1:] == ' ': s = s[:-1] print(s) elif s[:1] == ' ' and s[-1:] == ' ': s = s[1:-1] print(s) trim(" abc2" ) """ 请使用迭代查找一个list中最小和最大值,并返回一个tuple: """ def suh(L): if not isinstance(L, (list, tuple)): raise TypeError('param must be a list') max_L = min_L = L[0] for i in L: if max_L < i: max_L = i elif min_L > i: min_L = i print(min_L) print(max_L) suh([8, 2, 4, 5]) """ 如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错: >>> L = ['Hello', 'World', 18, 'Apple', None] >>> [s.lower() for s in L] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <listcomp> AttributeError: 'int' object has no attribute 'lower' 使用内建的isinstance函数可以判断一个变量是不是字符串: >>> x = 'abc' >>> y = 123 >>> isinstance(x, str) True >>> isinstance(y, str) False 请修改列表生成式,通过添加if语句保证列表生成式能正确地执行: # -*- coding: utf-8 -*- L1 = ['Hello', 'World', 18, 'Apple', None] L2 = ?? """ L1 = ['Hello', 'World', 18, 'Apple', None] L2 = [s.lower() for s in L1 if isinstance(s, str)] print(L2) """ 杨辉三角定义如下: 1 / \ 1 1 / \ / \ 1 2 1 / \ / \ / \ 1 3 3 1 / \ / \ / \ / \ 1 4 6 4 1 / \ / \ / \ / \ / \ 1 5 10 10 5 1 把每一行看做一个list,试写一个generator,不断输出下一行的list: # 期待输出: # [1] # [1, 1] # [1, 2, 1] # [1, 3, 3, 1] # [1, 4, 6, 4, 1] # [1, 5, 10, 10, 5, 1] # [1, 6, 15, 20, 15, 6, 1] # [1, 7, 21, 35, 35, 21, 7, 1] # [1, 8, 28, 56, 70, 56, 28, 8, 1] # [1, 9, 36, 84, 126, 126, 84, 36, 9, 1] """ def triangles(n): L = [1] m = 0 while n > m: yield L p = [L[a] + L[a + 1] for a in range(len(L) - 1)] #print(p) L = [1] + p + [1] m +=1 for i in triangles(11): print(i) """ 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']: """ def normalize(name): name = name.lower() name = name.title() return name L1 = ['adam', 'LISA', 'barT'] L2 = list(map(normalize, L1)) print(L2) """ Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积: """ from functools import reduce def prod(G): def fn(x, y): return x * y return reduce(fn, G) # def f(): retuen x*y reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) print("3 * 5 * 7 * 9 =", prod([3, 5, 7, 9])) """ 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: """ def str2float(s): for i in range(len(s)): if s[i] == '.': n = i def num1(x, y = 0): return x * 10 + y Digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} def digit(x): return Digits[x] return reduce(num1, map(digit, s[ : n])) + reduce(num1, map(digit, s[n + 1 : ])) / pow(10, (len(s) - n - 1)) print("str2float('123.456') =", str2float('123.456')) if abs(str2float('123.456') - 123.456) < 0.00001: print('测试成功!') else: print('测试失败!') """ 假设我们用一组tuple表示学生名字和成绩: L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 请用sorted()对上述列表分别按名字排序: """ L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_name(t): m = t[0] return m def by_score(t): n=-t[1] return n L1 = sorted(L, key=by_score) L2 = sorted(L, key=by_name) print(L1) print(L2) """ 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数: """ def is_palindrome(n): c = 0 for i in range(len(str(n))): if str(n)[i] != str(n)[-i-1]: c = c+1 return c == 0 #测试 output = filter(is_palindrome, range(1, 1000)) print('1~1000:', list(output)) if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]: print('测试成功!') else: print('测试失败!') """ def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1 = count()[0] print(f1()) 不加括号函数不执行。 利用闭包返回一个计数器函数,每次调用它返回递增整数: """ def createCounter(): f = [] def counter(): f.append(counter) return len(f) return counter # 测试: counterA = createCounter() print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5 counterB = createCounter() if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]: print('测试通过!') else: print('测试失败!') """ 请用匿名函数改造下面的代码: def is_odd(n): return n % 2 == 1 L = list(filter(is_odd, range(1, 20))) print(L) """ L = list(filter(lambda n:n % 2 ==1 , range(1, 20))) print(L) """ 请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间: """ import time, functools def metric(fn): @functools.wraps(fn) def wrapper(*args, **kw): start = time.time() re = fn(*args, **kw) end = time.time() print('%s executed in %s ms' % (fn.__name__, end-start)) return fn(*args, **kw) return wrapper # 测试 @metric def fast(x, y): time.sleep(0.0012) return x + y; @metric def slow(x, y, z): time.sleep(0.1234) return x * y * z; f = fast(11, 22) s = slow(11, 22, 33) if f != 33: print('测试失败!') elif s != 7986: print('测试失败!') """ 请把下面的Student对象的gender字段对外隐藏起来,用get_gender()和set_gender()代替,并检查参数有效性: class Student(object): def __init__(self, name, gender): self.name = name self.gender = gender """ class Student(object): def __init__(self, name, gender): self.name = name self.__gender = gender def get_gender(self): return self.__gender def set_gender(self, gender): self.__gender = gender bart = Student('Bart', 'male') print(bart.name, bart.get_gender()) if bart.get_gender() != 'male': print('测试失败!') else: bart.set_gender('female') if bart.get_gender() != 'female': print('测试失败!') else: print('测试成功!') """ 为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加: """ class Student(object): count = 0 def __init__(self, name): self.name = name Student.count+=1 # 测试: if Student.count != 0: print('测试失败!') else: bart = Student('Bart') if Student.count != 1: print('测试失败!') else: lisa = Student('Bart') if Student.count != 2: print('测试失败!') else: print('Students:', Student.count) print('测试通过!') """ 请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution: """ class Screen(object): @property def width(self): return self._width @width.setter def width(self, width_value): self._width = width_value @property def height(self): return self._height @height.setter def height(self, height_value): self._height = height_value @property def resolution(self): return self._width * self._height # 测试: s = Screen() s.width = 1024 s.height = 768 print('resolution =', s.resolution) if s.resolution == 786432: print('测试通过!') else: print('测试失败!') """" 运行下面的代码,根据异常信息进行分析,定位出错误源头,并修复: from functools import reduce def str2num(s): return int(s) def calc(exp): ss = exp.split('+') ns = map(str2num, ss) return reduce(lambda acc, x: acc + x, ns) def main(): r = calc('100 + 200 + 345') print('100 + 200 + 345 =', r) r = calc('99 + 88 + 7.6') print('99 + 88 + 7.6 =', r) main() """ from functools import reduce def str2num(s): s = s.strip() if s.replace('.','').isdigit(): if s.count('.') == 0: return int(s) else: return float(s) else: raise ValueError('input error') def calc(exp): ss = exp.split('+') print('ss=',ss) ns = map(str2num, ss) return reduce(lambda acc, x: acc + x, ns) def main(): r = calc('100 + 200 + 345') print('100 + 200 + 345 =', r) r = calc('99 + 88 + 7.6') print('99 + 88 + 7.6 =', r) main() """ 请将本地一个文本文件读为一个str并打印出来: """ #写入 fpath_wrig = r'C:\Users\Administrator\Desktop\LUOZIX.txt' with open(fpath_wrig, 'w') as f: w = f.write("woshiwshui\n wozainaer \n woyaoshfuu") #追加 fpath_wria = r'C:\Users\Administrator\Desktop\LUOZIX.txt' with open(fpath_wria, 'a') as f: w = f.write("\n1234455") #1查看 fpath = r'C:\Users\Administrator\Desktop\LUOZIX.txt' with open(fpath, 'r') as f: s = f.read() print(s) #2查看 with open(fpath, 'r') as fs: ss = fs.readlines() for x in ss: print(x)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章