катана (python): проблема кодирования или ошибка? - PullRequest
0 голосов
/ 02 декабря 2018

Хорошо, вот код.Я не планирую печатать ошибку в журнале.Не нужно копировать код.В основном говорится, что существует проблема, когда «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 голосов
/ 02 декабря 2018

Это связано с параметром path, который вы пытаетесь отправить в функцию 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)
0 голосов
/ 02 декабря 2018

Ваш код разбит, потому что он пытается преобразовать строку с нечисловыми символами, например:

In:

text = 'L'
print int(text)

Out:

ValueError: недопустимый литерал для int () с основанием 10: 'L'

Но если:

In:

text = '2'
print int(text)

Out:

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) 

Вы в буквальном смысле пытаетесь преобразовать строки в верхнем регистре в нижний регистр.

...