zoukankan      html  css  js  c++  java
  • 21 练习题:os.walk() 面向对象基础

    # 算法
    # 二分查找  [1,2,3,4,5,6,7,8,9,10,27,36,46,58,69] - 有序列表
    # in index 从列表中找到一个值的位置
    # 实现上面的功能 - 用代码
    def b_search(li, target, right=None, left=0):
        if right == None:
            right = len(li)
        mid = (right + left) // 2
        if li[mid] == target:
            return mid
        elif right <= left:
            return 0  # 递归出口
        elif li[mid] < target:
            return b_search(li, target, right, mid + 1)
        else:
            return b_search(li, target, mid - 1, left)
    l = [1,2,3,4,5,6,7,8,9,10,27,36,46,58,69]
    print(b_search(l, 69))
    
    
    # sys.argv练习
    # 写一个python脚本,在cmd里执行
    # python D:PythonPython_Projectday22作业.py 用户名 密码 cp 文件路径 目的地址
    # python D:PythonPython_Projectday22作业.py alex sb cp D:python_22day221.内容回顾.py D:python_22day21
    # python D:PythonPython_Projectday22作业.py alex sb rm D:python_22day22
    # python D:PythonPython_Projectday22作业.py alex sb rename D:python_22day22  D:python_22day23
    import os
    import sys
    import shutil
    temp_list = sys.argv[:]
    if temp_list[0] == "0":
        exit()
    elif len(temp_list) < 5 or len(temp_list) > 6:
        print('ILLEGAL INPUT.')
        exit()
    file, user, password, mode, path_1 = temp_list[:5]
    if len(temp_list) == 6:
        path_2 = temp_list[5]
        s = ' '.join(temp_list)
        if mode == 'cp':
            # shutil.copy2(path_1, path_2)
            print(s)
        if mode == 'rename':
            # os.rename(path_1, path_2)
            print(s)
        else:
            print('ILLEGAL INPUT.')
            exit()
    elif len(temp_list) == 5:
        s = ' '.join(temp_list)
        if mode == 'rm':
            # shutil.rmtree(path_1)
            print(s)
        else:
            print('ILLEGAL INPUT.')
            exit()
    
    
    
    # 使用walk来计算文件夹的总大小
    import os
    obj = os.walk(r'D:PythonPython_Projectday22')
    storage_space = 0
    for i in obj:
        for file in i[2]:
            temp_path = os.path.join(i[0], file)
            storage_space += os.path.getsize(temp_path)
            # print(temp_path + '>>>>' + str(os.path.getsize(temp_path)))
    print(storage_space)
    
    
    
    # 定义一个圆形类,半径是这个圆形的属性,实例化一个半径为5的圆形,一个半径为10的圆形
    #     完成方法
            # 计算圆形面积
            # 计算圆形周长
    from math import pi as PI
    class Circle:
        def __init__(self, radius):
            self.radius = radius
        def get_area(self):
            return PI * (self.radius**2)
        def get_perimeter(self):
            return 2 * PI * self.radius
    
    circle_1 = Circle(5)
    circle_2 = Circle(10)
    print(circle_1.get_area())  # 78.53981633974483
    print(circle_2.get_area())  # 314.1592653589793
    print(circle_1.get_perimeter())  # 31.41592653589793
    print(circle_2.get_perimeter())  # 62.83185307179586
    
    
    
    # 定义一个用户类,用户名和密码是这个类的属性,实例化两个用户,分别有不同的用户名和密码
            # 登陆成功之后才创建用户对象
            # 设计一个方法 修改密码
    class User:
        def __init__(self, username, password):
            self.username = username
            self.password = password
        def change_password(self, old_password, new_password):
            if self.password != old_password:
                return False
            else:
                self.password = new_password
            return True
    
    alex = User('alex', 123)
    taibai = User('taibai',456)
    alex.change_password(123,12345678)
    print(alex.__dict__)  # {'username': 'alex', 'password': 12345678}
    
    
    
    # 继续完成人狗大战
        # 你是人
        # 狗是一个npc
        # 你一个回合  狗一个回合
        # 狗掉的血是一个波动值
        # 闪避概率
    import random
    class New_player:
        def __init__(self, name):
            self.name = name
            self.hp = 500
            self.ad_max = 50
            self.ad_min = 30
            self.dodge = 0.2
        def normal_attack(self, obj):
            if random.random() <= self.dodge:
                print(f"{obj.name} dodged {self.name}'s attack.")
            else:
                lose_hp = random.randint(self.ad_min, self.ad_max)
                obj.hp -= lose_hp
                print(f"{self.name} attack {obj.name}, {obj.name} lose {lose_hp}HP.")
    
    class New_dog:
        def __init__(self, name):
            self.name = name
            self.hp = 500
            self.ad_max = 40
            self.ad_min = 20
            self.dodge = 0.2
        def normal_attack(self, obj):
            if random.random() <= self.dodge:
                print(f"{obj.name} dodged {self.name}'s attack.")
            else:
                lose_hp = random.randint(self.ad_min, self.ad_max)
                obj.hp -= lose_hp
                print(f"{self.name} attack {obj.name}, {obj.name} lose {lose_hp}HP.")
    
    alex = New_player('alex')
    xiaobai = New_dog('xiaobai')
    
    def battle(obj_1, obj_2):
        while True:
            if obj_2.hp <= 0:
                print(f'{obj_2.name} died.')
                break
            elif obj_1.hp <= 0:
                print(f'{obj_1.name} died.')
                break
            obj_1.normal_attack(obj_2)
            obj_2.normal_attack(obj_1)
    
    battle(alex, xiaobai)
    
    # alex attack xiaobai, xiaobai lose 49HP.
    # alex dodged xiaobai's attack.
    # alex attack xiaobai, xiaobai lose 41HP.
    # alex dodged xiaobai's attack.
    # xiaobai dodged alex's attack.
    # xiaobai attack alex, alex lose 32HP.
    # alex attack xiaobai, xiaobai lose 43HP.
    # xiaobai attack alex, alex lose 26HP.
    # alex attack xiaobai, xiaobai lose 48HP.
    # alex dodged xiaobai's attack.
    # alex attack xiaobai, xiaobai lose 36HP.
    # xiaobai attack alex, alex lose 27HP.
    # xiaobai dodged alex's attack.
    # xiaobai attack alex, alex lose 37HP.
    # alex attack xiaobai, xiaobai lose 48HP.
    # xiaobai attack alex, alex lose 29HP.
    # alex attack xiaobai, xiaobai lose 30HP.
    # alex dodged xiaobai's attack.
    # xiaobai dodged alex's attack.
    # xiaobai attack alex, alex lose 23HP.
    # alex attack xiaobai, xiaobai lose 42HP.
    # alex dodged xiaobai's attack.
    # alex attack xiaobai, xiaobai lose 35HP.
    # xiaobai attack alex, alex lose 32HP.
    # xiaobai dodged alex's attack.
    # xiaobai attack alex, alex lose 27HP.
    # alex attack xiaobai, xiaobai lose 45HP.
    # alex dodged xiaobai's attack.
    # xiaobai dodged alex's attack.
    # xiaobai attack alex, alex lose 38HP.
    # alex attack xiaobai, xiaobai lose 35HP.
    # xiaobai attack alex, alex lose 28HP.
    # alex attack xiaobai, xiaobai lose 35HP.
    # xiaobai attack alex, alex lose 29HP.
    # alex attack xiaobai, xiaobai lose 38HP.
    # alex dodged xiaobai's attack.
    # xiaobai died.
    
  • 相关阅读:
    【转】strlen和mb_strlen区别(php获得中英文混合字符长度)
    PHP字符串替换的相关方法介绍
    php表单转换textarea换行符的方法
    vue生命周期及其作用
    elemenui点击单行触发样式,选中或不选中复选框
    flutter 介绍和环境搭建
    flutter组件
    tora消息机制(事件监听,触发,取消)
    Promise功能与应用
    CCF CSP 20018031 跳一跳
  • 原文地址:https://www.cnblogs.com/raygor/p/13342119.html
Copyright © 2011-2022 走看看