磊之茶 发表于 2020-7-18 22:05:38

请问我的缩进问题出在哪了?

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

代码:
def sc(mb=None):
    if mb==None:
      return None
    c=mb.split('\n')
    ln=0
    relist={}
    for i in c:
      col=0
      for a in i:
            relist[(ln,col)]=True if a ==' ' else False
            col+=1
      ln+=1
    return relist
            
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
      if lnd==win:
            return lnd
      d=(ln+1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln-1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln,col+1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln,col-1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      else:
            lnd.pop()
            worn.append(d)
            panduan(mb,lnd,worn,win)
if __name__=='__main__':
    d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
    mu=sc(d)
    for i in mu:
      g=i
    d=panduan(mu,win=g)
    if d=="I don't know!":
      print('你这是无解的迷宫!')
    else:
      for i in d:
            mu=''
      for i in mu:
            print(mu,end='')
它说缩进有问题。但它到底哪里有缩进问题了?

磊之茶 发表于 2020-7-18 22:06:10

有谁能解决缩进问题?

wuqramy 发表于 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
      if lnd==win:
            return lnd
      d=(ln+1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln-1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln,col+1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln,col-1)
      elif d not in lnd and d not in worn and mb:
            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)放在默认参数前面定义
正确代码,试一试:
def sc(mb=None):
    if mb==None:
      return None
    c=mb.split('\n')
    ln=0
    relist={}
    for i in c:
      col=0
      for a in i:
            relist[(ln,col)]=True if a ==' ' else False
            col+=1
      ln+=1
    return relist

def panduan(win,mb={},lnd=[(0,0)],worn=[]):
    if type(mb) != dict or (0,0) in worn:
      return "I don't know!"
    else:
      ln,col=lnd
      if lnd==win:
            return lnd
            d=(ln+1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
            d=(ln-1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
            d=(ln,col+1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
            d=(ln,col-1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      else:
            lnd.pop()
            worn.append(d)
            panduan(mb,lnd,worn,win)
if __name__=='__main__':
    d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
    mu=sc(d)
    for i in mu:
      g=i
    d=panduan(mu,win=g)
    if d=="I don't know!":
      print('你这是无解的迷宫!')
    else:
      for i in d:
            mu=''
      for i in mu:
            print(mu,end='')
如果没有实现目的,elif这个错误用if分开写:
def sc(mb=None):
    if mb == None:
      return None
    c = mb.split('\n')
    ln = 0
    relist = {}
    for i in c:
      col = 0
      for a in i:
            relist[(ln, col)] = True if a == ' ' else False
            col += 1
      ln += 1
    return relist


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
      if lnd == win:
            return lnd
      d = (ln + 1, col)
      if d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      d = (ln - 1, col)
      if d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)

      d = (ln, col + 1)
      if d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      d = (ln, col - 1)
      if d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      else:
            lnd.pop()
            worn.append(d)
            panduan(mb, lnd, worn, win)
if __name__ == '__main__':
    d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')
    mu = sc(d)
    for i in mu:
      g = i
    d = panduan(mu, win=g)
    if d == "I don't know!":
      print('你这是无解的迷宫!')
    else:
      for i in d:
            mu = ''
      for i in mu:
            print(mu, end='')

1q23w31 发表于 2020-7-18 22:08:27

本帖最后由 1q23w31 于 2020-7-18 22:12 编辑

def sc(mb=None):
    if mb==None:
      return None
    c=mb.split('\n')
    ln=0
    relist={}
    for i in c:
      col=0
      for a in i:
            relist[(ln,col)]=True if a ==' ' else False
            col+=1
      ln+=1
    return relist
            
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
      if lnd==win:
            return lnd
      d=(ln+1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
       d=(ln-1,col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
       d=(ln,col+1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      d=(ln,col-1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb,lnd,worn,win)
      else:
            lnd.pop()
            worn.append(d)
            panduan(mb,lnd,worn,win)
if __name__=='__main__':
    d=input('请在下方输入这个迷宫的样子:(空格为没有)\n')
    mu=sc(d)
    for i in mu:
      g=i
    d=panduan(mu,win=g)
    if d=="I don't know!":
      print('你这是无解的迷宫!')
    else:
      for i in d:
            mu=''
      for i in mu:
            print(mu,end='')

磊之茶 发表于 2020-7-18 22:16:28

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

win不是一个函数,是一个参数{:10_277:}

Twilight6 发表于 2020-7-18 22:18:39

磊之茶 发表于 2020-7-18 22:16
win不是一个函数,是一个参数

噗的确是 怪我没认真,改完了你重新看看吧,参数没设置默认值的不能放在设置默认值的后面

永恒的蓝色梦想 发表于 2020-7-18 22:20:09

磊之茶 发表于 2020-7-18 22:16
win不是一个函数,是一个参数

你这串代码根本不能运行,d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')input 只会读取一行

永恒的蓝色梦想 发表于 2020-7-18 22:21:02

磊之茶 发表于 2020-7-18 22:16
win不是一个函数,是一个参数

你是不是想用关键字参数啊{:10_277:}def sc(mb=None):
    if mb == None:
      return None
    c = mb.split('\n')
    ln = 0
    relist = {}
    for i in c:
      col = 0
      for a in i:
            relist[(ln, col)] = a == ' '
            col += 1
      ln += 1
    return relist


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
      if lnd == win:
            return lnd
      d = (ln+1, col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      d = (ln-1, col)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      d = (ln, col+1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      d = (ln, col-1)
      elif d not in lnd and d not in worn and mb:
            lnd.append(d)
            panduan(mb, lnd, worn, win)
      else:
            lnd.pop()
            worn.append(d)
            panduan(mb, lnd, worn, win)


if __name__ == '__main__':
    d = input('请在下方输入这个迷宫的样子:(空格为没有)\n')
    mu = sc(d)
    for i in mu:
      g = i
    d = panduan(mu, win=g)
    if d == "I don't know!":
      print('你这是无解的迷宫!')
    else:
      for i in d:
            mu = ''
      for i in mu:
            print(mu, end='')

磊之茶 发表于 2020-7-20 09:17:54

永恒的蓝色梦想 发表于 2020-7-18 22:21
你是不是想用关键字参数啊

没错

nahongyan1997 发表于 2020-7-21 11:54:04

研究了半天才发现你打算用递归。{:10_277:}
页: [1]
查看完整版本: 请问我的缩进问题出在哪了?