Python实战练习2作业

所有代码都要加注释,作业贴一个github链接

作业1

冒泡排序每一行加注释说明

作业2

用类和面向对象的思想,“描述”生活中任意接触到的东西(比如动物、小说里面的人物,不做限制,随意发挥),数量为5个

作业3

  • 定义一个天山童姥类 ,类名为TongLao,属性有血量,武力值(通过传入的参数得到)。TongLao类里面有2个方法,
  1. see_people方法,需要传入一个name参数,如果传入”WYZ”(无崖子),则打印,“师弟!!!!”,如果传入“李秋水”,打印“呸,贱人”,如果传入“丁春秋”,打印“叛徒!我杀了你”
  2. fight_zms方法(天山折梅手),调用天山折梅手方法会将自己的武力值提升10倍,血量缩减2倍。需要传入敌人的hp,power,进行一回合制对打,打完之后,比较双方血量。血多的一方获胜。
  • 定义一个XuZhu类,继承于童姥。虚竹宅心仁厚不想打架。所以虚竹只有一个read(念经)的方法。每次调用都会打印“罪过罪过”
  • 加入模块化改造

希望各位同学在此基础上可以添加自己的“freestyle”哦

作业4

使用列表推导式写下面这个算法题
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

  • 示例 1:
    输入:[-4,-1,0,3,10]
    输出:[0,1,9,16,100]

  • 示例 2:
    输入:[-7,-3,2,3,11]
    输出:[4,9,9,49,121]

  • 提示:
    1 <= A.length <= 10000
    -10000 <= A[i] <= 10000
    A 已按非递减顺序排序。

作业


作业0

def bubblesort(list):#创建冒泡函数
    for i in range(len(list)-1): #设定循环次数
        for j in range(len(list)-1-i):#设定对比次数
            if list[j] > list[j+1]:#比较列表中相邻两个数的大小
                list[j],list[j+1] = list[j+1],list[j] #如果左边大于右边,就交换两个数的位置
    return list #返回冒泡后的list

list=[3,2,1,4,5,6,0,9]  #创建一个未排序的列表
print(bubblesort(list))  #将列表通过冒泡排序后打印出来

作业1

  • 狗类
class Dog:       #创建狗类
    def __init__(self,name,color):  #将共有属性初始化,方便实例化的时候对类变量进行赋值
        self.name = name            #类变量name
        self.color = color          #类变量color
    def bark(self):                 #定义狗狗共有的功能bark
        print(self.name,"喜欢汪汪汪~~~")   #打印xx狗喜欢汪汪汪
    def play(self):                  #定义狗狗共有的功能paly
        print(self.name,"爱玩丢球")     #打印xx狗爱玩丢球

mindog = Dog("小花","白色")    #实例化狗对象,并传入名字和颜色
mindog.bark()           #调用bark方法打印这只狗的特性
mindog.play()           #调用play方法打印这只狗的特性
  • 植物类
class Plant:   #创建植物类
    def __init__(self,subject,leaves):  #创建构造函数,说明类变量
        self.subject = subject          #类变量科目subject
        self.leaves = leaves            #类变量叶子leaves

    def growup(self):                   #定义共有的生长函数
        print("需要浇水才能长大哦~~")    #打印生长特性

    def workbyleaf(self):               #定义叶子的工作原理函数
        if self.leaves == "绿色":         #增加判断,如果传入的叶子颜色是绿色,就打印绿色叶子的作用
            print("绿色的叶子帮植物做光合作用哦")
        else:                               #如果传入的叶子颜色不是绿色,打印非绿色叶子的作用
            print("这个颜色的叶子我也不知道能干啥呢")

bamboo = Plant("bamboo","绿色")       #实例化竹子,传入竹子叶子颜色为绿色
bamboo.growup()                         #实例化类方法
bamboo.workbyleaf()                     #实例化workbyleaf方法

ziyeli = Plant("rosaceae","红色")        #实例化紫叶李,传入紫叶李叶子颜色为红色
ziyeli.growup()                         #实例化类方法
ziyeli.workbyleaf()                     #实例化workbyleaf方法
  • 计算机
class Computer():    #创建电脑类
    def __init__(self,type,price,color):   #创建构造函数,定义类变量
        self.type = type                    #类变量品牌
        self.price = price                  #类变量价格
        self.color = color                  #类变量颜色
    def product(self):                      #创建类方法
        if self.type == "微软":               #判断品牌,如果品牌为微软,播报中国工厂制造
            print("中国工厂制造哦")
        elif self.type == "MAC":              #判断品牌,如果品牌为MAC,播报老美的东西
            print("老美的东西")
        elif self.type == "DELL":             #判断品牌,如果品牌为DELL,播报本土品牌
            print("本土品牌")
        else:                                 #判断品牌,如果品牌为其他,播报不知道哪国的
            print("不知道哪国的")


mycomputer = Computer(type="DELL",price=5500,color="黑色")        #实例化自己的电脑
mycomputer.product()                    #实例化方法
  • 学习方法类
class StudyMethod():   #创建学习方式类
    def __init__(self,subject):     #创建构造方法,定义学科
        self.subject = subject
    def method(self):           #创建类方法
        if self.subject == "语文":  #判断如果学科是语文
            print("需要多读书积累知识,语文才能学得好")  #打印语文的学习方法
        elif self.subject == "数学": #判断如果学科是数学
            print("需要多做题进行练习")      #打印数学的学习方法
        elif self.subject == "英文": #判断如果学科是英文
            print("需要多背单词,练口语")     #打印英文的学习方法
        else:   #判断其他学科
            print("认真听课,经常和老师请教")   #打印其他学科的学习方法

mathMethod = StudyMethod("数学")  #实例化学习方式类
mathMethod.method()     #调用类方法
  • 人类
class People():  #创建人类
    def __init__(self,sex):  #创建构造函数,增加类变量
        self.sex = sex       #类变量性别
    def eat(self):          #创建吃的动作
        print("一日三餐都得吃,每个城市的人都喜欢不同的食物")   #打印吃的内容
    def study(self):        #创建学习的动作
        print("从九年制义务教育开始学习呀")      #打印学习的内容

me = People("女")        #实例化People类
me.eat()                #实例化吃函数
me.study()              #实例化学习的动作

作业2:

class TongLao:                         #创建童姥类
    def __init__(self,hp,power):        #构造函数,说明类属性
        self.hp = hp                    #类属性血量
        self.power = power              #类属性攻击值
    def see_people(self,name):          #定义类方法see_people
        if name == "WYZ":               #判断看到的人是WYZ
            print("师弟!!!")          #大呼师弟
        elif name == "李秋水":           #判断看到的人是李秋水
            print("呸,贱人")            #说呸,贱人
        elif name == "丁春秋":             #判断看到的人丁春秋
            print("叛徒!我杀了你")        #说叛徒我杀了你
        else:                               #判断看到的是其他人
            print("路人与我何干")             #说路人与我何干
    def fight_zms(self,enemy_hp,enemy_power):  #定义类方法fight_zms,并且声明需要传入敌人血量和攻击值
        hp = self.hp/2                          #将类变量中即童姥本人血量除二
        power = self.power * 10                 #将类变量中即童姥本人攻击值乘以10
        if (hp - enemy_power) > (enemy_hp - power):     #一轮打斗后,童姥本人血量为减去敌人攻击值,敌人血量为减去童姥攻击值,比较两者,如果童姥打斗后血量大于敌人
            print("哈哈哈,我赢了")                        #打印我赢了
        elif (hp - enemy_power) < (enemy_hp - power):       #如果一轮打斗后,童姥打斗后血量小于敌人
            print("再来一局")                               #打印再来一局
        else:                                               #如果一轮打斗后,血量相等
            print("没想到,你还有两下子")                     #夸赞对方还有两下子

tonglao = TongLao(1000,200)                         #实例化童姥
tonglao.see_people("路人甲")                           #实例化see_people方法
tonglao.fight_zms(5000,100)                         #实例化fight_zms方法

from TianLongBaBu.TongLao import TongLao   #导入TongLao类

class XuZhu(TongLao):   #继承TongLao
    def read(self):     #没写init方法,表示不重写,直接复用父类构造方法,然后新增子类方法read
        print("罪过罪过")       #打印read方法内容


xuzhu = XuZhu(1000,300)         #实例化虚竹
xuzhu.read()                    #实例化子类方法

作业四:

def DescendSort(list):          #创建非递减顺序排序函数
    list1 =sorted([i**2 for i in list])  #列表推导式,[i**2 for i in list]表示对list中的数平方,sorted()表示对列表推导出来的结果进行排序
    print(list1)                        #打印list平方后,排序结果

DescendSort(list=[-4,-1,0,3,10])     #调用函数,传入list[-4,-1,0,3,10]
DescendSort(list=[-7,-3,2,3,11])     #调用函数,传入list[-7,-3,2,3,11]

作业0

作业1

作业2

作业3

作业4

只有2个问题

  1. init 里面是实例变量,类变量不在任何方法中
  2. 作业3需要加入模块化的改造

其他作业都完成的很好,注释很详细,如果有足够的代码基础的话,注释可以只挑自己不会的地方写。不需要每行都写。

作业结构有点乱,可以看下楼下的同学,把第几个作业的链接分别标识出来。然后我再给你批哦

整体还是挺好的,问题就是格式有点乱,多余的注释有点多,不用的就删掉哦。
另外希望加一些别的freestyle和拓展。不止老师布置的部分哦

https://github.com/Fr0akie/python_test/tree/master/homework1

作业1

def bubble_sort(alist):
    for i in range(len(alist) - 1):  # 循环次数
        for j in range(len(alist) - 1 - i):  # 比较次数
            if alist[j] > alist[j + 1]:  # 比较相邻两者的值
                alist[j], alist[j + 1] = alist[j + 1], alist[j]  # 左边的值较大则交换两者的值
    return alist  # 返还排序后的list


list1 = [45, 22, 8, 30, 9, 10, 7, 6, 5, 4]
print(bubble_sort(list1))

作业2

lass Car:  # 定义一个车类
    def __init__(self, weight, color, brand):  # 成员变量有重量,颜色和品牌
        self.weight = weight
        self.color= color
        self.brand = brand

    def drive(self, distance):  # 方法开车, 参数为开车距离,单位为km
        print('这车要开{}km'.format(distance))


GTR = Car(1000, 'black', 'GTR')
GTR.drive(10)


class Cat:  # 定义一个猫类
    def __init__(self, color, gender):  # 成员变量有颜色和性别
        self.color = color
        self.gender = gender

    def eat(self):  # 方法吃, 如果颜色是橘色,则要吃很多鱼
        if self.color == 'orange':
            print('橘猫要吃很多鱼')
        else:
            print('猫要吃鱼')


orange_cat = Cat('orange', 'male')
orange_cat.eat()


class Person:  # 定义一个人类
    def __init__(self, gender, age, prefession):  # 成员变量有性别,年龄和职业
        self.gender = gender
        self.age = age
        self.profession = prefession

    def do_sth(self):  # 方法做事,职业是学生则学习,是工人则干活
        if self.profession == 'student':
            print('我是学生,我要学习')
        elif self.profession == 'worker':
            print('我是工人,我要干活')


employee = Person('male', '25', 'worker')
employee.do_sth()


class Calculator:  # 定义一个计算器类
    def __init__(self, brand):  # 成员变量有品牌
        self.brand = brand

    def product(self):  # 方法产品
        if self.brand == '卡西欧':
            print('卡西欧计算器,学生最爱')
        elif self.brand == '德州':
            print('德州计算器,高端')


casio = Calculator('卡西欧')
casio.product()


class bank_account:  # 定义一个银行类
    def __init__(self, branch, money):  # 成员变量有分行,存款数
        self.branch = branch
        self.money = money

    def deposit(self, deposit):  # 方法存款, 参数有存款数,存款增加要存的钱
        if deposit > 0:
            self.money += deposit
        else:
            print('操作异常,存款数必须大于0')

    def show_money(self):
        print('该账号有{}钱'.format(self.money))
        return self.money


account = bank_account('ICBC', 1000)
print(account.show_money())
account.deposit(200)
print(account.show_money())

作业3

class TongLao:
    def __init__(self, hp, power):
        self.hp = hp
        self.power = power

    def __see_people(self, name):
        if name == 'WYZ':
            print('师弟!!!!')
        if name == 'LQS':
            print('呸,贱人')
        if name == 'DCQ':
            print('叛徒!我杀了你')

    def __fight_zms(self, enermy_hp, enermy_power):
        self.hp /= 2
        self.power *= 10
        if self.hp - enermy_power > enermy_hp - self.power:
            print('Tonglao wins')
        else:
            print('The enermy wins')

from homework1.TongLao import TongLao

class XuZhu(TongLao):
    def __init__(self, hp, power, age):
        super(XuZhu, self).__init__(hp, power)
        self.age = age

    def read(self):
        print('罪过罪过')

xuzhu = XuZhu(10000, 5000, 20)
xuzhu.read()

作业4

def square_sort(l):
    alist = [num ** 2 for num in l]  # 将list的元素平方
    alist.sort()  # 降序排序
    return alist  # 返回排序后的list


a = [-4, -1, 0, 3, 10]

print(a)
print(square_sort(a))

作业

作业1:冒泡排序(每一行加注释说明)

代码地址

https://github.com/llpanyuan/bubble_sort/blob/master/bubble_sort.py

作业2:面向对象思想编程实例

代码地址

https://github.com/llpanyuan/object_oriented_instance/blob/master/object_oriented_instance.py

作业3:恶搞天龙八部游戏

童姥类与虚竹类

https://github.com/llpanyuan/tianlong_babu_game/blob/master/tonglao.py

游戏主体

https://github.com/llpanyuan/tianlong_babu_game/blob/master/tianlong_babu_game.py

游戏片段

游戏片段截图

作业4:算法题

代码地址

https://github.com/llpanyuan/derivation/blob/master/derivation.py

程序执行

算法题

补充作业:面向对象之开小车

代码地址

https://github.com/llpanyuan/electric_bicycle/blob/master/electric_bicycle.py

作业3定义成私有方法的目的是?请用注释写出来。
作业4还可以再做一些优化。希望再改进一下

很好哦,加入了很多自己的想法。
不过第四个作业是不是传错了。怎么是冒泡排序呀

:joy:不是传错了,我调用了下冒泡排序的方法,让输入的数组按照非递减排序

作业-20200425

所有代码都要加注释,作业贴一个github链接

作业1

冒泡排序每一行加注释说明

作业2

用类和面向对象的思想,“描述”生活中任意接触到的东西(比如动物、小说里面的人物,不做限制,随意发挥),数量为5个

作业3

  • 定义一个天山童姥类 ,类名为TongLao,属性有血量,武力值(通过传入的参数得到)。TongLao类里面有2个方法,
  1. see_people方法,需要传入一个name参数,如果传入”WYZ”(无崖子),则打印,“师弟!!!!”,如果传入“李秋水”,打印“呸,贱人”,如果传入“丁春秋”,打印“叛徒!我杀了你”
  2. fight_zms方法(天山折梅手),调用天山折梅手方法会将自己的武力值提升10倍,血量缩减2倍。需要传入敌人的hp,power,进行一回合制对打,打完之后,比较双方血量。血多的一方获胜。
  • 定义一个XuZhu类,继承于童姥。虚竹宅心仁厚不想打架。所以虚竹只有一个read(念经)的方法。每次调用都会打印“罪过罪过”
  • 加入模块化改造

希望各位同学在此基础上可以添加自己的“freestyle”哦

作业4

使用列表推导式写下面这个算法题
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

  • 示例 1:
    输入:[-4,-1,0,3,10]
    输出:[0,1,9,16,100]
  • 示例 2:
    输入:[-7,-3,2,3,11]
    输出:[4,9,9,49,121]
  • 提示:
    1 <= A.length <= 10000
    -10000 <= A[i] <= 10000
    A 已按非递减顺序排序。

作业0:冒泡排序
https://github.com/Maoxiaoying/MY_hogwarts_python-2-/blob/master/0_MyBubbleSort.py
作业1:自定义5个类
https://github.com/Maoxiaoying/MY_hogwarts_python-2-/blob/master/1_MyClass.py
作业2:童姥类
童姥:https://github.com/Maoxiaoying/MY_hogwarts_python-2-/blob/master/2_1_MyTongLao.py
虚竹:https://github.com/Maoxiaoying/MY_hogwarts_python-2-/blob/master/2_2_MyXuZhu.py
作业3:算法题
https://github.com/Maoxiaoying/MY_hogwarts_python-2-/blob/master/3_MyNoDecreasingSort.py

作业1 冒泡排序每一行加注释说明

作业2 用类和面向对象的思想,“描述”生活中任意接触到的东西(比如动物、小说里面的人物,不做限制,随意发挥),数量为5个


image

作业3 一回合制对打游戏

1、童姥类


2、虚竹类
https://github.com/jinzhe-mu/muwj/blob/master/python_first_job/job3/xuzhu.py
3、游戏主体

image

作业4 使用列表推导式写算法题

https://github.com/jinzhe-mu/muwj/blob/master/python_first_job/job4.py
image

作业1

冒泡排序每一行加注释说明
https://github.com/NancyKou/python_lianxi/tree/master/python_oo/homework1

作业2

用类和面向对象的思想,“描述”生活中任意接触到的东西(比如动物、小说里面的人物,不做限制,随意发挥),数量为5个
https://github.com/NancyKou/python_lianxi/tree/master/python_oo/homework2

作业3 天龙八部game

https://github.com/NancyKou/python_lianxi/tree/master/python_oo/homework3

作业4

使用列表推导式写下面这个算法题
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

  • 示例 1:
    输入:[-4,-1,0,3,10]
    输出:[0,1,9,16,100]
  • 示例 2:
    输入:[-7,-3,2,3,11]
    输出:[4,9,9,49,121]
  • 提示:
    1 <= A.length <= 10000
    -10000 <= A[i] <= 10000
    A 已按非递减顺序排序。

https://github.com/NancyKou/python_lianxi/tree/master/python_oo/homework4

课后作业一:冒泡排序

https://github.com/yinyingyi/homework/blob/master/bubbling.py
image

课后作业二:用类和面向对象的思想,描述5个生活中接触到的东西


image
image
image
image
image

课后作业三:童姥大战敌人(童姥game.py、虚竹game001.py)



做完本次作业有以下几个疑问,需要请教老师,期待解答:

  1. 代码第35行(如下图),为了Xuzhu调用时不输出初始属性值,放在了fight_zms()方法里,感觉不太合适,有更好的方法吗?
print("童姥最初属性值为:hp={}、power={}、mp={}".format(self.hp,self.power,self.mp))
  1. 代码第57行(如下图一),该行代码是为了查看比赛第几局,所以放在了for循环(如下图二)里面,但如果前3局已经决出胜负,还是会打印第四局、第五局字样(如下图三)。实际上,如果已经决出胜负,不希望再继续打印。对于这种情况该如何改进?
print("第{}回合".format(i))    #打印回合次数
        for i in range(5):      #for循环,指定循环次数(最多5次)
            i += 1      #i变量自加,用于判断比赛回合
            print("第{}回合".format(i))    #打印回合次数
            while self.z != 3:      #当z=3(某一方赢3次)时,结束当前循环语句
                self.hp = self.hp - self.enemy_power    #定义当前童姥hp计算公式
                self.enemy_hp = self.enemy_hp - self.power * self.mp    #定义当前敌人hp计算公式
                #输出出招后童姥、敌人的hp,并限定显示俩位数:.2f
                print("打完后,童姥hp={:.2f}、敌人hp={:.2f}".format(self.hp, self.enemy_hp))

                if self.hp < 0:     #如果童姥hp<0,敌人赢,输出童姥输了
                    self.n += 1     #n+1,代表敌人赢一局
                    print("m={}、n={},这局童姥输了".format(self.m, self.n))
                    if self.n == 3:     #如果敌人已经赢了3局
                        self.z = 3      #返回z=3
                        break       #结束while循环
                    break       #跳出while循环语句,进入下一局比赛(下一次循环)
                elif self.hp == self.enemy_hp == 0:     #如果童姥hp=敌人hp=0,输出平局
                    print("m={}、n={},这局是平局".format(self.m, self.n))
                    if i == 5:      #如果已经循环了5次,且都是平局
                        self.z = 3  #返回z=3
                        break   #结束while循环
                    break       #跳出while循环语句,进入下一局比赛(下一次循环)
                elif self.enemy_hp < 0:     #如果敌人hp<0,童姥赢,输出童姥赢了
                    self.m += 1             #m+1,代表童姥赢一局
                    print("m={}、n={},这局童姥赢了".format(self.m, self.n))
                    if self.m == 3:     #如果童姥已经赢了3局
                        self.z = 3      #返回z=3
                        break       #结束while循环
                    break       #跳出while循环语句,进入下一局比赛(下一次循环)

image
3.代码77行(如下图),if语句没有用else,不过执行结果是正确的。请问if语句可以只用 if…elif…,不加else吗?这样规不规范?

                if self.hp < 0:     #如果童姥hp<0,敌人赢,输出童姥输了
                    self.n += 1     #n+1,代表敌人赢一局
                    print("m={}、n={},这局童姥输了".format(self.m, self.n))
                    if self.n == 3:     #如果敌人已经赢了3局
                        self.z = 3      #返回z=3
                        break       #结束while循环
                    break       #跳出while循环语句,进入下一局比赛(下一次循环)
                elif self.hp == self.enemy_hp == 0:     #如果童姥hp=敌人hp=0,输出平局
                    print("m={}、n={},这局是平局".format(self.m, self.n))
                    if i == 5:      #如果已经循环了5次,且都是平局
                        self.z = 3  #返回z=3
                        break   #结束while循环
                    break       #跳出while循环语句,进入下一局比赛(下一次循环)
                elif self.enemy_hp < 0:     #如果敌人hp<0,童姥赢,输出童姥赢了
                    self.m += 1             #m+1,代表童姥赢一局
                    print("m={}、n={},这局童姥赢了".format(self.m, self.n))
                    if self.m == 3:     #如果童姥已经赢了3局
                        self.z = 3      #返回z=3
                        break       #结束while循环
                    break       #跳出while循环语句,进入下一局比赛(下一次循环)

4.写代码过程中突然意识到,这个游戏是不没有平局的可能性啊?因为有先出手后出手这个问题?我自己绕的有点迷糊
5. 代码中有一个bug,当双方最后血量都是负数,且童姥hp>敌人hp,但是童姥输了(如下图)。这个问题和上面的问题有点相似,越绕越迷糊
image

课后作业四:列表推导式


image

0425python作业提交:

作业1:冒泡排序每一行加注释说明
作业2:用类和面向对象的思想,“描述”生活中任意接触到的东西(比如动物、小说里面的人物,不做限制,随意发挥),数量为5个
作业3:定义一个天山童姥类 ,类名为TongLao……
作业4:使用列表推导式写下面这个算法题:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

这句 “定义变量值,加self后可被其他变量调用,否则无法调用”是在__init__方法中,不是任意一个方法

你可以打印的内容去掉童姥两个字,虚竹和童姥用不就都合理了吗。虚竹本来就是继承童姥的属性的呀

print("最初属性值为:hp={}、power={}、mp={}".format(self.hp,self.power,self.mp))

你代码的逻辑也太绕了。不过刚开始这样挺好的,加了很多自己的思考。如果在决出胜负的时候不希望继续打印,那么就要break掉你的for循环。这是其中一种方法。

可以,没有问题

你玩两局回合制游戏就懂了 :joy: 本来回合制游戏就是有先手后手的,而且咱们的规则是谁的血量先小于等于0,谁就输了。回合制游戏是不会有平局的。

  1. 变量也是小写字母哦
  2. 虚竹类和天山童姥要拆成两个文件

其他没有什么问题,写的非常好!

关闭