鱼C论坛

 找回密码
 立即注册
查看: 1604|回复: 22

[已解决]第37讲最后一题不满足分支条件仍旧会进入分支

[复制链接]
发表于 2020-3-2 17:19:13 | 显示全部楼层 |阅读模式

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

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

x
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)#横方向
    if turtlelfx==0:
        turtlelfx=-1
    turtlehfx=random.randint(0,1)#竖方向
    if turtlehfx==0:
        turtlehfx=-1   
    turtleh=random.randint(0,10)
    turtlel=random.randint(0,10)
    turtle_pos=[turtlelfx,turtlehfx,[turtlel,turtleh],100]
    fish_pos=dict1.fromkeys(range(10),[0,0,0,0])#初始化的10条鱼的行动方向位置均为[0,0,0,0]
    for i in range(10):#给每条鱼设置不同的行动方向和位置
        fishlfx=random.randint(0,1)
        if fishlfx==0:
             fishlfx=-1
        fishhfx=random.randint(0,1)
        if fishhfx==0:
            fishhfx=-1
        fishh=random.randint(0,10)
        fishl=random.randint(0,10)
        fish_pos[i]=[fishlfx,fishhfx,[fishl,fishh]]
    return [fish_pos,turtle_pos]
def fish_move(fish_pos):
    k=random.randint(0,1)
    if k==1:
        fish_pos[2][0]+=fish_pos[0]
    else:
        fish_pos[2][1]+=fish_pos[1]
    return fish_pos
def turtle_move(turtle_pos):
    k=random.randint(0,5)
    if k==0:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[3]-=1
    elif k==1:
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=1
    elif k in [2,3]:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=2
    elif k in [4,5]:
        turtle_pos[3]-=2
        pass
    return turtle_pos
def panduan(pos):
    a=len(pos[0])
    if a==0:
        print('鱼死光了')
    b=pos[1][3]
    if b<=0:
        print('龟死了')
    print(b*a)
    if b*a>0:
        while a and b:
            for i in list(pos[0].keys()):
                if pos[0][i][2]==pos[1][2]:#当乌龟吃掉鱼的时候,把鱼抛出
                    pos[0].pop(i)
                    print('乌龟把鱼%d吃掉了'%i)
                    if pos[1][3]<=80:
                        pos[1][3]+=20
                    else:
                        pos[1][3]=100
                else:
                    if pos[0][i][2][0] in [0,10]:
                        if pos[0][i][2][0] == 0:
                            pos[0][i][0]=1
                        else:
                            pos[0][i][0]=-1
                    if pos[0][i][2][1] in [0,10]:
                        if pos[0][i][2][1] == 0:
                            pos[0][i][1]=1
                        else:
                            pos[0][i][1]=-1
                    pos[0][i]=fish_move(pos[0][i])               
                    #乌龟边界值反向
            if pos[1][2][0] in [0,10]:
                if pos[1][2][0] == 0:
                    pos[1][0]=1
                else:
                    pos[1][0]=-1
            if pos[1][2][1] in [0,10]:
                if pos[1][2][1] == 0:
                    pos[1][1]=1
                else:
                    pos[1][1]=-1
                    #乌龟的行动
            pos[1]=turtle_move(pos[1])
            panduan(pos)#只要还有鱼并且龟活着的时候继续执行
    else:
        if a==0:
            return 1
        else:
            return 0
dict1={}
pos1=pos_cur()#获取初始化的鱼和龟的位置
turtle_life=panduan(pos1)#执行游戏
if turtle_life==0:
        print('龟挂了,游戏结束')
elif turtle==1:
        print('龟赢了')
图2.png
一开始是直接用  whlie a and b:来执行的,但是就算龟死了(前面判断b小于等于0的时候给b赋值0),仍旧会进入循坏
后来就是现在这段代码,我在前面插入一个分支,但是当a*b小于0的情况下,仍旧会进去分支里面执行语句,我佛了,这是啥情况
最佳答案
2020-3-2 18:41:21
十月故里 发表于 2020-3-2 18:39
我知道哪里问题了,是line100哪里的对象名写错了,改成turtle_life就好了

如果有帮助,请设最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-2 18:04:03 | 显示全部楼层
十月故里 发表于 2020-3-2 17:53
我不知道原来代码可以这样发哈,我这边不会出错,会一直循环

你的代码陷入无限递归了
要这样写:
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)#横方向
    if turtlelfx==0:
        turtlelfx=-1
    turtlehfx=random.randint(0,1)#竖方向
    if turtlehfx==0:
        turtlehfx=-1    
    turtleh=random.randint(0,10)
    turtlel=random.randint(0,10)
    turtle_pos=[turtlelfx,turtlehfx,[turtlel,turtleh],100]
    fish_pos=dict1.fromkeys(range(10),[0,0,0,0])#初始化的10条鱼的行动方向位置均为[0,0,0,0]
    for i in range(10):#给每条鱼设置不同的行动方向和位置
        fishlfx=random.randint(0,1)
        if fishlfx==0:
             fishlfx=-1
        fishhfx=random.randint(0,1)
        if fishhfx==0:
            fishhfx=-1
        fishh=random.randint(0,10)
        fishl=random.randint(0,10)
        fish_pos[i]=[fishlfx,fishhfx,[fishl,fishh]]
    return [fish_pos,turtle_pos]
def fish_move(fish_pos):
    k=random.randint(0,1)
    if k==1:
        fish_pos[2][0]+=fish_pos[0]
    else:
        fish_pos[2][1]+=fish_pos[1]
    return fish_pos
def turtle_move(turtle_pos):
    k=random.randint(0,5)
    if k==0:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[3]-=1
    elif k==1:
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=1
    elif k in [2,3]:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=2
    elif k in [4,5]:
        turtle_pos[3]-=2
    return turtle_pos
def panduan(pos):
    a=len(pos[0])
    if a==0:
        print('鱼死光了')
    b=pos[1][3]
    if b<=0:
        print('龟死了')
    print(b*a)
    if b*a>0:
        while a and b:
            for i in list(pos[0].keys()):
                if pos[0][i][2]==pos[1][2]:#当乌龟吃掉鱼的时候,把鱼抛出
                    pos[0].pop(i)
                    print('乌龟把鱼%d吃掉了'%i)
                    if pos[1][3]<=80:
                        pos[1][3]+=20
                    else:
                        pos[1][3]=100
                else:
                    if pos[0][i][2][0] in [0,10]:
                        if pos[0][i][2][0] == 0:
                            pos[0][i][0]=1
                        else:
                            pos[0][i][0]=-1
                    if pos[0][i][2][1] in [0,10]:
                        if pos[0][i][2][1] == 0:
                            pos[0][i][1]=1
                        else:
                            pos[0][i][1]=-1
                    pos[0][i]=fish_move(pos[0][i])                
                    #乌龟边界值反向
            if pos[1][2][0] in [0,10]:
                if pos[1][2][0] == 0:
                    pos[1][0]=1
                else:
                    pos[1][0]=-1
            if pos[1][2][1] in [0,10]:
                if pos[1][2][1] == 0:
                    pos[1][1]=1
                else:
                    pos[1][1]=-1
                    #乌龟的行动
            pos[1]=turtle_move(pos[1])
            return panduan(pos)#这里要用return,不然就不会退出
    else:
        if a==0:
            return 1
        else:
            return 0
dict1={}
pos1=pos_cur()#获取初始化的鱼和龟的位置
turtle_life=panduan(pos1)#执行游戏
if turtle_life==0:
        print('龟挂了,游戏结束')
elif turtle==1:
        print('龟赢了')

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
十月故里 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-2 20:10:14 | 显示全部楼层
用全局变量修改的代码
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)#横方向
    if turtlelfx==0:
        turtlelfx=-1
    turtlehfx=random.randint(0,1)#竖方向
    if turtlehfx==0:
        turtlehfx=-1    
    turtleh=random.randint(0,10)
    turtlel=random.randint(0,10)
    turtle_pos=[turtlelfx,turtlehfx,[turtlel,turtleh],100]
    fish_pos=dict1.fromkeys(range(10),[0,0,0,0])#初始化的10条鱼的行动方向位置均为[0,0,0,0]
    for i in range(10):#给每条鱼设置不同的行动方向和位置
        fishlfx=random.randint(0,1)
        if fishlfx==0:
             fishlfx=-1
        fishhfx=random.randint(0,1)
        if fishhfx==0:
            fishhfx=-1
        fishh=random.randint(0,10)
        fishl=random.randint(0,10)
        fish_pos[i]=[fishlfx,fishhfx,[fishl,fishh]]
    return [fish_pos,turtle_pos]
def fish_move(fish_pos):
    k=random.randint(0,1)
    if k==1:
        fish_pos[2][0]+=fish_pos[0]
    else:
        fish_pos[2][1]+=fish_pos[1]
    return fish_pos
def turtle_move(turtle_pos):
    k=random.randint(0,5)
    if k==0:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[3]-=1
    elif k==1:
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=1
    elif k in [2,3]:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=2
    elif k in [4,5]:
        turtle_pos[3]-=2
    return turtle_pos
def panduan(pos):
    global a,b
    a=len(pos[0])
    if a==0:
        print('鱼死光了')
        return 1
    b=pos[1][3]
    if b<=0:
        print('龟死了,还剩%i条鱼' % a)
        return 0
    print(b*a)
#    if b*a>0:
    while a>0 and b>0:
        for i in list(pos[0].keys()):
            if pos[0][i][2]==pos[1][2]:#当乌龟吃掉鱼的时候,把鱼抛出
                pos[0].pop(i)
                print('乌龟把鱼%d吃掉了'%i)
                if pos[1][3]<=80:
                    pos[1][3]+=20
                else:
                    pos[1][3]=100
            else:
                if pos[0][i][2][0] in [0,10]:
                    if pos[0][i][2][0] == 0:
                        pos[0][i][0]=1
                    else:
                        pos[0][i][0]=-1
                if pos[0][i][2][1] in [0,10]:
                    if pos[0][i][2][1] == 0:
                        pos[0][i][1]=1
                    else:
                        pos[0][i][1]=-1
                pos[0][i]=fish_move(pos[0][i])                
                #乌龟边界值反向
        if pos[1][2][0] in [0,10]:
            if pos[1][2][0] == 0:
                pos[1][0]=1
            else:
                pos[1][0]=-1
        if pos[1][2][1] in [0,10]:
            if pos[1][2][1] == 0:
                pos[1][1]=1
            else:
                pos[1][1]=-1
                #乌龟的行动
        pos[1]=turtle_move(pos[1])
        panduan(pos)#只要还有鱼并且龟活着的时候继续执行
#     else:
#         if a==0:
#             return 1
#         else:
#             return 0
dict1={}
a=0
b=0
pos1=pos_cur()#获取初始化的鱼和龟的位置
turtle_life=panduan(pos1)#执行游戏
if turtle_life==0:
        print('龟挂了,游戏结束')
elif turtle_life==1:
        print('龟赢了')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-2 17:21:33 | 显示全部楼层
用代码格式发代码,不然是斜体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 17:23:04 | 显示全部楼层
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)#横方向
    if turtlelfx==0:
        turtlelfx=-1
    turtlehfx=random.randint(0,1)#竖方向
    if turtlehfx==0:
        turtlehfx=-1   
    turtleh=random.randint(0,10)
    turtlel=random.randint(0,10)
    turtle_pos=[turtlelfx,turtlehfx,[turtlel,turtleh],100]
    fish_pos=dict1.fromkeys(range(10),[0,0,0,0])#初始化的10条鱼的行动方向位置均为[0,0,0,0]
    for i in range(10):#给每条鱼设置不同的行动方向和位置
        fishlfx=random.randint(0,1)
        if fishlfx==0:
             fishlfx=-1
        fishhfx=random.randint(0,1)
        if fishhfx==0:
            fishhfx=-1
        fishh=random.randint(0,10)
        fishl=random.randint(0,10)
        fish_pos[i]=[fishlfx,fishhfx,[fishl,fishh]]
    return [fish_pos,turtle_pos]
def fish_move(fish_pos):
    k=random.randint(0,1)
    if k==1:
        fish_pos[2][0]+=fish_pos[0]
    else:
        fish_pos[2][1]+=fish_pos[1]
    return fish_pos
def turtle_move(turtle_pos):
    k=random.randint(0,5)
    if k==0:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[3]-=1
    elif k==1:
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=1
    elif k in [2,3]:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=2
    elif k in [4,5]:
        turtle_pos[3]-=2
        pass
    return turtle_pos
def panduan(pos):
    a=len(pos[0])
    if a==0:
        print('鱼死光了')
    b=pos[1][3]
    if b<=0:
        print('龟死了')
    print(b*a)
    if b*a>0:
        while a and b:
            for i in list(pos[0].keys()):
                if pos[0][i][2]==pos[1][2]:#当乌龟吃掉鱼的时候,把鱼抛出
                    pos[0].pop(i)
                    print('乌龟把鱼%d吃掉了'%i)
                    if pos[1][3]<=80:
                        pos[1][3]+=20
                    else:
                        pos[1][3]=100
                else:
                    if pos[0][i][2][0] in [0,10]:
                        if pos[0][i][2][0] == 0:
                            pos[0][i][0]=1
                        else:
                            pos[0][i][0]=-1
                    if pos[0][i][2][1] in [0,10]:
                        if pos[0][i][2][1] == 0:
                            pos[0][i][1]=1
                        else:
                            pos[0][i][1]=-1
                    pos[0][i]=fish_move(pos[0][i])               
                    #乌龟边界值反向
            if pos[1][2][0] in [0,10]:
                if pos[1][2][0] == 0:
                    pos[1][0]=1
                else:
                    pos[1][0]=-1
            if pos[1][2][1] in [0,10]:
                if pos[1][2][1] == 0:
                    pos[1][1]=1
                else:
                    pos[1][1]=-1
                    #乌龟的行动
            pos[1]=turtle_move(pos[1])
            panduan(pos)#只要还有鱼并且龟活着的时候继续执行
    else:
        if a==0:
            return 1
        else:
            return 0
dict1={}
pos1=pos_cur()#获取初始化的鱼和龟的位置
turtle_life=panduan(pos1)#执行游戏
if turtle_life==0:
        print('龟挂了,游戏结束')
elif turtle==1:
        print('龟赢了')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 17:24:27 | 显示全部楼层
十月故里 发表于 2020-3-2 17:23
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)# ...

一个函数做一件事,把panduan分成两个函数写吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 17:24:33 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 17:21
用代码格式发代码,不然是斜体

大佬我在后面重新发了一下,帮忙看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 17:27:19 | 显示全部楼层
十月故里 发表于 2020-3-2 17:23
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)# ...

代码格式发
就是帖子上的尖括号<>
不然你的代码会有一个空格,运行不了
我还得挨个删除
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 17:28:56 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 17:24
一个函数做一件事,把panduan分成两个函数写吧

我监控了里面的数值,然后发现if b*a>0:这一句,就算是小于等于0了也会执行里面的语句,这是为啥,这个panduan是用来判断鱼和乌龟的位置的,没有别的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 17:35:20 | 显示全部楼层
十月故里 发表于 2020-3-2 17:28
我监控了里面的数值,然后发现if b*a>0:这一句,就算是小于等于0了也会执行里面的语句,这是为啥,这个pa ...


不会报错吗?
我这里报错了
你的panduan函数这里有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 17:53:12 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 17:27
代码格式发
就是帖子上的尖括号
不然你的代码会有一个空格,运行不了
import random
def pos_cur():#生成鱼和乌龟的初始化位置和行动方向
    turtlelfx=random.randint(0,1)#横方向
    if turtlelfx==0:
        turtlelfx=-1
    turtlehfx=random.randint(0,1)#竖方向
    if turtlehfx==0:
        turtlehfx=-1    
    turtleh=random.randint(0,10)
    turtlel=random.randint(0,10)
    turtle_pos=[turtlelfx,turtlehfx,[turtlel,turtleh],100]
    fish_pos=dict1.fromkeys(range(10),[0,0,0,0])#初始化的10条鱼的行动方向位置均为[0,0,0,0]
    for i in range(10):#给每条鱼设置不同的行动方向和位置
        fishlfx=random.randint(0,1)
        if fishlfx==0:
             fishlfx=-1
        fishhfx=random.randint(0,1)
        if fishhfx==0:
            fishhfx=-1
        fishh=random.randint(0,10)
        fishl=random.randint(0,10)
        fish_pos[i]=[fishlfx,fishhfx,[fishl,fishh]]
    return [fish_pos,turtle_pos]
def fish_move(fish_pos):
    k=random.randint(0,1)
    if k==1:
        fish_pos[2][0]+=fish_pos[0]
    else:
        fish_pos[2][1]+=fish_pos[1]
    return fish_pos
def turtle_move(turtle_pos):
    k=random.randint(0,5)
    if k==0:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[3]-=1
    elif k==1:
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=1
    elif k in [2,3]:
        turtle_pos[2][0]+=turtle_pos[0]
        turtle_pos[2][1]+=turtle_pos[1]
        turtle_pos[3]-=2
    elif k in [4,5]:
        turtle_pos[3]-=2
    return turtle_pos
def panduan(pos):
    a=len(pos[0])
    if a==0:
        print('鱼死光了')
    b=pos[1][3]
    if b<=0:
        print('龟死了')
    print(b*a)
    if b*a>0:
        while a and b:
            for i in list(pos[0].keys()):
                if pos[0][i][2]==pos[1][2]:#当乌龟吃掉鱼的时候,把鱼抛出
                    pos[0].pop(i)
                    print('乌龟把鱼%d吃掉了'%i)
                    if pos[1][3]<=80:
                        pos[1][3]+=20
                    else:
                        pos[1][3]=100
                else:
                    if pos[0][i][2][0] in [0,10]:
                        if pos[0][i][2][0] == 0:
                            pos[0][i][0]=1
                        else:
                            pos[0][i][0]=-1
                    if pos[0][i][2][1] in [0,10]:
                        if pos[0][i][2][1] == 0:
                            pos[0][i][1]=1
                        else:
                            pos[0][i][1]=-1
                    pos[0][i]=fish_move(pos[0][i])                
                    #乌龟边界值反向
            if pos[1][2][0] in [0,10]:
                if pos[1][2][0] == 0:
                    pos[1][0]=1
                else:
                    pos[1][0]=-1
            if pos[1][2][1] in [0,10]:
                if pos[1][2][1] == 0:
                    pos[1][1]=1
                else:
                    pos[1][1]=-1
                    #乌龟的行动
            pos[1]=turtle_move(pos[1])
            panduan(pos)#只要还有鱼并且龟活着的时候继续执行
    else:
        if a==0:
            return 1
        else:
            return 0
dict1={}
pos1=pos_cur()#获取初始化的鱼和龟的位置
turtle_life=panduan(pos1)#执行游戏
if turtle_life==0:
        print('龟挂了,游戏结束')
elif turtle==1:
        print('龟赢了')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 17:53:43 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 17:35
不会报错吗?
我这里报错了
你的panduan函数这里有问题

我不知道原来代码可以这样发哈,我这边不会出错,会一直循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 18:02:05 | 显示全部楼层
十月故里 发表于 2020-3-2 17:53
我不知道原来代码可以这样发哈,我这边不会出错,会一直循环

你用代码格式发我就不会报错了
等下,我帮你改改哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 18:19:12 | 显示全部楼层
     我猜这段程序应该是不会停止运行的,除非Ctrl+C终止,原因是panduan函数里面调用panduan函数,有点象递归,但是没有传递参数,每次调用的是一个新的函数,当ab符合条件退出时只是退到上级调用函数,因为局部变量的关系,上级的ab值并未改变,于是继续调用、调用、调用,直到到下一次碰到条件返回一下上级,基本上就成了没有退出机制的递归。要说按这个思路的写的话,我的方案有三个,一个是定义ab为全局变量,子函数调用返回时父函数的ab值也会改变因而能退出程序,二是把panduan函数的return改成sys.exit(),只要符合退出条件就直接退出程序,三就是用正规的递归方式来改写panduan函数。
    不过小甲鱼出这题其实是想要我们学习类和对象的,等你查阅了看到小甲鱼的代码就会发现面向对象编程的好处和乐趣。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
十月故里 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 18:26:07 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 18:04
你的代码陷入无限递归了
要这样写:

大佬,运行之后,如果鱼死光了会报错

乌龟把鱼5吃掉了
乌龟把鱼0吃掉了
乌龟把鱼7吃掉了
乌龟把鱼9吃掉了
乌龟把鱼8吃掉了
乌龟把鱼1吃掉了
乌龟把鱼3吃掉了
乌龟把鱼4吃掉了
乌龟把鱼6吃掉了
乌龟把鱼2吃掉了
鱼死光了
Traceback (most recent call last):
  File "F:/学习笔记/程序/wuguichiyuchenggong.py", line 99, in <module>
    elif turtle==1:
NameError: name 'turtle' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 18:28:46 | 显示全部楼层
txxcat 发表于 2020-3-2 18:19
我猜这段程序应该是不会停止运行的,除非Ctrl+C终止,原因是panduan函数里面调用panduan函数,有点象 ...

我当时想法就是通过递归来实现龟和鱼的坐标变化,刚刚仔细看了下,果然是没有设置返回条件,导致进入死循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 18:39:04 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 18:04
你的代码陷入无限递归了
要这样写:

我知道哪里问题了,是line100哪里的对象名写错了,改成turtle_life就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 18:41:21 | 显示全部楼层    本楼为最佳答案   
十月故里 发表于 2020-3-2 18:39
我知道哪里问题了,是line100哪里的对象名写错了,改成turtle_life就好了

如果有帮助,请设最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 18:46:15 | 显示全部楼层
qiuyouzhi 发表于 2020-3-2 18:41
如果有帮助,请设最佳答案

看完我终于知道我错哪里了,我想用递归解决问题,但是我递归缺了重要的返回了,导致进入了死循环了,就差了一个return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 18:48:04 | 显示全部楼层
十月故里 发表于 2020-3-2 18:46
看完我终于知道我错哪里了,我想用递归解决问题,但是我递归缺了重要的返回了,导致进入了死循环了,就差 ...

嗯嗯,递归递归,归去来兮!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 18:57:58 | 显示全部楼层
本帖最后由 十月故里 于 2020-3-2 22:36 编辑

def fun(a):
        while a:
                a=a-1
                print(a)
                fun(a)
                print(1000)
>>> fun(2)

1

0

1000

1000

0

1000

我用这个代码分析了下我原来写法的问题,当不用return的时候,第一次while执行的条件为真,进入循环后,一直执行到panduan()这里,就会进去第二个while的循环,这样依次循环套循环,无限循环,然后出不来了,只有最后一个乌龟死了的或者鱼挂了的那一个panduan会跳出while返回到上一层,但是这一层同样没有对while的条件进行更改,导致会一直循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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