我刚刚制作了一个程序,您可以在其中键入您的姓名和年龄,并且应该按年龄从小到大的顺序对人们进行排序。到目前为止,这是我的代码:
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
对象无法排序。是否有人对如何解决甚至改进有任何想法?谢谢。
答案 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的周围,以确保输入了有效的输入。