Почему при добавлении в список python его тип устанавливается равным None? - PullRequest
0 голосов
/ 22 декабря 2018

Я просмотрел остальную часть Stack Exchange и нашел вопросы, которые похожи, но не совпадают с моими и не помогли.

Мой код выглядит следующим образом:

class star:
    def __init__(self):
        # irrelevant other variables
        self.planets = []

    def genPlanets(self):
        self.planets.append(random.uniform(self.frostLine*0.98, self.frostLine*1.02))
        print ("There is a planet at " + str(self.planets[0]) + " AU away from the star.")

Эта часть кода выводит на консоль следующее:

[]

В 2,916687900748318 AU от звезды находится планета.

Однако в следующей части кода:

def genPlanets:
    # irrelevant, working code.

    planetSort = planets.sort()
    for p in planetSort:
        file.write("There is a planet at " + str(p) + " AU away from the star.")

Он выводит:

Трассировка (последний последний вызов):

Файл "C:\ Users \ Dominic \ Documents \ Coding \ The Galaxy Maker \ MAin.py ", строка 145, в

Star.outerHabitable, Star.innerPlanetary, Star.outerPlanetary, Star.frostLine, Star.planets)

Файл "C: \ Users \ Dominic \ Documents \ Coding \ The Galaxy Maker \ MAin.py", строка 125, в writeData

для p в planetSort:

TypeError:Объект 'NoneType' не повторяется

Я не понимаю, как это произошло, и я не понимаю, почему функция добавления возвращает тип None!Пожалуйста, помогите!

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

def genPlanets: # нерелевантный, рабочий код.

planetSort = planets.sort()
for p in planetSort:
    file.write("There is a planet at " + str(p) + " AU away from the star."

Здесь planetSort был ничем, потому что вы не указали значения для планет для сортировки, следовательно, ошибка показала, что это было'NoneType'.

0 голосов
/ 22 декабря 2018

list.sort() сортирует список на месте и возвращает None, в то время как list.sorted() делает то, что вы ожидали.

Либо вызовите sort() и используйте оригинальный, теперь отсортированный список:

planets.sort()
for p in planets:
    ...

Или используйте вместо него функцию sorted():

planetSort = planets.sorted()
for p in planetSort:
    ...
0 голосов
/ 22 декабря 2018

Попробуйте это:

def genPlanets:
    # irrelevant, working code.

    planets.sort()
    for p in planets:
        file.write("There is a planet at " + str(p) + " AU away from the star.")

Метод .sort () преобразует объект, к которому вы его применяете, вместо того, чтобы возвращать отсортированный список.

...