鱼C论坛

 找回密码
 立即注册
查看: 734|回复: 16

我又来了,小甲鱼课后习题,又出现问题了

[复制链接]
发表于 2018-8-24 20:26:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:小甲鱼课后习题,小甲鱼吃鱼的小游戏,出现了问题:
代码:
import random
fish_g = []
for i in range(0,10):
    fish_g += [i]


#定义鱼类,龟类
class Fish():
    def __init__(self,name):
        self.name = name
        self.x = random.randint(0,10)
        self.y = random.randint(0,10)

    def generate(self):
        return self.x,self.y

    def move(self):
        direct = random.randint(1,4)

        #判断鱼的种类,用随机函数,确定移动步伐
        if self.name == "Fish":
            step = 0
        else:
            step = 1

        #判断鱼的移动方向   
        if direct == 1:
            self.x =self.x + 1 + step*random.randint(0,1)
        if direct == 2:
            self.x =self.x - 1 - step*random.randint(0,1)
        if direct == 1:
            self.y =self.y + 1 + step*random.randint(0,1)
        if direct == 1:
            self.y =self.y - 1 - step*random.randint(0,1)

        #判断是否出界
        if self.x > 10:
            self.x = 10 - (self.x - 10)
        if self.y>10:
            self.y = 10 -(self.y -10)
        if self.x < 0:
            self.x = 0 - (0 - self.x)
        if self.y < 0:
            self.y = 0 - (0 - self.y)

        return self.x,self.y
   
   
class Turtle(Fish):
    def __init__(self,phy_consumption=100):
        super().__init__(Fish)
        self.phy_consumption = phy_consumption
    def spirit(self):
        if self.phy_consumption >0:
            self.phy_consumption -= 1
        else:
            self.phy_consumption=0
        return self.phy_consumption

   
    def eat(self):
        self.phy_consumption += 20
        return self.phy_consumption
   


def main_fish_turtle():
    count=0
    #随机产生鱼和乌龟
    for i in range(0,10):
        c1 = Fish("Fish")
        fish_g[i] = c1.generate()
        

    c2 = Turtle("Turtle")
    turtle_g = c2.generate()

    print(fish_g)
    print(turtle_g)
    for i in range(10):
        if fish_g[i] == turtle_g:
            del fish_g[i]
            turtle_eat = c2.eat()
            count +=1
    print("我操,刚开始就死了%d只鱼,小乌龟去死吧!"%count)
   
    while c2.spirit()>0:
        for i in range(10-count):
            fish_g[i] = c1.move()
        turtle_g = c2.move()
        c2.spirit()
        for i in range(10-count):
            if fish_g[i] == turtle_g:
                del fish_g[i]
                turtle_eat = c2.eat()
                print("吃鱼了,吃鱼了")
                count +=1

main_fish_turtle()

出现的问题是:
[(7, 5), (10, 3), (8, 9), (2, 0), (8, 4), (5, 1), (8, 9), (7, 5), (5, 2), (10, 10)]
(1, 3)
我操,刚开始就死了0只鱼,小乌龟去死吧!
Traceback (most recent call last):
  File "C:\python\2.模块\Turtleeatfish.py", line 99, in <module>
    main_fish_turtle()
  File "C:\python\2.模块\Turtleeatfish.py", line 87, in main_fish_turtle
    while c2.spirit()>0:
  File "C:\python\2.模块\Turtleeatfish.py", line 54, in spirit
    if self.phy_consumption >0:
TypeError: '>' not supported between instances of 'str' and 'int'



我单独拿出Turtle进行,c2.spirit()>0是可以判断的,我完全晕了,各位大哥帮下忙!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-24 20:41:55 | 显示全部楼层
为什么你喜欢斜体,我表示要歪着脑袋看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 20:43:50 | 显示全部楼层
错误好的,感觉逻辑还错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 20:45:46 | 显示全部楼层
Chysial 发表于 2018-8-24 20:43
错误好的,感觉逻辑还错了

我表示粘贴过去缩进乱七八糟的,你是不是从论坛复制的内容,没自己敲的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 20:46:24 | 显示全部楼层
边界和前边【i】的错误我知道了,红色有问题,死活不知道怎么改,大哥们帮下忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 20:52:05 | 显示全部楼层
Chysial 发表于 2018-8-24 20:46
边界和前边【i】的错误我知道了,红色有问题,死活不知道怎么改,大哥们帮下忙

你先把代码粘贴对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 20:59:25 | 显示全部楼层
import random
fish_g = []
for i in range(0,10):
    fish_g += 【i】


#定义鱼类,龟类
class Fish():
    def __init__(self,name):
        self.name = name
        self.x = random.randint(0,10)
        self.y = random.randint(0,10)

    def generate(self):
        return self.x,self.y

    def move(self):
        direct = random.randint(1,4)

        #判断鱼的种类,用随机函数,确定移动步伐
        if self.name == "Fish":
            step = 0
        else:
            step = 1

        #判断鱼的移动方向   
        if direct == 1:
            self.x =self.x + 1 + step*random.randint(0,1)
        if direct == 2:
            self.x =self.x - 1 - step*random.randint(0,1)
        if direct == 3:
            self.y =self.y + 1 + step*random.randint(0,1)
        if direct == 4:
            self.y =self.y - 1 - step*random.randint(0,1)

        #判断是否出界
        if self.x > 10:
            self.x = 10 - (self.x - 10)
        if self.y>10:
            self.y = 10 -(self.y -10)
        if self.x < 0:
            self.x = 0 - self.x
        if self.y < 0:
            self.y = 0 - self.y

        return self.x,self.y
   
   
class Turtle(Fish):
    def __init__(self,phy_consumption=100):
        super().__init__(Fish)
        self.phy_consumption = phy_consumption
    def spirit(self):
        if self.phy_consumption >0:
            self.phy_consumption -= 1
        else:
            self.phy_consumption=0
        return self.phy_consumption

   
    def eat(self):
        self.phy_consumption += 20
        return self.phy_consumption
   


def main_fish_turtle():
    count=0
    #随机产生鱼和乌龟
    for i in range(0,10):
        c1 = Fish("Fish")
        fish_g[i] = c1.generate()
        

    c2 = Turtle("Turtle")
    turtle_g = c2.generate()

    print(fish_g)
    print(turtle_g)
    for i in range(10):
        if fish_g[i] == turtle_g:
            del fish_g[i]
            turtle_eat = c2.eat()
            count +=1
    print("我操,刚开始就死了%d只鱼,小乌龟去死吧!"%count)
   
    while c2.spirit() > 0:
        for i in range(10-count):
            fish_g[i] = c1.move()
        turtle_g = c2.move()
        c2.spirit()
        for i in range(10-count):
            if fish_g[i] == turtle_g:
                del fish_g[i]
                turtle_eat = c2.eat()
                print("吃鱼了,吃鱼了")
                count +=1

main_fish_turtle()

第四行是英文的,但是复制粘贴时候就没有了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:00:13 | 显示全部楼层
塔利班 发表于 2018-8-24 20:52
你先把代码粘贴对了

哥,改完了,请您老看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:02:03 | 显示全部楼层
塔利班 发表于 2018-8-24 20:45
我表示粘贴过去缩进乱七八糟的,你是不是从论坛复制的内容,没自己敲的吗

我自己写的啊,连答案都没看,我复制进去不知道怎么有时候就失真了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:03:26 | 显示全部楼层
塔利班 发表于 2018-8-24 20:41
为什么你喜欢斜体,我表示要歪着脑袋看

这你要找“小甲鱼”我点的是加粗和红色,不知为什么全变成倾斜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:12:35 | 显示全部楼层
塔利班 发表于 2018-8-24 20:52
你先把代码粘贴对了
import random
fish_g = []
for i in range(0,10):
    fish_g += [i]


#定义鱼类,龟类
class Fish():
    def __init__(self,name):
        self.name = name
        self.x = random.randint(0,10)
        self.y = random.randint(0,10)

    def generate(self):
        return self.x,self.y

    def move(self):
        direct = random.randint(1,4)

        #判断鱼的种类,用随机函数,确定移动步伐
        if self.name == "Fish":
            step = 0
        else:
            step = 1

        #判断鱼的移动方向   
        if direct == 1:
            self.x =self.x + 1 + step*random.randint(0,1)
        if direct == 2:
            self.x =self.x - 1 - step*random.randint(0,1)
        if direct == 3:
            self.y =self.y + 1 + step*random.randint(0,1)
        if direct == 4:
            self.y =self.y - 1 - step*random.randint(0,1)

        #判断是否出界
        if self.x > 10:
            self.x = 10 - (self.x - 10)
        if self.y>10:
            self.y = 10 -(self.y -10)
        if self.x < 0:
            self.x = 0 - self.x
        if self.y < 0:
            self.y = 0 - self.y

        return self.x,self.y
    
    
class Turtle(Fish):
    def __init__(self,phy_consumption=100):
        super().__init__(Fish)
        self.phy_consumption = phy_consumption
    def spirit(self):
        if self.phy_consumption >0:
            self.phy_consumption -= 1
        else:
            self.phy_consumption=0
        return self.phy_consumption

    
    def eat(self):
        self.phy_consumption += 20
        return self.phy_consumption 
    


def main_fish_turtle():
    count=0
    #随机产生鱼和乌龟
    for i in range(0,10):
        c1 = Fish("Fish")
        fish_g[i] = c1.generate()
        

    c2 = Turtle("Turtle")
    turtle_g = c2.generate()

    print(fish_g)
    print(turtle_g)
    for i in range(10):
        if fish_g[i] == turtle_g:
            del fish_g[i]
            turtle_eat = c2.eat()
            count +=1
    print("我操,刚开始就死了%d只鱼,小乌龟去死吧!"%count)
    
    while c2.spirit() > 0:
        for i in range(10-count):
            fish_g[i] = c1.move()
        turtle_g = c2.move()
        c2.spirit()
        for i in range(10-count):
            if fish_g[i] == turtle_g:
                del fish_g[i]
                turtle_eat = c2.eat()
                print("吃鱼了,吃鱼了")
                count +=1

main_fish_turtle()
    

不知道有代码这个选项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 21:13:50 | 显示全部楼层
你的初始化是初始化血量,结果你传了个王八的名字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:20:13 | 显示全部楼层
塔利班 发表于 2018-8-24 21:13
你的初始化是初始化血量,结果你传了个王八的名字

但是我父类里边有name的变量啊,在调用子类时候不需要传入“turtle”吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 21:21:07 | 显示全部楼层
你子类都重写了,,父类的被覆盖了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:27:24 | 显示全部楼层
塔利班 发表于 2018-8-24 21:21
你子类都重写了,,父类的被覆盖了啊

我不是用super()调用父类的方法了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 21:36:39 | 显示全部楼层
本帖最后由 塔利班 于 2018-8-24 21:39 编辑
Chysial 发表于 2018-8-24 21:27
我不是用super()调用父类的方法了吗?


你父类初始化正常要传参的,你传了个Fish,你的name赋值成了Fish类,把血量赋值了王八名字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 21:49:39 | 显示全部楼层
塔利班 发表于 2018-8-24 21:36
你父类初始化正常要传参的,你传了个Fish,你的name赋值成了Fish类,把血量赋值了王八名字

我在子类里边加了name,了解了,谢谢大哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表