武士刀(python):编码问题或错误?

时间:2018-12-02 09:50:31

标签: python python-3.x katana

好的,这是代码。我不打算在日志中输入错误。它不需要复制代码。基本上说,存在一个问题,其中“ L”不是类型int。

def i_am_here(path):
  print(path)
  lst = []
  num = []
  x = 0
  y = 0
  for i in path:
    try: 
        int(i)
        num.append(int(i))
    except ValueError:
        if i == 'r' or i == 'R':
            new = ''.join(num)
            lst.append(new)
            lst.append('r')
            num = []
        if i == 'L' or i == 'l':
            new = ''.join(num)
            lst.append(new)
            lst.append('l')
            num = []
  new = ''.join(num)
  lst.append(new)
  lst = lst[1:len(lst)]
  print(lst)
  for i in range(len(lst)):

    if lst[i] == 'r':
        print(lst[i+1])

enter image description here

好的,所以我99%的人确定这只是我使用时的错误:

for i in path:
    try: 
        int(i)
        num.append(int(i))
    except ValueError:
        if i == 'r' or i == 'R':

            lst.append(num)
            lst.append('r')
            num = []
        if i == 'L' or i == 'l':

            lst.append(num)
            lst.append('l')
            num = []

一切正常。有什么想法吗?我本来要提交问题单,但在此之前我想我可能会问。

2 个答案:

答案 0 :(得分:1)

它与您尝试发送到函数i_am_here的参数路径连接。如果您尝试使用单个字符发送字符串,则没有问题。整数值会引起问题。

如果您尝试通过以下方式调用函数:

i_am_here(1)

您在这里遇到了问题

for i in path:

因为在循环中,您不能使用简单的整数值,而只能使用可迭代对象(例如列表或字符串)。

您应该使用列表,而不是使用单个整数值:

param_lst = [1]

i_am_here(param_lst)

而且您还应该在此处修复代码:

new = ''.join(num)

您应该将其重写为:

new = ''.join(str(n) for n in num)

答案 1 :(得分:0)

您的代码已分解,因为它试图转换具有非数字字符的字符串,例如:

在:

text = 'L'
print int(text)

出局:

  

ValueError:以10为底的'int'()无效文字:'L'

但是如果:

在:

text = '2'
print int(text)

出局:

  

2

但是,我认为您的大多数代码行都是无用的。我只是绑去删除那些部分。这是:

编辑:

def i_am_here(path):
    num = []
    for i in path:
        if isinstance(i, str): #check if 'i' is a sting type
          if i.isdigit():
             num.append(int(i))
          else:  
             num.append(i.lower())
        else:
           num.append(i)
    return(num)

例如:

path= [5, 'r', 'L', 0.00032,'l','55','%','R', [], '{}'] #This is an example
num_List = i_am_here(path)
for i in num_List :
        if i != 'r':
            print(i) 

您实际上是在尝试将大写的字符串转换为小写。