| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
我觉得答案是不是不对。小甲鱼应该不可能出错,所有拿出来问问。看看是不是我自己理解有问题。 
小甲鱼的答案是这样的 
import random as r 
 
legal_x = [0, 10] 
legal_y = [0, 10] 
 
 
class Turtle: 
    def __init__(self): 
        # 初始体力 
        self.power = 100 
        # 初始位置随机 
        self.x = r.randint(legal_x[0], legal_x[1]) 
        self.y = r.randint(legal_y[0], legal_y[1]) 
        print(f'小甲鱼在{self.x},{self.y}位置') 
 
    def move(self): 
        # 随机计算方向并移动到新的位置(x, y) 
        new_x = self.x + r.choice([1, 2, -1, -2]) 
        new_y = self.y + r.choice([1, 2, -1, -2]) 
        step = r.choice([1, 2, -1, -2]) 
        print(f'移动{step}步,方向不知') 
        # 检查移动后是否超出场景x轴边界 
        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 
        # 检查移动后是否超出场景y轴边界 
        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 print(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]) 
        #print(f'小鱼在{self.x},{self.y}位置') 
 
    def move(self): 
        # 随机计算方向并移动到新的位置(x, y) 
        new_x = self.x + r.choice([1, -1]) 
        new_y = self.y + r.choice([1, -1]) 
        # 检查移动后是否超出场景x轴边界 
        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 
        # 检查移动后是否超出场景y轴边界 
        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(each_fish) 
            print("有一条鱼儿被吃掉了...") 
print(turtle.power, turtle.x, turtle.y) 
我把乌龟的轨迹坐标打了下输出如下: 
小甲鱼在4,10位置 
移动-2步,方向不知 
2 9 
移动2步,方向不知 
1 7 
移动2步,方向不知 
2 5 
移动-2步,方向不知 
1 6 
移动1步,方向不知 
3 4 
移动-1步,方向不知 
1 3 
移动1步,方向不知 
3 1 
移动-1步,方向不知 
4 1 
移动-1步,方向不知 
2 0 
移动-2步,方向不知 
0 1 
移动1步,方向不知 
2 3 
移动2步,方向不知 
1 5 
移动1步,方向不知 
2 6 
移动2步,方向不知 
4 8 
移动2步,方向不知 
6 6 
移动1步,方向不知 
8 5 
移动-2步,方向不知 
10 7 
移动2步,方向不知 
8 6 
移动-2步,方向不知 
10 7 
移动-2步,方向不知 
9 5 
移动2步,方向不知 
10 4 
移动-2步,方向不知 
8 5 
移动-2步,方向不知 
7 7 
移动1步,方向不知 
5 9 
移动-2步,方向不知 
4 7 
移动-2步,方向不知 
6 6 
移动-2步,方向不知 
4 7 
移动1步,方向不知 
5 6 
移动2步,方向不知 
7 7 
移动-2步,方向不知 
9 9 
移动-2步,方向不知 
9 8 
移动2步,方向不知 
9 7 
移动2步,方向不知 
8 9 
移动1步,方向不知 
10 7 
移动-1步,方向不知 
9 5 
移动1步,方向不知 
8 3 
移动2步,方向不知 
9 4 
移动1步,方向不知 
8 3 
移动-1步,方向不知 
10 1 
移动1步,方向不知 
8 2 
移动2步,方向不知 
7 1 
移动2步,方向不知 
5 2 
移动-1步,方向不知 
4 3 
移动1步,方向不知 
3 5 
移动-2步,方向不知 
4 7 
移动2步,方向不知 
6 9 
移动-2步,方向不知 
8 9 
移动-1步,方向不知 
9 7 
移动2步,方向不知 
9 5 
移动2步,方向不知 
8 3 
移动1步,方向不知 
9 1 
移动-1步,方向不知 
9 0 
移动1步,方向不知 
7 1 
移动1步,方向不知 
5 0 
移动-2步,方向不知 
4 1 
移动1步,方向不知 
3 2 
移动2步,方向不知 
5 1 
移动1步,方向不知 
7 0 
移动-2步,方向不知 
8 2 
移动-2步,方向不知 
9 4 
移动-2步,方向不知 
10 5 
移动-1步,方向不知 
8 7 
移动1步,方向不知 
7 6 
移动2步,方向不知 
5 8 
移动-1步,方向不知 
6 10 
移动1步,方向不知 
5 8 
移动-2步,方向不知 
4 7 
移动2步,方向不知 
5 6 
移动-1步,方向不知 
4 7 
移动1步,方向不知 
2 9 
移动-1步,方向不知 
0 9 
移动-2步,方向不知 
2 7 
移动-1步,方向不知 
4 8 
移动2步,方向不知 
6 6 
移动2步,方向不知 
8 5 
移动-1步,方向不知 
7 3 
移动-1步,方向不知 
9 1 
移动-2步,方向不知 
7 0 
移动-2步,方向不知 
8 1 
移动-2步,方向不知 
10 1 
移动1步,方向不知 
8 3 
移动-1步,方向不知 
6 1 
移动1步,方向不知 
4 2 
移动-1步,方向不知 
6 3 
移动1步,方向不知 
8 2 
移动1步,方向不知 
9 4 
移动2步,方向不知 
8 6 
移动2步,方向不知 
10 8 
移动-1步,方向不知 
8 7 
移动-2步,方向不知 
10 9 
移动2步,方向不知 
8 8 
移动-2步,方向不知 
10 10 
移动1步,方向不知 
8 9 
移动-2步,方向不知 
7 9 
移动-1步,方向不知 
8 10 
移动2步,方向不知 
6 9 
移动-2步,方向不知 
4 9 
移动-2步,方向不知 
3 9 
移动-2步,方向不知 
4 8 
移动-2步,方向不知 
2 9 
乌龟体力耗尽,挂掉了! 
0 2 9 
看着代码也是走一步既往横向又往纵向移动了。 
我改动的代码如下:import random 
 
 
class Turtle: 
    def __init__(self): 
        self.power = 100 
        self.x = random.randint(0, 10) 
        self.y = random.randint(0, 10) 
        print(f'小甲鱼在初始产生在{self.x},{self.y}位置') 
 
    def move(self): 
        step = random.choice([-1, -2, 1, 2]) 
        direction = random.randint(0, 1)  # 0为x轴方向移动 1为y轴方向移动 
        if direction == 0: 
            print(f'小甲鱼横向移动{step}步') 
            new_x = self.x + step 
            new_y = self.y 
        else: 
            print(f'小甲鱼纵向移动{step}步') 
            new_x = self.x 
            new_y = self.y + step 
 
        if new_x > 10: 
            self.x = 10 
        elif new_x < 0: 
            self.x = 0 
        else: 
            self.x = new_x 
        if new_y > 10: 
            self.y = 10 
        elif new_y < 0: 
            self.y = 0 
        else: 
            self.y = new_y 
        self.power -= 1 
        print(f'当前体力值为:{self.power}') 
        return print(self.x, self.y) 
 
    def eat(self): 
        self.power += 20 
        if self.power > 100: 
            self.power = 100 
 
 
class Fish: 
    def __init__(self): 
        step = random.choice([-1, 1]) 
        self.x = random.randint(0, 10) 
        self.y = random.randint(0, 10) 
        #print(f'小鱼在{self.x},{self.y}位置') 
 
    def move(self): 
        step = random.choice([-1, 1]) 
        direction = random.randint(0, 1)  # 0为x轴方向移动 1为y轴方向移动 
        if direction == 0: 
            new_x = self.x + step 
            new_y = self.y 
        else: 
            new_x = self.x 
            new_y = self.y + step 
        if new_x > 10: 
            self.x = 10 
        elif new_x < 0: 
            self.x = 0 
        else: 
            self.x = new_x 
        if new_y > 10: 
            self.y = 10 
        elif new_y < 0: 
            self.y = 0 
        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 
    for each_fish in fish[::]: 
        if each_fish.move() == turtle.move(): 
            print('倒霉的小鱼被我碰到,吃掉...') 
            turtle.eat() 
            fish.remove(each_fish) 
            print('一条小鱼被吃掉了...') 
print(turtle.power, turtle.x, turtle.y) 
输出: 
小甲鱼在初始产生在9,2位置 
小甲鱼纵向移动2步 
当前体力值为:99 
9 4 
小甲鱼横向移动2步 
当前体力值为:98 
10 4 
小甲鱼纵向移动1步 
当前体力值为:97 
10 5 
小甲鱼横向移动-1步 
当前体力值为:96 
9 5 
小甲鱼纵向移动2步 
当前体力值为:95 
9 7 
小甲鱼横向移动1步 
当前体力值为:94 
10 7 
小甲鱼横向移动1步 
当前体力值为:93 
10 7 
小甲鱼纵向移动-1步 
当前体力值为:92 
10 6 
小甲鱼横向移动2步 
当前体力值为:91 
10 6 
小甲鱼纵向移动-1步 
当前体力值为:90 
10 5 
小甲鱼纵向移动2步 
当前体力值为:89 
10 7 
小甲鱼纵向移动2步 
当前体力值为:88 
10 9 
小甲鱼纵向移动1步 
当前体力值为:87 
10 10 
小甲鱼横向移动-1步 
当前体力值为:86 
9 10 
小甲鱼横向移动2步 
当前体力值为:85 
10 10 
小甲鱼纵向移动1步 
当前体力值为:84 
10 10 
小甲鱼纵向移动-2步 
当前体力值为:83 
10 8 
小甲鱼横向移动-2步 
当前体力值为:82 
8 8 
小甲鱼横向移动2步 
当前体力值为:81 
10 8 
小甲鱼纵向移动-2步 
当前体力值为:80 
10 6 
小甲鱼横向移动-1步 
当前体力值为:79 
9 6 
小甲鱼纵向移动-1步 
当前体力值为:78 
9 5 
小甲鱼纵向移动2步 
当前体力值为:77 
9 7 
小甲鱼横向移动1步 
当前体力值为:76 
10 7 
小甲鱼横向移动1步 
当前体力值为:75 
10 7 
小甲鱼纵向移动-2步 
当前体力值为:74 
10 5 
小甲鱼纵向移动2步 
当前体力值为:73 
10 7 
小甲鱼纵向移动-1步 
当前体力值为:72 
10 6 
小甲鱼横向移动1步 
当前体力值为:71 
10 6 
小甲鱼纵向移动2步 
当前体力值为:70 
10 8 
小甲鱼横向移动1步 
当前体力值为:69 
10 8 
小甲鱼纵向移动-1步 
当前体力值为:68 
10 7 
小甲鱼横向移动-1步 
当前体力值为:67 
9 7 
小甲鱼纵向移动-2步 
当前体力值为:66 
9 5 
小甲鱼纵向移动-2步 
当前体力值为:65 
9 3 
小甲鱼横向移动1步 
当前体力值为:64 
10 3 
小甲鱼横向移动2步 
当前体力值为:63 
10 3 
小甲鱼纵向移动2步 
当前体力值为:62 
10 5 
小甲鱼纵向移动-1步 
当前体力值为:61 
10 4 
小甲鱼横向移动1步 
当前体力值为:60 
10 4 
小甲鱼纵向移动2步 
当前体力值为:59 
10 6 
小甲鱼纵向移动-1步 
当前体力值为:58 
10 5 
小甲鱼横向移动1步 
当前体力值为:57 
10 5 
小甲鱼纵向移动-1步 
当前体力值为:56 
10 4 
小甲鱼纵向移动-2步 
当前体力值为:55 
10 2 
小甲鱼横向移动1步 
当前体力值为:54 
10 2 
小甲鱼纵向移动2步 
当前体力值为:53 
10 4 
小甲鱼横向移动2步 
当前体力值为:52 
10 4 
小甲鱼横向移动-2步 
当前体力值为:51 
8 4 
小甲鱼纵向移动2步 
当前体力值为:50 
8 6 
小甲鱼纵向移动-2步 
当前体力值为:49 
8 4 
小甲鱼横向移动1步 
当前体力值为:48 
9 4 
小甲鱼纵向移动-1步 
当前体力值为:47 
9 3 
小甲鱼纵向移动2步 
当前体力值为:46 
9 5 
小甲鱼横向移动2步 
当前体力值为:45 
10 5 
小甲鱼纵向移动-2步 
当前体力值为:44 
10 3 
小甲鱼横向移动1步 
当前体力值为:43 
10 3 
小甲鱼横向移动2步 
当前体力值为:42 
10 3 
小甲鱼纵向移动2步 
当前体力值为:41 
10 5 
小甲鱼横向移动2步 
当前体力值为:40 
10 5 
小甲鱼纵向移动1步 
当前体力值为:39 
10 6 
小甲鱼横向移动-1步 
当前体力值为:38 
9 6 
小甲鱼横向移动-1步 
当前体力值为:37 
8 6 
小甲鱼横向移动1步 
当前体力值为:36 
9 6 
小甲鱼纵向移动1步 
当前体力值为:35 
9 7 
小甲鱼纵向移动-1步 
当前体力值为:34 
9 6 
小甲鱼纵向移动-2步 
当前体力值为:33 
9 4 
小甲鱼横向移动-2步 
当前体力值为:32 
7 4 
小甲鱼纵向移动-2步 
当前体力值为:31 
7 2 
小甲鱼横向移动-2步 
当前体力值为:30 
5 2 
小甲鱼纵向移动1步 
当前体力值为:29 
5 3 
小甲鱼纵向移动-1步 
当前体力值为:28 
5 2 
小甲鱼纵向移动-2步 
当前体力值为:27 
5 0 
小甲鱼横向移动-2步 
当前体力值为:26 
3 0 
小甲鱼横向移动1步 
当前体力值为:25 
4 0 
小甲鱼横向移动-2步 
当前体力值为:24 
2 0 
小甲鱼横向移动1步 
当前体力值为:23 
3 0 
小甲鱼横向移动-2步 
当前体力值为:22 
1 0 
小甲鱼纵向移动-2步 
当前体力值为:21 
1 0 
小甲鱼横向移动-2步 
当前体力值为:20 
0 0 
小甲鱼纵向移动-1步 
当前体力值为:19 
0 0 
小甲鱼横向移动-1步 
当前体力值为:18 
0 0 
小甲鱼纵向移动2步 
当前体力值为:17 
0 2 
小甲鱼纵向移动-2步 
当前体力值为:16 
0 0 
小甲鱼纵向移动2步 
当前体力值为:15 
0 2 
小甲鱼横向移动-1步 
当前体力值为:14 
0 2 
小甲鱼纵向移动-1步 
当前体力值为:13 
0 1 
小甲鱼纵向移动-1步 
当前体力值为:12 
0 0 
小甲鱼横向移动2步 
当前体力值为:11 
2 0 
小甲鱼横向移动1步 
当前体力值为:10 
3 0 
小甲鱼纵向移动-2步 
当前体力值为:9 
3 0 
小甲鱼纵向移动-2步 
当前体力值为:8 
3 0 
小甲鱼横向移动-2步 
当前体力值为:7 
1 0 
小甲鱼横向移动-1步 
当前体力值为:6 
0 0 
小甲鱼横向移动1步 
当前体力值为:5 
1 0 
小甲鱼纵向移动-2步 
当前体力值为:4 
1 0 
小甲鱼横向移动2步 
当前体力值为:3 
3 0 
小甲鱼横向移动2步 
当前体力值为:2 
5 0 
小甲鱼横向移动2步 
当前体力值为:1 
7 0 
小甲鱼纵向移动1步 
当前体力值为:0 
7 1 
小甲鱼精尽龟亡。游戏结束! 
0 7 1 
这样子看坐标才有可能合理。 
 
 
 
确实甲鱼哥代码相当于一次随机两个方向移动了 
 
而题目中是方向随机,一次移动 1~2,您更改后的代码更符合原题意 
 
 
 
 
 |   
 
 
 
 |