【问题标题】:Sorting objects by name and sorting by number按名称排序对象并按编号排序
【发布时间】:2019-07-13 05:19:48
【问题描述】:

在按名称或编号对列表中的对象进行排序方面需要帮助。

目前我可以让它们按值排序,但我不能对名称做同样的事情

我尝试过使用 def 排序名称(t): 返回 t[0]

def sort_courses_by_name(课程): 返回课程.sort(key=sort_names)

导入系统

            class Course:
                def __init__(self, name, units, term):
                    self.name = name
                    self.units = units
                    self.term = term

                def __repr__(self):
                    return f'<Course(name={self.name}, units={self.units}, term={self.term}>'

                def __str__(self):
                    return self.name + "        " + str(self.units) + "        " + self.term

                def __lt__(self, other):
                    # ALLOWS SORTING BY NAME
                    return self.units < other.units


            def show_menu():
                menu = "\nPlease choose 1 of the following options:\n\t1. List all courses\n\t2." \
                    " Add a course\n\t3. Drop a course\n\t4. Sort courses based on course name" \
                    "\n\t5. Sort courses based on number of units"
                print(menu)


            def list_courses(courses):
                if len(courses):
                    print('Your course list: ')
                    print('Name:' + "       " +'Units:' + "     " + 'Term: ')
                    for course in courses:
                        print(course)
                else:
                    print('\nYou are not currently taking any courses.')


            def add_course(courses):
                name = input('\nEnter course name: ')
                units = input('Enter the number of units for the course: ')
                term = input('Enter the term for this course: ')
                course = Course(name, units, term)
                courses.append(course)


            def drop_course(courses):

                if len(courses) != 0:
                    name = input('Enter the course name you wish to drop: ').strip()
                    found = False
                    for i in range(len(courses)):
                        if name == courses[i].name:
                            found = True
                            courses.pop(i)
                            break

                    if not found:
                        print("Sorry no class exists")
                else:
                    print("\nsorry, no classes to drop")


            def sort_courses_by_name(courses):
                return courses.sort(name)


            def sort_courses_by_units(courses):
                return courses.sort()


            def main():
                selection = 0
                courses = []
                while selection != 6:
                    show_menu()

                    try:
                        selection = int(input("\nEnter your option: "))
                    except ValueError:
                        print("\nSorry, Please pick a valid option")
                        continue

                    if selection == 1:
                        list_courses(courses)
                    elif selection == 2:
                        add_course(courses)
                    elif selection == 3:
                        drop_course(courses)
                    elif selection == 4:
                        sort_courses_by_name(courses)
                        print("~~~~~~~~~~~~")
                        list_courses(courses)
                    elif selection == 5:
                        sort_courses_by_units(courses)
                        list_courses(courses)
                    elif selection == 6:
                        print("good bye")
                        sys.exit
                    else:
                        print("Invalid entry, please enter an option from the menu")


            main()

课程: 单位: 学期: cist 4 弹簧 比斯特 5 夏天

输入一个选项:4(按名称排序)

课程: 单位: 学期: 比斯特 5 夏天 cist 4 弹簧

【问题讨论】:

  • 我试图修复的部分是 def sort_courses_by_name

标签: python-3.x


【解决方案1】:

尝试按名称排序

def sort_courses_by_name(courses):
    return courses.sort(key = lambda x : x.name)

【讨论】:

  • @HalukMuratoglu,如果我的回答有帮助,请接受。 (我的答案左侧的勾号)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2011-09-03
相关资源
最近更新 更多