Py学习  »  Python

Katana(python):编码问题还是bug?

Ellis Hogan • 5 年前 • 1578 次点击  

好的,这是密码。我不打算在日志中键入错误。不需要复制代码。它的基本意思是存在一个问题,即“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 = []

一切正常。有什么想法吗?我本来打算提交一张发行票,但在提交之前我想我可能会问。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43155
 
1578 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Ssein
Reply   •   1 楼
Ssein    6 年前

您的代码出现故障,因为它试图转换包含非数字字符的字符串,例如:

在:

text = 'L'
print int(text)

出:

valueerror:以10为基数的int()的文本无效:“l”

但是如果:

在:

text = '2'
print int(text)

出:

然而,我认为你的大部分代码都是无用的。我只是想把那些部件拆掉。这里是:

编辑:

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) 

你真的在尝试将超级大小写字符串转换成小写。

Mikhail Kanin
Reply   •   2 楼
Mikhail Kanin    6 年前

它与您试图发送到函数i_am_的参数路径相连接。如果您尝试用一个字符发送字符串,那么就没有问题。整数值出现问题。

如果尝试使用以下方法调用函数:

i_am_here(1)

你有问题了

for i in path:

因为在for循环中不能使用简单的整数值,只能使用iterable对象,如列表或字符串。

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

param_lst = [1]

i_am_here(param_lst)

你也应该在这里修改你的代码:

new = ''.join(num)

你应该重写为:

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