Python教程

Python基础学习3(函数的魅力)

本文主要是介绍Python基础学习3(函数的魅力),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Python基础学习3(函数的魅力)

练习题1

在这里插入图片描述

答1

#1.怎么给函数编写文档
'''将注释放在def语句下面,(单引号,双引号,三引号都可以),在通过func.__doc__查看文档'''
def double(a):
    '''返回两倍'''
    a *= 2
    return a
print(double.__doc__)
print(double(2))
#返回两倍
#4
#2.参数和返回值注解
'''代码执行时,注解不会产生任何影响,参数的注解使用:接在参数后面,如果是默认参数,接在参数和=之间,返回值的注解在()外接->,表示注解,可以使用func.__annotations__查看类型'''
def function(test:str,max_len:'int>0'=80) ->str:
    test = test + str(max_len)
    return test
print(function('adc',10))
print(function.__annotations__)
#adc10
#{'test': <class 'str'>, 'max_len': 'int>0', 'return': <class 'str'>}
#3.改变闭包中对数字,字符串,元祖等不可变元素更新
'''闭包中定义的变量都是局部变量,局部变量改变会报错'''
def make_averager():
    count = 0
    total = 0
    def averager (new_value):
        count += 1
        total += new_value
        return total / count
    return averager
avg = make_averager()
avg(10)
#UnboundLocalError: local variable 'count' referenced before assignment
'''使用nonlocal声明变量即可改变'''
def make_averager():
    count = 0
    total = 0
    def averager (new_value):
        nonlocal count,total
        count += 1
        total += new_value
        return total / count
    return averager
avg = make_averager()
print(avg(10))
#10.0
#4.利用lambda表达式排序
a = [[6,5],[3,7],[2,8]]
a1 = sorted(a,key= lambda x:x[0],reverse=False)
a2 = sorted(a,key= lambda x:x[-1],reverse=True)
print(a1)
print(a2)
#[[2, 8], [3, 7], [6, 5]]
#[[2, 8], [3, 7], [6, 5]]

练习题2

在这里插入图片描述

答2

URL=‘https://blog.csdn.net/qq_42659468/article/details/108489761?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162651113416780274120777%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162651113416780274120777&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-108489761.first_rank_v2_pc_rank_v29&utm_term=%E6%B1%89%E8%AF%BA%E5%A1%94python&spm=1018.2226.3001.4187’

'''思路:可以看上方的网址链接,讲述十分清楚,本质是递归'''
def Han_Nou_Ta(n:int,i:str,j:str,k:str):
    if n == 1:
        print(i,'->',k)
        return
    Han_Nou_Ta(n-1,i,k,j)
    Han_Nou_Ta(1,i,j,k)
    Han_Nou_Ta(n-1,j,i,k)
Han_Nou_Ta(3,'1','2','3')
#64太多不好看结果,设为3
1 -> 3
1 -> 2
3 -> 2
1 -> 3
2 -> 1
2 -> 3
1 -> 3

练习题3

在这里插入图片描述

答3

#1.类属性就是在类中,实例之外定义的属性;实例属性就是在实例中定义的属性
#2.在方式前加上两个__,即可定义私有方法 
class Person:
    def __name(self):
        print('私有方法 ')
#3.myfunc方法中没用指定self参数
class C:
    def myfunc(self):
        print('hello!')
c = C()
c.myfunc() #hello!
#4.代码如下
class Ticket():
    #定义类属性
    sale = 100
    sale_child = 50
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def workday(self):
        cost = 100*self.x+50*self.y
        print('%d个成人%d个小孩花费%d元' %(self.x,self.y,cost))
    def dayoff(self):
        cost = (100*self.x+50*self.y)*1.2
        print('%d个成人%d个小孩花费%d元' %(self.x,self.y,cost))
t = Ticket(2,1)
t.workday()
#2个成人1个小孩花费250元

练习题4

在这里插入图片描述

答4

#1.__new__:__new__ 方法主要是当你继承一些不可变的 class 时(比如 int, str, tuple ), 提供给你一个自定义这些类的实例化过程的途径
#2.__init__:构造器,当一个实例被创建的时候调用的初始化方法
#3.__str__:__str__(self) 的返回结果可读性强。也就是说, __str__ 的意义是得到便于人们阅读的信息。
#4.__rstr__:未找到相应方法
#__repr__(self)相较于__str__的返回结果应更准确。怎么说, __repr__ 存在的目的在于调试,便于开发者使用
#5.__getitem__:__getitem__(self, key) 定义获取容器中元素的行为,相当于 self[key] 
#6.__setitem__:__setitem__(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value

练习题5

在这里插入图片描述

答5

import time

class Mytime(object):
    def __init__(self):
        self.__info = '未开始计时!'
        self.__begin = None
        self.__end = None
        self.__jg = 0

    def __str__(self):
        return self.__info

    def __repr__(self):
        return self.__info

    def start(self):
        print('计时开始...')
        self.__begin = time.localtime()

    def stop(self):
        if not self.__begin:
            print('提示:请先调用start()开始计时!')
            return
        self.__end = time.localtime()
        self.__jg = time.mktime(self.__end) - time.mktime(self.__begin)
        self.__info = '共运行了%d秒' % self.__jg
        print('计时结束!')
        return self.__jg

    def __add__(self, other):
        return '共运行了%d秒' % (other.__jg + self.__jg)
t1 = Mytime()
print(t1)
#未开始计时!
t1.stop()
#提示:请先调用start()开始计时!
t1.start()
#计时开始...
time.sleep(5)
t1.stop()
#计时结束!
print(t1)
#共运行了5秒
t2 = Mytime()
t2.start()
time.sleep(7)
t2.stop()
print(t2)

print(t1+t2)
'''
未开始计时!
提示:请先调用start()开始计时!
计时开始...
计时结束!
共运行了5秒
计时开始...
计时结束!
共运行了7秒
共运行了12秒
'''

练习题6

在这里插入图片描述

答6

#1.用all方法,可以查出模块下不带_的方法可以直接调用
import random
print(random.__all__)
#['Random', 'SystemRandom', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
#2.查询Collection模块的基础用法
'''思路:最常见的元素自然就是出现次数最多的元素了,所以需要对每个出现的元素进行计数
Collections模块中的Counter方法 就是计数器
'''
from collections import Counter
language = ['PHP', 'PHP', 'Python', 'PHP', 'Python', 'JS', 'Python', 'Python','PHP', 'Python']
c = Counter(language)
c = c.most_common(1)[0][0]
print(c)
#Python
'''注解:Counter下的most_common([n]),生成Counter对象后,有种情况是键值对太多,我们只在乎出现频率最高的几项,可以使用该方法,参数n代表前n个最常出现的键值对。c.most_common(1)的结果是[('Python', 5)]'''

练习题7

在这里插入图片描述

答7

'''思路:重点处理时区的问题,可以使用正则表达式匹配,也可以使用字符串的切片'''
import datetime
def to_timestamp(dt_str:str, tz_str:str):
    tz = tz_str.split('C')[1]
    tz = tz.split(':')[0]
    tz = 0 - int(tz)
    time = datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(hours = tz)
    time = time.timestamp()
    print(time)
to_timestamp('2020-6-1 08:10:30','UTC+5:00')
to_timestamp('2020-6-1 08:10:30','UTC-9:00')

练习题8

在这里插入图片描述

答8

'''思路:首先得到每个year的1月1号是周几,再计算第一个周末是几号,再加7循环即可得到所有的周末'''
from datetime import date, timedelta
def all_sundays(year):
    dt = date(year, 1, 1) #得到1月1号
    dt += timedelta(days = 6 - dt.weekday()) #应该是dt.weekday()+1再用7-
    while dt.year == year:
        yield dt
        dt += timedelta(days = 7)
for s in all_sundays(2021):
    print(s)
#2021-01-03
#2021-01-10
#2021-01-17

练习题9

在这里插入图片描述

答9

#1.可以指定编码格式,'gbk'中文格式。
f = open('Chinese.txt','r',encoding='gbk')
#2.
def longest_word(filename):
 with open(filename, 'r') as infile:
 words = infile.read().split()
 max_len = len(max(words, key=len))
 return [word for word in words if len(word) == max_len]
print(longest_word('res/test.txt'))

格式,'gbk’中文格式。
f = open(‘Chinese.txt’,‘r’,encoding=‘gbk’)
#2.
def longest_word(filename):
with open(filename, ‘r’) as infile:
words = infile.read().split()
max_len = len(max(words, key=len))
return [word for word in words if len(word) == max_len]
print(longest_word(‘res/test.txt’))


                    
这篇关于Python基础学习3(函数的魅力)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!