鱼C论坛

 找回密码
 立即注册
查看: 473|回复: 9

[已解决]请问我的缩进问题出在哪了?

[复制链接]
发表于 2020-7-18 22:05:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 磊之茶 于 2020-7-18 22:09 编辑

代码:
  1. def sc(mb=None):
  2.     if mb==None:
  3.         return None
  4.     c=mb.split('\n')
  5.     ln=0
  6.     relist={}
  7.     for i in c:
  8.         col=0
  9.         for a in i:
  10.             relist[(ln,col)]=True if a ==' ' else False
  11.             col+=1
  12.         ln+=1
  13.     return relist
  14.             
  15. def panduan(mb={},lnd=[(0,0)],worn=[],win):
  16.     if type(mb) != dict or (0,0) in worn:
  17.         return "I don't know!"
  18.     else:
  19.         ln,col=lnd[len(lnd)-1]
  20.         if lnd[len(lnd)-1]==win:
  21.             return lnd
  22.         d=(ln+1,col)
  23.         elif d not in lnd and d not in worn and mb[d]:
  24.             lnd.append(d)
  25.             panduan(mb,lnd,worn,win)
  26.         d=(ln-1,col)
  27.         elif d not in lnd and d not in worn and mb[d]:
  28.             lnd.append(d)
  29.             panduan(mb,lnd,worn,win)
  30.         d=(ln,col+1)
  31.         elif d not in lnd and d not in worn and mb[d]:
  32.             lnd.append(d)
  33.             panduan(mb,lnd,worn,win)
  34.         d=(ln,col-1)
  35.         elif d not in lnd and d not in worn and mb[d]:
  36.             lnd.append(d)
  37.             panduan(mb,lnd,worn,win)
  38.         else:
  39.             lnd.pop()
  40.             worn.append(d)
  41.             panduan(mb,lnd,worn,win)
  42. if __name__=='__main__':
  43.     d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  44.     mu=sc(d)
  45.     for i in mu:
  46.         g=i
  47.     d=panduan(mu,win=g)
  48.     if d=="I don't know!":
  49.         print('你这是无解的迷宫!')
  50.     else:
  51.         for i in d:
  52.             mu[d]=''
  53.         for i in mu:
  54.             print(mu[i],end='')
复制代码

它说缩进有问题。但它到底哪里有缩进问题了?
最佳答案
2020-7-18 22:06:33
本帖最后由 wuqramy 于 2020-7-18 22:16 编辑

来看这一段:
def panduan(mb={},lnd=[(0,0)],worn=[],win):
    if type(mb) != dict or (0,0) in worn:
        return "I don't know!"
    else:
        ln,col=lnd[len(lnd)-1]
        if lnd[len(lnd)-1]==win:
            return lnd
        d=(ln+1,col)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        d=(ln-1,col)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        d=(ln,col+1)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        d=(ln,col-1)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        else:
            lnd.pop()
            worn.append(d)
            panduan(mb,lnd,worn,win)

问题1:黄色部分影响了elif的运行,分别要加一个Tab
问题2:这里它报错:
SyntaxError: non-default argument follows default argument
翻译:SyntaxError:非默认参数跟随默认参数

我们要把非默认参数(win)放在默认参数前面定义
正确代码,试一试:
  1. def sc(mb=None):
  2.     if mb==None:
  3.         return None
  4.     c=mb.split('\n')
  5.     ln=0
  6.     relist={}
  7.     for i in c:
  8.         col=0
  9.         for a in i:
  10.             relist[(ln,col)]=True if a ==' ' else False
  11.             col+=1
  12.         ln+=1
  13.     return relist

  14. def panduan(win,mb={},lnd=[(0,0)],worn=[]):
  15.     if type(mb) != dict or (0,0) in worn:
  16.         return "I don't know!"
  17.     else:
  18.         ln,col=lnd[len(lnd)-1]
  19.         if lnd[len(lnd)-1]==win:
  20.             return lnd
  21.             d=(ln+1,col)
  22.         elif d not in lnd and d not in worn and mb[d]:
  23.             lnd.append(d)
  24.             panduan(mb,lnd,worn,win)
  25.             d=(ln-1,col)
  26.         elif d not in lnd and d not in worn and mb[d]:
  27.             lnd.append(d)
  28.             panduan(mb,lnd,worn,win)
  29.             d=(ln,col+1)
  30.         elif d not in lnd and d not in worn and mb[d]:
  31.             lnd.append(d)
  32.             panduan(mb,lnd,worn,win)
  33.             d=(ln,col-1)
  34.         elif d not in lnd and d not in worn and mb[d]:
  35.             lnd.append(d)
  36.             panduan(mb,lnd,worn,win)
  37.         else:
  38.             lnd.pop()
  39.             worn.append(d)
  40.             panduan(mb,lnd,worn,win)
  41. if __name__=='__main__':
  42.     d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  43.     mu=sc(d)
  44.     for i in mu:
  45.         g=i
  46.     d=panduan(mu,win=g)
  47.     if d=="I don't know!":
  48.         print('你这是无解的迷宫!')
  49.     else:
  50.         for i in d:
  51.             mu[d]=''
  52.         for i in mu:
  53.             print(mu[i],end='')
复制代码

如果没有实现目的,elif这个错误用if分开写:
  1. def sc(mb=None):
  2.     if mb == None:
  3.         return None
  4.     c = mb.split('\n')
  5.     ln = 0
  6.     relist = {}
  7.     for i in c:
  8.         col = 0
  9.         for a in i:
  10.             relist[(ln, col)] = True if a == ' ' else False
  11.             col += 1
  12.         ln += 1
  13.     return relist


  14. def panduan(mb={}, lnd=[(0, 0)], worn=[], win):
  15.     if type(mb) != dict or (0, 0) in worn:
  16.         return "I don't know!"
  17.     else:
  18.         ln, col = lnd[len(lnd) - 1]
  19.         if lnd[len(lnd) - 1] == win:
  20.             return lnd
  21.         d = (ln + 1, col)
  22.         if d not in lnd and d not in worn and mb[d]:
  23.             lnd.append(d)
  24.             panduan(mb, lnd, worn, win)
  25.         d = (ln - 1, col)
  26.         if d not in lnd and d not in worn and mb[d]:
  27.             lnd.append(d)
  28.             panduan(mb, lnd, worn, win)

  29.         d = (ln, col + 1)
  30.         if d not in lnd and d not in worn and mb[d]:
  31.             lnd.append(d)
  32.             panduan(mb, lnd, worn, win)
  33.         d = (ln, col - 1)
  34.         if d not in lnd and d not in worn and mb[d]:
  35.             lnd.append(d)
  36.             panduan(mb, lnd, worn, win)
  37.         else:
  38.             lnd.pop()
  39.             worn.append(d)
  40.             panduan(mb, lnd, worn, win)
  41. if __name__ == '__main__':
  42.     d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  43.     mu = sc(d)
  44.     for i in mu:
  45.         g = i
  46.     d = panduan(mu, win=g)
  47.     if d == "I don't know!":
  48.         print('你这是无解的迷宫!')
  49.     else:
  50.         for i in d:
  51.             mu[d] = ''
  52.         for i in mu:
  53.             print(mu[i], end='')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-18 22:06:10 | 显示全部楼层
有谁能解决缩进问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-18 22:06:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wuqramy 于 2020-7-18 22:16 编辑

来看这一段:
def panduan(mb={},lnd=[(0,0)],worn=[],win):
    if type(mb) != dict or (0,0) in worn:
        return "I don't know!"
    else:
        ln,col=lnd[len(lnd)-1]
        if lnd[len(lnd)-1]==win:
            return lnd
        d=(ln+1,col)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        d=(ln-1,col)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        d=(ln,col+1)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        d=(ln,col-1)
        elif d not in lnd and d not in worn and mb[d]:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
        else:
            lnd.pop()
            worn.append(d)
            panduan(mb,lnd,worn,win)

问题1:黄色部分影响了elif的运行,分别要加一个Tab
问题2:这里它报错:
SyntaxError: non-default argument follows default argument
翻译:SyntaxError:非默认参数跟随默认参数

我们要把非默认参数(win)放在默认参数前面定义
正确代码,试一试:
  1. def sc(mb=None):
  2.     if mb==None:
  3.         return None
  4.     c=mb.split('\n')
  5.     ln=0
  6.     relist={}
  7.     for i in c:
  8.         col=0
  9.         for a in i:
  10.             relist[(ln,col)]=True if a ==' ' else False
  11.             col+=1
  12.         ln+=1
  13.     return relist

  14. def panduan(win,mb={},lnd=[(0,0)],worn=[]):
  15.     if type(mb) != dict or (0,0) in worn:
  16.         return "I don't know!"
  17.     else:
  18.         ln,col=lnd[len(lnd)-1]
  19.         if lnd[len(lnd)-1]==win:
  20.             return lnd
  21.             d=(ln+1,col)
  22.         elif d not in lnd and d not in worn and mb[d]:
  23.             lnd.append(d)
  24.             panduan(mb,lnd,worn,win)
  25.             d=(ln-1,col)
  26.         elif d not in lnd and d not in worn and mb[d]:
  27.             lnd.append(d)
  28.             panduan(mb,lnd,worn,win)
  29.             d=(ln,col+1)
  30.         elif d not in lnd and d not in worn and mb[d]:
  31.             lnd.append(d)
  32.             panduan(mb,lnd,worn,win)
  33.             d=(ln,col-1)
  34.         elif d not in lnd and d not in worn and mb[d]:
  35.             lnd.append(d)
  36.             panduan(mb,lnd,worn,win)
  37.         else:
  38.             lnd.pop()
  39.             worn.append(d)
  40.             panduan(mb,lnd,worn,win)
  41. if __name__=='__main__':
  42.     d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  43.     mu=sc(d)
  44.     for i in mu:
  45.         g=i
  46.     d=panduan(mu,win=g)
  47.     if d=="I don't know!":
  48.         print('你这是无解的迷宫!')
  49.     else:
  50.         for i in d:
  51.             mu[d]=''
  52.         for i in mu:
  53.             print(mu[i],end='')
复制代码

如果没有实现目的,elif这个错误用if分开写:
  1. def sc(mb=None):
  2.     if mb == None:
  3.         return None
  4.     c = mb.split('\n')
  5.     ln = 0
  6.     relist = {}
  7.     for i in c:
  8.         col = 0
  9.         for a in i:
  10.             relist[(ln, col)] = True if a == ' ' else False
  11.             col += 1
  12.         ln += 1
  13.     return relist


  14. def panduan(mb={}, lnd=[(0, 0)], worn=[], win):
  15.     if type(mb) != dict or (0, 0) in worn:
  16.         return "I don't know!"
  17.     else:
  18.         ln, col = lnd[len(lnd) - 1]
  19.         if lnd[len(lnd) - 1] == win:
  20.             return lnd
  21.         d = (ln + 1, col)
  22.         if d not in lnd and d not in worn and mb[d]:
  23.             lnd.append(d)
  24.             panduan(mb, lnd, worn, win)
  25.         d = (ln - 1, col)
  26.         if d not in lnd and d not in worn and mb[d]:
  27.             lnd.append(d)
  28.             panduan(mb, lnd, worn, win)

  29.         d = (ln, col + 1)
  30.         if d not in lnd and d not in worn and mb[d]:
  31.             lnd.append(d)
  32.             panduan(mb, lnd, worn, win)
  33.         d = (ln, col - 1)
  34.         if d not in lnd and d not in worn and mb[d]:
  35.             lnd.append(d)
  36.             panduan(mb, lnd, worn, win)
  37.         else:
  38.             lnd.pop()
  39.             worn.append(d)
  40.             panduan(mb, lnd, worn, win)
  41. if __name__ == '__main__':
  42.     d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  43.     mu = sc(d)
  44.     for i in mu:
  45.         g = i
  46.     d = panduan(mu, win=g)
  47.     if d == "I don't know!":
  48.         print('你这是无解的迷宫!')
  49.     else:
  50.         for i in d:
  51.             mu[d] = ''
  52.         for i in mu:
  53.             print(mu[i], end='')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-18 22:08:27 | 显示全部楼层
本帖最后由 1q23w31 于 2020-7-18 22:12 编辑
  1. def sc(mb=None):
  2.     if mb==None:
  3.         return None
  4.     c=mb.split('\n')
  5.     ln=0
  6.     relist={}
  7.     for i in c:
  8.         col=0
  9.         for a in i:
  10.             relist[(ln,col)]=True if a ==' ' else False
  11.             col+=1
  12.         ln+=1
  13.     return relist
  14.             
  15. def panduan(mb={},lnd=[(0,0)],worn=[],win):
  16.     if type(mb) != dict or (0,0) in worn:
  17.         return "I don't know!"
  18.     else:
  19.         ln,col=lnd[len(lnd)-1]
  20.         if lnd[len(lnd)-1]==win:
  21.             return lnd
  22.       [color=Red]  d=(ln+1,col)[/color]
  23.         elif d not in lnd and d not in worn and mb[d]:
  24.             lnd.append(d)
  25.             panduan(mb,lnd,worn,win)
  26.        [color=Red] d=(ln-1,col)[/color]
  27.         elif d not in lnd and d not in worn and mb[d]:
  28.             lnd.append(d)
  29.             panduan(mb,lnd,worn,win)
  30.        [color=Red] d=(ln,col+1)[/color]
  31.         elif d not in lnd and d not in worn and mb[d]:
  32.             lnd.append(d)
  33.             panduan(mb,lnd,worn,win)
  34.         [color=Red]d=(ln,col-1)[/color]
  35.         elif d not in lnd and d not in worn and mb[d]:
  36.             lnd.append(d)
  37.             panduan(mb,lnd,worn,win)
  38.         else:
  39.             lnd.pop()
  40.             worn.append(d)
  41.             panduan(mb,lnd,worn,win)
  42. if __name__=='__main__':
  43.     d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  44.     mu=sc(d)
  45.     for i in mu:
  46.         g=i
  47.     d=panduan(mu,win=g)
  48.     if d=="I don't know!":
  49.         print('你这是无解的迷宫!')
  50.     else:
  51.         for i in d:
  52.             mu[d]=''
  53.         for i in mu:
  54.             print(mu[i],end='')
复制代码
[quote][url=forum.php?mod=redirect&goto=findpost&pid=4841352&ptid=175221][/code]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-18 22:16:28 | 显示全部楼层
Twilight6 发表于 2020-7-18 22:12
代码中的  win 是哪个函数? 代码有很多地方是错的唉,只能帮你改这么多了,我也不懂正确与否,不过运行 ...

win不是一个函数,是一个参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-18 22:18:39 | 显示全部楼层
磊之茶 发表于 2020-7-18 22:16
win不是一个函数,是一个参数

噗  的确是 怪我没认真,改完了你重新看看吧,参数没设置默认值的不能放在设置默认值的后面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-18 22:20:09 | 显示全部楼层
磊之茶 发表于 2020-7-18 22:16
win不是一个函数,是一个参数

你这串代码根本不能运行,
  1. d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')
复制代码
input 只会读取一行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-18 22:21:02 | 显示全部楼层
磊之茶 发表于 2020-7-18 22:16
win不是一个函数,是一个参数

你是不是想用关键字参数啊
  1. def sc(mb=None):
  2.     if mb == None:
  3.         return None
  4.     c = mb.split('\n')
  5.     ln = 0
  6.     relist = {}
  7.     for i in c:
  8.         col = 0
  9.         for a in i:
  10.             relist[(ln, col)] = a == ' '
  11.             col += 1
  12.         ln += 1
  13.     return relist


  14. def panduan(mb={}, lnd=[(0, 0)], worn=[], *, win):
  15.     if type(mb) != dict or (0, 0) in worn:
  16.         return "I don't know!"
  17.     else:
  18.         ln, col = lnd[len(lnd)-1]
  19.         if lnd[len(lnd)-1] == win:
  20.             return lnd
  21.         d = (ln+1, col)
  22.         elif d not in lnd and d not in worn and mb[d]:
  23.             lnd.append(d)
  24.             panduan(mb, lnd, worn, win)
  25.         d = (ln-1, col)
  26.         elif d not in lnd and d not in worn and mb[d]:
  27.             lnd.append(d)
  28.             panduan(mb, lnd, worn, win)
  29.         d = (ln, col+1)
  30.         elif d not in lnd and d not in worn and mb[d]:
  31.             lnd.append(d)
  32.             panduan(mb, lnd, worn, win)
  33.         d = (ln, col-1)
  34.         elif d not in lnd and d not in worn and mb[d]:
  35.             lnd.append(d)
  36.             panduan(mb, lnd, worn, win)
  37.         else:
  38.             lnd.pop()
  39.             worn.append(d)
  40.             panduan(mb, lnd, worn, win)


  41. if __name__ == '__main__':
  42.     d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')
  43.     mu = sc(d)
  44.     for i in mu:
  45.         g = i
  46.     d = panduan(mu, win=g)
  47.     if d == "I don't know!":
  48.         print('你这是无解的迷宫!')
  49.     else:
  50.         for i in d:
  51.             mu[d] = ''
  52.         for i in mu:
  53.             print(mu[i], end='')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-20 09:17:54 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-18 22:21
你是不是想用关键字参数啊

没错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 11:54:04 | 显示全部楼层
研究了半天才发现你打算用递归。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 01:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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