,46,47,48,49

昨天写了忘了保存了 呜呜

 

第四十六讲:

0:类中类

1:__get__、__set__ 和 __delete__

2:竟然都会

3:20,0

4:test.x是一个类的实例对象

5:

class MyDes:
    def __init__(self,value,str1):
        self.value = 10
        self.str1 = str1

    def __get__(self, instance, owner):
        print('正在获取变量'+self.str1)
        return self.value
    def __set__(self, instance, value):
        print('正在修改变量:'+self.str1)
        self.value = value
    def __delete__(self, instance):
        print('噢~这个变量没法删除~')

6:

class Record:
    def __init__(self,value,str1):
        self.value = value
        self.str1 = str1
        self.f = open('record.txt','a')

    def __get__(self, instance, owner):
        self.f.write('%s变量于北京时间%s被读取,%s=%s\n'%(self.str1,time.ctime(),self.str1,str(self.value)))
        return self.value
    def __set__(self, instance, value):

        self.value = value
        self.f.write('%s变量于北京时间%s被修改,%s=%s\n'%(self.str1,time.ctime(),self.str1,str(self.value)))
    def __delete__(self, instance):
        print('噢~这个变量没法删除~')

class Test:
    x = Record(10, 'x')
    y = Record(8.8, 'y')

test = Test()
print(test.x)
test.y = 'dsads'

7:

import pickle

class MyDes:
    saved = []
    def __init__(self,str1):
        self.str1 = str1
        self.filename = str1+'.pkl'

    def __get__(self, instance, owner):
        if self.str1 not in MyDes.saved:
            raise AssertionError("还未赋值")
        with open (self.filename,'rb') as f:
            value = pickle.load(f)
        return  value

    def __set__(self, instance, value):

        with open (self.filename,'wb') as f:
            pickle.dump(value,f)
        MyDes.saved.append(self.str1)



    def __delete__(self, instance):
        os.remove(self.filename)
        MyDes.saved.remove(self.str1)

class Test:
    x = MyDes('x')
    y = MyDes('y')

test = Test()
test.y = 'dsads'
print(test.y)

 

 

 

 

 

第四十六讲!!!!!!!

0:  大概是 序列 字典   元组?   对不起 没有字典 是字符串

1:__setitem__        __delitem__

 

 

2:__reversed__

3:__len__

4:__getitem__  __setitem__   __delitem__

5:因为很自由

 

6:

下面的是错误的 ,,我忽略了字典键值是不变的这一事实。

class CountList:
    def __init__(self, *args):
        self.values = [x for x in args]
        self.count = {}.fromkeys(range(len(self.values)), 0)

    def __len__(self):
        return len(self.values)

    def __setitem__(self, key, value):
        if key<len(self.values):
            self.values[key] = value
        else:
            print("越界访问")
    def __delitem__(self, key):
        if key<len(self.values):
            del self.count[key]
            self.values.remove(self.values[key])

        else:
            print("越界访问")

    def counter(self,index):
        return self.count[index]

    def append(self,value):
        self.values.append(value)
        self.count[len(self.values)] = 0

    def pop(self):
        if len(self.values) ==0:
            print('抱歉 空的')
        else:
            value = self.values[len(self.values)-1]
            self.values.remove(self.values[len(self.values)-1])
            del self.count[len(self.values)-1]

    def reverse(self):
        new_count = {}
        self.values = self.values[::-1]
        for i in range(len(self.count)):
            new_count[len(self.count)-1-i] = self.count[i]
        self.count = new_count






    def __getitem__(self, key):
        self.count[key] += 1
        return self.values[key]

下面是答案

class CountList(list):
    def __init__(self, *args):
        super().__init__(args)
        self.count = []
        for i in args:
            self.count.append(0)

    def __len__(self):
        return len(self.count)

    def __getitem__(self, key):
        self.count[key] += 1
        return super().__getitem__(key)

    def __setitem__(self, key, value):
        self.count[key] += 1
        super().__setitem__(key, value)

    def __delitem__(self, key):
        del self.count[key]
        super().__delitem__(key)

    def counter(self, key):
        return self.count[key]

    def append(self, value):
        self.count.append(0)
        super().append(value)

    def pop(self, key=-1):
        del self.count[key]
        return super().pop(key)

    def remove(self, value):
        key = super().index(value)
        del self.count[key]
        super().remove(value)

    def insert(self, key, value):
        self.count.insert(key, 0)
        super().insert(key, value)

    def clear(self):
        self.count.clear()
        super().clear()

    def reverse(self):
        self.count.reverse()
        super().reverse()

 

答案就硬作弊呗 

 

 

第四十八讲:

 

  0:就是可以逐个访问的一个对象

1:是吧

2:不行

3: iter() 看报不报错

4: 报错  stopiteration

5:

a = iter(range(5))
while True:
    try :
        b = next(a)
    except StopIteration:
        break
    print(b)

6: 想不 出来 。。。。。。中午遇到了好可爱的妹妹 呜呜呜  不敢要联系方式

import datetime as dt

class LeapYear:
    def __init__(self):
        self.now = dt.date.today().year

    def isLeapYear(self, year):
        if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
            return True
        else:
            return False

    def __iter__(self):
        return self

    def __next__(self):
        while not self.isLeapYear(self.now):
            self.now -= 1

        temp = self.now
        self.now -= 1

        return temp
leapYears = LeapYear()

for i in leapYears:
    if i >=2000:
        print(i)
    else:
        break

 

7: 对不起 可是函数真的很简单 

def MyRev(str1):
    str1_re = list(reversed(str1))
    return str1_re



myRev = MyRev("FishC")
for i in myRev:
    print(i, end='')
class MyRev:
    def  __init__(self,str1):
        self.str1 = str1
        self.index = len(self.str1)


    def __iter__(self):
        return  self
    def __next__(self):
        if self.index == 0:
            raise StopIteration
        temp = self.str1[self.index-1]
        self.index -= 1
        return  temp

 

 

49讲:

 

0:  出错时 结束时 return时

 

1: 想暂停的地方暂停  下次造访这个函数时 从暂停的地方运行

2:不行把   错 !可以 实际上 生成器就是迭代器实现的 

3:return 嘛

4:保存函数进度?防止重复执行?

5:下次执行函数时还能从头来

6:

def myRev(data):
    for index in range(len(data)-1, -1, -1):
        yield data[index]

 

7:  sorry

import math

def is_prime(number):
    if number > 1:
        if number == 2:
            return True
        if number % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0:
                return False
        return True
    return False

def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1

def solve():
    total = 2
    for next_prime in get_primes(3):
        if next_prime < 2000000:
            total += next_prime
        else:
            print(total)
            return

if __name__ == '__main__':
    solve()

 

posted @ 2021-07-09 17:07  yi术家  阅读(227)  评论(0)    收藏  举报