如何在python年龄排序程序中对输入进行排序

时间:2018-10-31 22:18:15

标签: python

我刚刚制作了一个程序,您可以在其中键入您的姓名和年龄,并且应该按年龄从小到大的顺序对人们进行排序。到目前为止,这是我的代码:

student_ages = {}

polling_for_age_active = True

while polling_for_age_active:
    name = input("\nWhat is your name?")
    response = input("How old are you?")
    response = int()
    student_ages[name] = response

    repeat = input("Are there any other people to go? (yes\no)")
    if repeat == 'no':
        polling_for_age_active = False

print("\n----Ages(from least to greatest)----")
for name, response in student_ages.items():
    response.sort()
    print(name + " is " + response + " years old.")

运行代码时,外壳程序说int对象无法排序。是否有人对如何解决甚至改进有任何想法?谢谢。

2 个答案:

答案 0 :(得分:1)

您必须在for循环之前对字典进行排序。变量response的循环类型里面是字符串,无法对其进行排序。

for周期之前

student_ages_sorted = sorted(student_ages.items(), key=lambda x: x[1])

答案 1 :(得分:0)

您的程序有几个问题。但是主要的设计问题是您使用的字典是无序的集合,并且当您调用response.sort()时,它只是试图对不执行任何操作的单个项目进行排序(无法对整数进行排序) )。

您可以代替的是将词典项目转换为已排序的列表,然后将其打印出来。我们可以将这些项目存储为元组,以便在列表中同时包含名称和年龄数据。

sorted_list = sorted(student_ages.items(), key=lambda kv: kv[1]) # Makes a list of tuples sorted by the values
# Loop through sorted_list of tuples
for name, age in sorted_list:
    print("{} is {} years old".format(name, age))

程序的另一个小问题是您没有正确地接受输入并将其转换为整数。您打给int()的电话只会返回所有年龄段的0

要解决此问题,您需要将字符串作为参数传递给int()调用,以便将string转换为int

response = input("How old are you?")
response = int(response) # converts response to an int

您可能希望将try / except块放在转换为int的周围,以确保输入了有效的输入。