鱼C论坛

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

[已解决]为什么我这段代码,运行直接打印乌龟挂了,有时打印吃一条就挂掉了,哪里错了,我....

[复制链接]
发表于 2017-3-17 17:16:56 | 显示全部楼层 |阅读模式

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

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

x
  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.         self.power-=1
  11.         new_x=self.x+r.choice([1,2,-1,-2])
  12.         new_y=self.y+r.choice([1.2,-1,-2])
  13.         if new_x<legal_x[0]:
  14.             self.x=legal_x[0]-(new_x-legal_x[0])
  15.         elif new_x>legal_x[1]:
  16.             self.x=legal_x[1]-(new_x-legal_x[1])
  17.         else:
  18.             self.x=new_x
  19.         if new_y<legal_y[0]:
  20.             self.y=legal_y[0]-(new_y-legal_y[0])
  21.         elif new_y>legal_y[1]:
  22.             self.y=legal_y[1]-(new_y-legal_y[1])
  23.         else:
  24.             self.y=new_y
  25.         self.power-=1
  26.         return(self.x,self.y)
  27.     def eat(self):
  28.         self.power+=20
  29.         if self.power>100:
  30.             self.power=100
  31.             
  32. class Fish:
  33.     def __init__(self):
  34.         self.x=r.randint(legal_x[0],legal_x[1])
  35.         self.y=r.randint(legal_y[0],legal_y[1])
  36.     def move(self):
  37.         new_x=self.x+r.choice([1,-1])
  38.         new_y=self.y+r.choice([1.-1])
  39.         if new_x<legal_x[0]:
  40.             self.x=legal_x[0]-(new_x-legal_x[0])
  41.         elif new_x>legal_x[1]:
  42.             self.x=legal_x[1]-(new_x-legal_x[1])
  43.         else:
  44.             self.x=new_x
  45.         if new_y<legal_y[0]:
  46.             self.y=legal_y[0]-(new_y-legal_y[0])
  47.         elif new_y>legal_y[1]:
  48.             self.y=legal_y[1]-(new_y-legal_y[1])
  49.         else:
  50.             self.y=new_y
  51.         
  52.         return(self.x,self.y)
  53. turtle=Turtle()
  54. fish=[]
  55. for i in range(10):
  56.     new_fish=Fish()
  57.     fish.append(new_fish)
  58. while True:
  59.     if not len(fish):
  60.         print("鱼吃光")
  61.         break
  62.     if not turtle.power:
  63.         print("乌龟挂了")
  64.         
  65.         break
  66.     pos=turtle.move()
  67.     for each_fish in fish[:]:
  68.         if each_fish.move()==pos:
  69.             turtle.eat()
  70.             fish.remove(each_fish)
  71.             print("吃掉一只")
复制代码
最佳答案
2017-3-17 17:43:56
因为你是在while true里面执行pos=turtle.move(),你的乌龟一直自己在动,程序运行很快的,一下子就结束了,你就只能看到乌龟挂掉或者能吃到鱼之后挂掉而已的打印
在乌龟移动的函数里面增加打印坐标,你就会看到很多打印的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-17 17:43:56 | 显示全部楼层    本楼为最佳答案   
因为你是在while true里面执行pos=turtle.move(),你的乌龟一直自己在动,程序运行很快的,一下子就结束了,你就只能看到乌龟挂掉或者能吃到鱼之后挂掉而已的打印
在乌龟移动的函数里面增加打印坐标,你就会看到很多打印的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 17:56:34 | 显示全部楼层
lumber2388779 发表于 2017-3-17 17:43
因为你是在while true里面执行pos=turtle.move(),你的乌龟一直自己在动,程序运行很快的,一下子就结束了 ...

主要是一条鱼没吃就挂掉了,不对啊,小甲鱼的程序里也是这么写的啊,他的10条鱼都吃掉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 18:01:10 | 显示全部楼层
lhx19901216 发表于 2017-3-17 17:56
主要是一条鱼没吃就挂掉了,不对啊,小甲鱼的程序里也是这么写的啊,他的10条鱼都吃掉了

new_y=self.y+r.choice([1.2,-1,-2])
因为你这句话的逗号写成了.
鱼的移动函数也是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 19:34:23 | 显示全部楼层
  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.         self.power-=1
  11.         new_x=self.x+r.choice([1,2,-1,-2])
  12.         new_y=self.y+r.choice([1,2,-1,-2])
  13.         if new_x<legal_x[0]:
  14.             self.x=legal_x[0]-(new_x-legal_x[0])
  15.         elif new_x>legal_x[1]:
  16.             self.x=legal_x[1]-(new_x-legal_x[1])
  17.         else:
  18.             self.x=new_x
  19.         if new_y<legal_y[0]:
  20.             self.y=legal_y[0]-(new_y-legal_y[0])
  21.         elif new_y>legal_y[1]:
  22.             self.y=legal_y[1]-(new_y-legal_y[1])
  23.         else:
  24.             self.y=new_y
  25.         self.power-=1
  26.         return(self.x,self.y)
  27.     def eat(self):
  28.         self.power+=20
  29.         if self.power>100:
  30.             self.power=100
  31.             
  32. class Fish:
  33.     def __init__(self):
  34.         self.x=r.randint(legal_x[0],legal_x[1])
  35.         self.y=r.randint(legal_y[0],legal_y[1])
  36.     def move(self):
  37.         new_x=self.x+r.choice([1,-1])
  38.         new_y=self.y+r.choice([1,-1])
  39.         if new_x<legal_x[0]:
  40.             self.x=legal_x[0]-(new_x-legal_x[0])
  41.         elif new_x>legal_x[1]:
  42.             self.x=legal_x[1]-(new_x-legal_x[1])
  43.         else:
  44.             self.x=new_x
  45.         if new_y<legal_y[0]:
  46.             self.y=legal_y[0]-(new_y-legal_y[0])
  47.         elif new_y>legal_y[1]:
  48.             self.y=legal_y[1]-(new_y-legal_y[1])
  49.         else:
  50.             self.y=new_y
  51.         
  52.         return(self.x,self.y)
  53. turtle=Turtle()
  54. fish=[]
  55. for i in range(10):
  56.     new_fish=Fish()
  57.     fish.append(new_fish)
  58. while True:
  59.     if not len(fish):
  60.         print("鱼吃光")
  61.         break
  62.     if not turtle.power:
  63.         print("乌龟挂了")
  64.         
  65.         break
  66.     pos=turtle.move()
  67.     for each_fish in fish[:]:
  68.         if each_fish.move()==pos:
  69.             turtle.eat()
  70.             fish.remove(each_fish)
  71.             print("吃掉一只")
复制代码


然后吃掉的数目就是随机的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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