37讲课后作业,萌新初步实现要求,请大神指导哪里还可以优化?
37讲课后作业,萌新初步实现要求,请大神指导哪里还可以优化? 再请教,代码在PyCharm里面运行至结束正常,直接运行py到判断吃鱼的时候会崩溃。 飘花飞雪 发表于 2020-5-24 16:54再请教,代码在PyCharm里面运行至结束正常,直接运行py到判断吃鱼的时候会崩溃。
代码文件打开错了{:5_104:} 飘花飞雪 发表于 2020-5-24 17:01
代码文件打开错了
你把代码直接贴出来,
没有人会因为这而下载你的附件的{:10_269:} _2_ 发表于 2020-5-24 18:46
你把代码直接贴出来,
没有人会因为这而下载你的附件的
import random
def cjyd(temp): #判断是否超出边界,确定在<10,>0的范围内
if temp > 10:
temp = 20 - temp
return temp
elif temp < 0:
temp = 0 - temp
return temp
else:
return temp
class Wugui: #乌龟出生点初始化和移动上下左右的判断和输出
tili = 100
def chusheng(self):
self.wugui_x = random.randint(0, 10)
self.wugui_y = random.randint(0, 10)
print("乌龟出生在【%d】,【%d】" % (self.wugui_x, self.wugui_y))
def yidong(self,x,y):
self.tili -= 1
self.zhou = random.choice(["x","y"])
self.buchang = random.randint(1,2)
if self.zhou == "x":
self.heng = random.choice(["左","右"])
if self.heng == "左":
x = cjyd(x - self.buchang)
else:
x = cjyd(x + self.buchang)
else:
self.shu = random.choice(["上","下"])
if self.shu == "下":
y = cjyd(y - self.buchang)
else:
y = cjyd(y + self.buchang)
return x, y
class Yu: #鱼的出生点位和移动判断和输出
def chusheng(self):
self.yu_x = random.randint(0, 10)
self.yu_y = random.randint(0, 10)
def yidong(self,x,y):
self.zhou = random.choice(["x", "y"])
if self.zhou == "x":
self.heng = random.choice(["左","右"])
if self.heng == "左":
x = cjyd(x - 1)
else:
x = cjyd(x + 1)
else:
self.shu = random.choice(["上","下"])
if self.shu == "下":
y = cjyd(y - 1)
else:
y = cjyd(y + 1)
return x,y
#生成鱼和乌龟并放入字典
wugui = Wugui()
wugui.chusheng()
wuguiz = {}
wuguiz.setdefault("乌龟",(wugui.wugui_x,wugui.wugui_y))
yu = {}
yuzu = Yu()
for i in range(1,11):
yu.setdefault("鱼%d"%i)
for i in yu:
yuzu.chusheng()
yu = (yuzu.yu_x,yuzu.yu_y)
print("%s出生在【%d】,【%d】" % (i, yu, yu))
#判断移动,体力消耗,乌龟吃鱼
jishu = 0
while 1:
jishu += 1
if wugui.tili == 0 or len(yu) == 0 :#判断结束,鱼等于0或者乌龟体力为0
break
print("\n\n第【%d】次移动" % jishu)
input("按回车进入下一次移动")
wuguiz["乌龟"] = wugui.yidong(wuguiz["乌龟"],wuguiz["乌龟"]) #乌龟移动
if wugui.zhou == "x":
print("乌龟向%s移动了%d步,位置到达【%d】,【%d】,体力还剩【%d】点" % (wugui.heng, wugui.buchang,wuguiz["乌龟"],wuguiz["乌龟"], wugui.tili))
else:
print("乌龟向%s移动了%d步,位置到达【%d】,【%d】,体力还剩【%d】点" % (wugui.shu, wugui.buchang,wuguiz["乌龟"],wuguiz["乌龟"], wugui.tili))
for i in yu: #鱼移动
yu = yuzu.yidong(yu,yu)
if yuzu.zhou == "x":
print("%s向%s移动了1步,位置到达【%d】,【%d】" % (i, yuzu.heng,yu,yu))
else:
print("%s向%s移动了1步,位置到达【%d】,【%d】" % (i, yuzu.shu,yu,yu))
for i in list(yu.keys()): #判断吃
if wuguiz["乌龟"] == yu:
wugui.tili += 20
if wugui.tili > 100: #判断体力
wugui.tili = 100
print("%s被吃了,乌龟加20点体力,现有体力%d"%(i,wugui.tili))
del yu
if wugui.tili == 0:
print("乌龟没有体力,游戏结束")
if len(yu) == 0:
print("鱼被乌龟吃完了,游戏结束")
本帖最后由 Twilight6 于 2020-5-24 19:19 编辑
飘花飞雪 发表于 2020-5-24 19:00
import random
for i in list(yu.keys()):
报错
keys 是对字典用的你的yu 是元组 飘花飞雪 发表于 2020-5-24 19:00
import random
yu = {}# 定义成字典
yuzu = Yu()
for i in range(1,11):
yu.setdefault("鱼%d"%i)
for i in yu:
yuzu.chusheng()
yu = (yuzu.yu_x,yuzu.yu_y)# 这边又被你赋值 覆盖了你之前的字典
print("%s出生在【%d】,【%d】" % (i, yu, yu)) Twilight6 发表于 2020-5-24 19:21
yu = {}#定义字典
yuzu = Yu()
for i in range(1,11):
yu.setdefault("鱼%d"%i)
for i in yu:
yuzu.chusheng()
yu = (yuzu.yu_x,yuzu.yu_y)#复制上来的源代码索引被吃了,我是这样写的,给【i】key赋值
print("%s出生在【%d】,【%d】" % (i, yu, yu)) Twilight6 发表于 2020-5-24 19:21
yu = {}
yuzu = Yu()
for i in range(1,11):
yu.setdefault("鱼%d"%i)
for i in yu:
yuzu.chusheng()
yu = (yuzu.yu_x,yuzu.yu_y)
print("%s出生在【%d】,【%d】" % (i, yu, yu)) 飘花飞雪 发表于 2020-5-24 19:47
那应该就没什么问题了 很棒 比我当时做的好多了! Twilight6 发表于 2020-5-24 19:13
报错
keys 是对字典用的你的yu 是元组
不好意思,第一次发帖子,不知道粘贴代码,字典的key值粘贴上来被吃掉了 import random
def cjyd(temp): #判断是否超出边界,确定在<10,>0的范围内
if temp > 10:
temp = 20 - temp
return temp
elif temp < 0:
temp = 0 - temp
return temp
else:
return temp
class Wugui: #乌龟出生点初始化和移动上下左右的判断和输出
tili = 100
def chusheng(self):
self.wugui_x = random.randint(0, 10)
self.wugui_y = random.randint(0, 10)
print("乌龟出生在【%d】,【%d】" % (self.wugui_x, self.wugui_y))
def yidong(self,x,y):
self.tili -= 1
self.zhou = random.choice(["x","y"])
self.buchang = random.randint(1,2)
if self.zhou == "x":
self.heng = random.choice(["左","右"])
if self.heng == "左":
x = cjyd(x - self.buchang)
else:
x = cjyd(x + self.buchang)
else:
self.shu = random.choice(["上","下"])
if self.shu == "下":
y = cjyd(y - self.buchang)
else:
y = cjyd(y + self.buchang)
return x, y
class Yu: #鱼的出生点位和移动判断和输出
def chusheng(self):
self.yu_x = random.randint(0, 10)
self.yu_y = random.randint(0, 10)
def yidong(self,x,y):
self.zhou = random.choice(["x", "y"])
if self.zhou == "x":
self.heng = random.choice(["左","右"])
if self.heng == "左":
x = cjyd(x - 1)
else:
x = cjyd(x + 1)
else:
self.shu = random.choice(["上","下"])
if self.shu == "下":
y = cjyd(y - 1)
else:
y = cjyd(y + 1)
return x,y
#生成鱼和乌龟并放入字典
wugui = Wugui()
wugui.chusheng()
wuguiz = {}
wuguiz.setdefault("乌龟",(wugui.wugui_x,wugui.wugui_y))
yu = {}
yuzu = Yu()
for i in range(1,11):
yu.setdefault("鱼%d"%i)
for i in yu:
yuzu.chusheng()
yu = (yuzu.yu_x,yuzu.yu_y)
print("%s出生在【%d】,【%d】" % (i, yu, yu))
#判断移动,体力消耗,乌龟吃鱼
jishu = 0
while 1:
jishu += 1
if wugui.tili == 0 or len(yu) == 0 :#判断结束,鱼等于0或者乌龟体力为0
break
print("\n\n第【%d】次移动" % jishu)
input("按回车进入下一次移动")
wuguiz["乌龟"] = wugui.yidong(wuguiz["乌龟"],wuguiz["乌龟"]) #乌龟移动
if wugui.zhou == "x":
print("乌龟向%s移动了%d步,位置到达【%d】,【%d】,体力还剩【%d】点" % (wugui.heng, wugui.buchang,wuguiz["乌龟"],wuguiz["乌龟"], wugui.tili))
else:
print("乌龟向%s移动了%d步,位置到达【%d】,【%d】,体力还剩【%d】点" % (wugui.shu, wugui.buchang,wuguiz["乌龟"],wuguiz["乌龟"], wugui.tili))
for i in yu: #鱼移动
yu = yuzu.yidong(yu,yu)
if yuzu.zhou == "x":
print("%s向%s移动了1步,位置到达【%d】,【%d】" % (i, yuzu.heng,yu,yu))
else:
print("%s向%s移动了1步,位置到达【%d】,【%d】" % (i, yuzu.shu,yu,yu))
for i in list(yu.keys()): #判断吃
if wuguiz["乌龟"] == yu:
wugui.tili += 20
if wugui.tili > 100: #判断体力
wugui.tili = 100
print("%s被吃了,乌龟加20点体力,现有体力%d"%(i,wugui.tili))
del yu
if wugui.tili == 0:
print("乌龟没有体力,游戏结束")
if len(yu) == 0:
print("鱼被乌龟吃完了,游戏结束") 飘花飞雪 发表于 2020-5-24 19:48
不好意思,第一次发帖子,不知道粘贴代码,字典的key值粘贴上来被吃掉了
没事,下次尽量发代码,别发文件,因为代码复制比下载方便了好几倍噢
如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)
Twilight6 发表于 2020-5-24 19:48
那应该就没什么问题了 很棒 比我当时做的好多了!
哥,我在想是不是使用了题目的漏洞,其实没有创建10条鱼的实例对象,而是使用一个实例对象创建了10个不同的坐标数据放在字典里,这样实现的话如果数据量大是不是就有问题?
页:
[1]