ОШИБКА TypeError: элемент последовательности 0: ожидаемый экземпляр str, список найден ODD NUMBERS - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь получить все нечетные числа от 1 до число , но у меня возникли некоторые проблемы. Как я могу это исправить? Вывод должен быть таким: 1, 3, 5, 7, ...

number = input("Number: ")
if number.isdigit():
number = int(number)
if number > 0:
    oddNumbers = []
    for i in range(number):
        temp = i%2
        if temp != 0:
            oddNumbers.append([str(i)])
    conc = ', '.join(oddNumbers)
    print(conc)
else:
    print("Error")
else:
    print("Error")

Ответы [ 4 ]

1 голос
/ 17 апреля 2020

Сообщение об ошибке совершенно ясно. Давайте посмотрим на полное сообщение:

Traceback (most recent call last):
  File "script.py", line 10, in <module>
    conc = ', '.join(oddNumbers)
TypeError: sequence item 0: expected str instance, list found

Таким образом, первый элемент (0) в «последовательности» (в данном случае oddNumbers) должен был быть str, но Python найден list на его месте.

Давайте посмотрим, какое значение будет oddNumbers после for-l oop, поместив оператор print под for-l oop:

Number: 5
[['1'], ['3']]

Итак, мы видим, что первое значение в oddNumbers равно ['1']. Так что это действительно list, а не str.

Почему это list?

В этой строке вы добавляете каждое число как str внутри * От 1024 * до oddNumbers:

oddNumbers.append([str(i)])

Если вместо этого просто добавить число в виде str:

oddNumbers.append(str(i))

oddNumbers будет список str ' s к концу for-l oop и join будет успешным:

Number: 5
['1', '3']
1, 3
1 голос
/ 17 апреля 2020

Ваша проблема связана с функцией join, которая является методом объекта String и принимает аргумент итеративного типа, такой как list, tuple, dict и т. Д. c ..

Для правильной работы аргумента должен содержать только строковый тип. В вашем случае у вас есть список из списка. Вот что сообщение об ошибке пытается сказать.

Поэтому снимите скобку в методе добавления, чтобы добавить только строку в список нечетных номеров.

1 голос
/ 17 апреля 2020

Сделайте это:

oddNumbers.append(str(i))

Не это:

oddNumbers.append([str(i)])

0 голосов
/ 17 апреля 2020

Попробуйте вместо этого код:

number = int(input("Number: "))


def get_odd_number(number):
    result = []
    for i in range(number):
        if i % 2 != 0:
            result.append(str(i))
    return result


print(','.join(get_odd_number(number)))


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...