鱼C论坛

 找回密码
 立即注册
查看: 1186|回复: 4

[已解决]为什么我照抄小甲鱼的代码,会出现下面这种问题?

[复制链接]
发表于 2019-5-14 19:17:15 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
import random as r
legal_x = [0,10]
legal_y = [0,10]

class Turtle:
    def __int__(self):
        self.power = 100

        self.x = r.randint(legal_x[0],legal_x[1])
        self.y = r.randint(legal_y[0],legal_y[1])

    def move(self):
        new_x = self.x + r.choice([1,2,-1,-2])
        new_y = self.y + r.choice([1,2,-1,-2])
        if new_x < legal_x[0]:
            self.x = legal_x[0] - (new_x - legal_x[0])
        elif new_x < legal_x[1]:
            self.x = legal_x[1] - (new_x - legal_x[1])
        else:
            self.x = new_x
        if new_y < legal_y[0]:
            self.y = legal_y[0] - (new_y - legal_y[0])
        elif new_y < legal_y[1]:
            self.y = legal_y[1] - (new_y - legal_y[1])
        else:
            self.y = new_y

        self.power -=1

        return (self.x,self.y)

    def eat(self):
        self.power += 20
        if self.power > 100:
            self.power = 100



class Fish:
    def __init__(self):
        self.x = r.randint(legal_x[0],legal_x[1])
        self.y = r.randint(legal_y[0],legal_y[1])
        def move(self):
            new_x = self.x + r.choice([1,-1])
            new_y = self.y + r.choice([1,-1])
            if new_x < legal_x[0]:
                self.x = legal_x[0] - (new_x - legal_x[0])
            elif new_x < legal_x[1]:
                self.x = legal_x[1] - (new_x - legal_x[1])
            else:
                self.x = new_x
            if new_y < legal_y[0]:
                self.y = legal_y[0] - (new_y - legal_y[0])
            elif new_y < legal_y[1]:
                self.y = legal_y[1] - (new_y - legal_y[1])
            else:
                self.y = new_y
            return (self.x,self.y)

turtle = Turtle()
fish = []
for i in range(10):
    new_fish = Fish()
    fish.append(new_fish)


while True:
    if not len(fish):
        print('鱼被吃光了,游戏结束!')
        break

    if not turtle.power:
        print('乌龟体力耗尽,挂掉了!')
        break
    pos = turtle.move()

    for each_fish in fish[:]:
        if each_fish.move() == pos:
            turtle.eat()
            fish.remove()
            print('有一条鱼被吃掉了....')

问题:Traceback (most recent call last):
  File "C:/Users/Dell/Desktop/新建文件夹/乌龟吃鱼.py", line 72, in <module>
    if not turtle.power:
AttributeError: 'Turtle' object has no attribute 'power'
最佳答案
2019-5-14 20:24:53
本帖最后由 jackz007 于 2019-5-14 20:26 编辑

      试试修改过的代码:
  1. import random as r
  2. legal_x = [0,10]
  3. legal_y = [0,10]

  4. class Turtle:
  5.     def __init__(self):                                   # 【修改点】
  6.         self . power = 100

  7.         self.x = r.randint(legal_x[0],legal_x[1])
  8.         self.y = r.randint(legal_y[0],legal_y[1])

  9.     def move(self):
  10.         new_x = self.x + r.choice([1,2,-1,-2])
  11.         new_y = self.y + r.choice([1,2,-1,-2])
  12.         if new_x < legal_x[0]:
  13.             self.x = legal_x[0] - (new_x - legal_x[0])
  14.         elif new_x < legal_x[1]:
  15.             self.x = legal_x[1] - (new_x - legal_x[1])
  16.         else:
  17.             self.x = new_x
  18.         if new_y < legal_y[0]:
  19.             self.y = legal_y[0] - (new_y - legal_y[0])
  20.         elif new_y < legal_y[1]:
  21.             self.y = legal_y[1] - (new_y - legal_y[1])
  22.         else:
  23.             self.y = new_y

  24.         self.power -=1

  25.         return (self.x,self.y)

  26.     def eat(self):
  27.         self.power += 20
  28.         if self.power > 100:
  29.             self.power = 100



  30. class Fish:
  31.     def __init__(self):
  32.         self.x = r.randint(legal_x[0],legal_x[1])
  33.         self.y = r.randint(legal_y[0],legal_y[1])

  34.     def move(self):                                    # 【修改点】- 整个函数块缩进不对
  35.         new_x = self.x + r.choice([1,-1])
  36.         new_y = self.y + r.choice([1,-1])
  37.         if new_x < legal_x[0]:
  38.             self.x = legal_x[0] - (new_x - legal_x[0])
  39.         elif new_x < legal_x[1]:
  40.             self.x = legal_x[1] - (new_x - legal_x[1])
  41.         else:
  42.             self.x = new_x
  43.         if new_y < legal_y[0]:
  44.             self.y = legal_y[0] - (new_y - legal_y[0])
  45.         elif new_y < legal_y[1]:
  46.             self.y = legal_y[1] - (new_y - legal_y[1])
  47.         else:
  48.             self.y = new_y
  49.         return (self.x,self.y)

  50. turtle = Turtle()
  51. fish = []
  52. for i in range(10):
  53.     new_fish = Fish()
  54.     fish.append(new_fish)


  55. while True:
  56.     if not len(fish):
  57.         print('鱼被吃光了,游戏结束!')
  58.         break

  59.     if not turtle.power:
  60.         print('乌龟体力耗尽,挂掉了!')
  61.         break
  62.     pos = turtle.move()

  63.     for each_fish in fish[:]:
  64.         if each_fish.move() == pos:
  65.             turtle.eat()
  66.             fish.remove(each_fish)                   # 【修改点】
  67.             print('有一条鱼被吃掉了....')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-14 20:15:44 | 显示全部楼层
class Turtle:
    def __init__(self):
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-14 20:24:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-5-14 20:26 编辑

      试试修改过的代码:
  1. import random as r
  2. legal_x = [0,10]
  3. legal_y = [0,10]

  4. class Turtle:
  5.     def __init__(self):                                   # 【修改点】
  6.         self . power = 100

  7.         self.x = r.randint(legal_x[0],legal_x[1])
  8.         self.y = r.randint(legal_y[0],legal_y[1])

  9.     def move(self):
  10.         new_x = self.x + r.choice([1,2,-1,-2])
  11.         new_y = self.y + r.choice([1,2,-1,-2])
  12.         if new_x < legal_x[0]:
  13.             self.x = legal_x[0] - (new_x - legal_x[0])
  14.         elif new_x < legal_x[1]:
  15.             self.x = legal_x[1] - (new_x - legal_x[1])
  16.         else:
  17.             self.x = new_x
  18.         if new_y < legal_y[0]:
  19.             self.y = legal_y[0] - (new_y - legal_y[0])
  20.         elif new_y < legal_y[1]:
  21.             self.y = legal_y[1] - (new_y - legal_y[1])
  22.         else:
  23.             self.y = new_y

  24.         self.power -=1

  25.         return (self.x,self.y)

  26.     def eat(self):
  27.         self.power += 20
  28.         if self.power > 100:
  29.             self.power = 100



  30. class Fish:
  31.     def __init__(self):
  32.         self.x = r.randint(legal_x[0],legal_x[1])
  33.         self.y = r.randint(legal_y[0],legal_y[1])

  34.     def move(self):                                    # 【修改点】- 整个函数块缩进不对
  35.         new_x = self.x + r.choice([1,-1])
  36.         new_y = self.y + r.choice([1,-1])
  37.         if new_x < legal_x[0]:
  38.             self.x = legal_x[0] - (new_x - legal_x[0])
  39.         elif new_x < legal_x[1]:
  40.             self.x = legal_x[1] - (new_x - legal_x[1])
  41.         else:
  42.             self.x = new_x
  43.         if new_y < legal_y[0]:
  44.             self.y = legal_y[0] - (new_y - legal_y[0])
  45.         elif new_y < legal_y[1]:
  46.             self.y = legal_y[1] - (new_y - legal_y[1])
  47.         else:
  48.             self.y = new_y
  49.         return (self.x,self.y)

  50. turtle = Turtle()
  51. fish = []
  52. for i in range(10):
  53.     new_fish = Fish()
  54.     fish.append(new_fish)


  55. while True:
  56.     if not len(fish):
  57.         print('鱼被吃光了,游戏结束!')
  58.         break

  59.     if not turtle.power:
  60.         print('乌龟体力耗尽,挂掉了!')
  61.         break
  62.     pos = turtle.move()

  63.     for each_fish in fish[:]:
  64.         if each_fish.move() == pos:
  65.             turtle.eat()
  66.             fish.remove(each_fish)                   # 【修改点】
  67.             print('有一条鱼被吃掉了....')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-14 21:59:44 From FishC Mobile | 显示全部楼层
jackz007 发表于 2019-5-14 20:24
试试修改过的代码:

改了之后变成这样了
Traceback (most recent call last):
  File "C:/Users/Dell/Desktop/新建文件夹/乌龟吃鱼.py", line 78, in <module>
    if each_fish.move(each_fish) == pos:
AttributeError: 'Fish' object has no attribute 'move'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-14 22:04:46 | 显示全部楼层
小虾码 发表于 2019-5-14 21:59
改了之后变成这样了
Traceback (most recent call last):
  File "C:/Users/Dell/Desktop/新建文件夹/ ...

      你要复制我修改过的代码运行,不可能有错的,这个错误说明,你定义 Fish 类 move() 方法代码的缩进错误还没有得到修正,如果使用我修改的代码便没有这个问题!
      就那么难吗,直接把代码复制粘贴到记事本,然后保存就可以用了呀。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-20 03:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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