鱼C论坛

 找回密码
 立即注册
查看: 909|回复: 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是可以判断的,我完全晕了,各位大哥帮下忙!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-24 20:41:55 | 显示全部楼层
为什么你喜欢斜体,我表示要歪着脑袋看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-24 20:43:50 | 显示全部楼层
错误好的,感觉逻辑还错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我表示粘贴过去缩进乱七八糟的,你是不是从论坛复制的内容,没自己敲的吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

你先把代码粘贴对了
小甲鱼最新课程 -> https://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()

第四行是英文的,但是复制粘贴时候就没有了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哥,改完了,请您老看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我自己写的啊,连答案都没看,我复制进去不知道怎么有时候就失真了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这你要找“小甲鱼”我点的是加粗和红色,不知为什么全变成倾斜
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

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

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

  20.         #判断鱼的移动方向   
  21.         if direct == 1:
  22.             self.x =self.x + 1 + step*random.randint(0,1)
  23.         if direct == 2:
  24.             self.x =self.x - 1 - step*random.randint(0,1)
  25.         if direct == 3:
  26.             self.y =self.y + 1 + step*random.randint(0,1)
  27.         if direct == 4:
  28.             self.y =self.y - 1 - step*random.randint(0,1)

  29.         #判断是否出界
  30.         if self.x > 10:
  31.             self.x = 10 - (self.x - 10)
  32.         if self.y>10:
  33.             self.y = 10 -(self.y -10)
  34.         if self.x < 0:
  35.             self.x = 0 - self.x
  36.         if self.y < 0:
  37.             self.y = 0 - self.y

  38.         return self.x,self.y
  39.    
  40.    
  41. class Turtle(Fish):
  42.     def __init__(self,phy_consumption=100):
  43.         super().__init__(Fish)
  44.         self.phy_consumption = phy_consumption
  45.     def spirit(self):
  46.         if self.phy_consumption >0:
  47.             self.phy_consumption -= 1
  48.         else:
  49.             self.phy_consumption=0
  50.         return self.phy_consumption

  51.    
  52.     def eat(self):
  53.         self.phy_consumption += 20
  54.         return self.phy_consumption
  55.    


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

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

  65.     print(fish_g)
  66.     print(turtle_g)
  67.     for i in range(10):
  68.         if fish_g[i] == turtle_g:
  69.             del fish_g[i]
  70.             turtle_eat = c2.eat()
  71.             count +=1
  72.     print("我操,刚开始就死了%d只鱼,小乌龟去死吧!"%count)
  73.    
  74.     while c2.spirit() > 0:
  75.         for i in range(10-count):
  76.             fish_g[i] = c1.move()
  77.         turtle_g = c2.move()
  78.         c2.spirit()
  79.         for i in range(10-count):
  80.             if fish_g[i] == turtle_g:
  81.                 del fish_g[i]
  82.                 turtle_eat = c2.eat()
  83.                 print("吃鱼了,吃鱼了")
  84.                 count +=1

  85. main_fish_turtle()
  86.    
复制代码


不知道有代码这个选项
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 21:13:50 | 显示全部楼层
你的初始化是初始化血量,结果你传了个王八的名字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

但是我父类里边有name的变量啊,在调用子类时候不需要传入“turtle”吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 21:21:07 | 显示全部楼层
你子类都重写了,,父类的被覆盖了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我不是用super()调用父类的方法了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


你父类初始化正常要传参的,你传了个Fish,你的name赋值成了Fish类,把血量赋值了王八名字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我在子类里边加了name,了解了,谢谢大哥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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