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:\Python\Python_Project\day22\作业.py 用户名 密码 cp 文件路径 目的地址
# python D:\Python\Python_Project\day22\作业.py alex sb cp D:\python_22\day22\1.内容回顾.py D:\python_22\day21
# python D:\Python\Python_Project\day22\作业.py alex sb rm D:\python_22\day22
# python D:\Python\Python_Project\day22\作业.py alex sb rename D:\python_22\day22  D:\python_22\day23
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:\Python\Python_Project\day22')
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.
posted @ 2020-07-19 23:53  Raigor  阅读(116)  评论(0编辑  收藏  举报