我正在嘗試設計一些接受電影標題和持續時間輸入的代碼,將它們添加到一個物件中,然后對其進行排序并列印三個最長的電影,它運行到最后一行然后失敗,我應該如何以不同的方式做呢?
class Movie:
def __init__(self, title, duration):
self.title = title
self.duration = duration
def get_movie_duration(movie):
return movie.duration
class MovieCollection:
def __init__(self):
self.movies = []
def add_movie(self, movie):
self.movies.append(movie)
def print_longest_movies(self):
sorted(Movie, key=get_movie_duration, reverse = True)
print('1. ' str(Movie.title[0]) str(Movie.duration[0]))
print('2. ' str(Movie.title[1]) str(Movie.duration[1]))
print('3. ' str(Movie.title[2]) str(Movie.duration[2]))
collection = MovieCollection()
while True:
title = input('Movie title (or blank to finish): ')
if title == '':
break
duration = int(input('Movie duration (minutes): '))
Movie.title = title
Movie.duration = duration
collection.add_movie(Movie)
print('\n= Longest movies in the collection =')
collection.print_longest_movies()
uj5u.com熱心網友回復:
您的print_longest_movies函式混淆了物件串列及其型別之間的區別。 Movie不是事物的清單。這只是類的名稱。另外,sorted回傳排序后的陣列。它不會改變陣列。你要:
def print_longest_movies(self):
self.movies.sort(key=get_movie_duration, reverse = True)
print('1.', self.movies[0].title, self.movies[0].duration)
print('2.', self.movies[1].title, self.movies[1].duration)
print('3.', self.movies[2].title, self.movies[2].duration)
創建串列時,您也有同樣的困惑。您要創建類的實體,而不是使用類名:
while True:
title = input('Movie title (or blank to finish): ')
if title == '':
break
duration = int(input('Movie duration (minutes): '))
collection.add_movie(Movie(title, duration))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/477528.html
標籤:Python
上一篇:從字串中洗掉亂碼前綴
