如何对变量中的整数进行排序?
How to sort integers in a variable?
Please note that this is on Python 3.3
代码如下:
students=int(input("How many student's score do you want to sort? "))
options=input("What do you want to sort: [Names with scores] , [Scores high to low] , [Scores averages] ? ")
options=options.upper()
if options == ("NAMES WITH SCORES") or options == ("NAME WITH SCORE") or options == ("NAME WITH SCORES") or options == ("NAMES WITH SCORE"):
a=[]
for i in range(0,students):
name=input("Enter your scores and name: ")
a.append(name)
a.sort()
print("Here are the students scores listed alphabetically")
print(a)
if options == ("SCORES HIGH TO LOW") or options == ("SCORE HIGH TO LOW"):
b=[]
number=0
for i in range(0,students):
number = number+1
print("Student "+str(number))
name2=int(input("Enter your first score: "))
name3=int(input("Enter your second score: "))
name4=int(input("Enter your third score: "))
b.append(name2)
b.append(name3)
b.append(name4)
final_score = name2 + name3 + name4
print (final_score)
b.sort(final_score)
print("Student "+str(number) )
print(b)
代码的结果如下:
>>>
How many student's score do you want to sort? 2
What do you want to sort: [Names with scores] , [Scores high to low] , [Scores averages] ? scores high to low
Student 1
Enter your first score: 1
Enter your second score: 2
Enter your third score: 3
Student 2
Enter your first score: 3
Enter your second score: 5
Enter your third score: 6
14
Traceback (most recent call last):
File "H:\GCSE Computing\Task 3\Task 3.py", line 31, in <module>
b.sort(final_score)
TypeError: must use keyword argument for key function
>>>
我要代码把学生的三个成绩相加,然后对学生的总成绩进行排序,按照名字排序。
例如:
(2 名学生)
学生1
- 分数 1 - 2
- 得分 2 - 4
- 得分 3 - 7
(所以总数是13)
学生2
- 分数 1 - 5
- 得分 2 - 1
- 得分 3 - 4
(所以总数是10)
(程序按从高到低的顺序打印)
"Student 1 - 15 , Student 2 - 10"
传递函数排序时需要使用语法 key=final_score
:
b.sort(key=final_score)
但是排序方法期望在 中传递 function
而不是 变量,因此通过添加 name2 + name3 + name4
传递 int
值是不会工作。
如果您只想对分数列表进行排序,只需调用 b.sort()
您应该做的是使用 defautdict 并将每个名称用作键并将所有分数存储在列表中:
from collections import defaultdict
d = defaultdict(list)
for _ in range(students):
name = input("Enter your name: ")
scores = input("Enter your scores separated by a space: "
# add all scores for the user to the list
d[name].extend(map(int,scores.split()))
显示平均值、总计和最大值很简单:
# from statistics import mean will work for python 3.4
for k,v in d.items():
print("Scores total for {} is {}".format(k,sum(v)))
print("Scores average for {} is {}".format(k,sum(v)/len(v))) # mean(v) for python 3,4
print("Highest score for {} is {}".format(k, max(v)))
打印按最高用户总分排序:
print("The top scoring students from highest to lowest are:")
for k,v in sorted(d.items(),key=lambda x:sum(x[1]),reverse=True):
print("{} : {}".format(k,sum(v)))
现在你有一个字典,其中学生姓名是键,每个学生的分数都存储在一个列表中。
你真的应该添加一个 try/except 接受用户输入并验证它的格式是否正确。
Please note that this is on Python 3.3
代码如下:
students=int(input("How many student's score do you want to sort? "))
options=input("What do you want to sort: [Names with scores] , [Scores high to low] , [Scores averages] ? ")
options=options.upper()
if options == ("NAMES WITH SCORES") or options == ("NAME WITH SCORE") or options == ("NAME WITH SCORES") or options == ("NAMES WITH SCORE"):
a=[]
for i in range(0,students):
name=input("Enter your scores and name: ")
a.append(name)
a.sort()
print("Here are the students scores listed alphabetically")
print(a)
if options == ("SCORES HIGH TO LOW") or options == ("SCORE HIGH TO LOW"):
b=[]
number=0
for i in range(0,students):
number = number+1
print("Student "+str(number))
name2=int(input("Enter your first score: "))
name3=int(input("Enter your second score: "))
name4=int(input("Enter your third score: "))
b.append(name2)
b.append(name3)
b.append(name4)
final_score = name2 + name3 + name4
print (final_score)
b.sort(final_score)
print("Student "+str(number) )
print(b)
代码的结果如下:
>>>
How many student's score do you want to sort? 2
What do you want to sort: [Names with scores] , [Scores high to low] , [Scores averages] ? scores high to low
Student 1
Enter your first score: 1
Enter your second score: 2
Enter your third score: 3
Student 2
Enter your first score: 3
Enter your second score: 5
Enter your third score: 6
14
Traceback (most recent call last):
File "H:\GCSE Computing\Task 3\Task 3.py", line 31, in <module>
b.sort(final_score)
TypeError: must use keyword argument for key function
>>>
我要代码把学生的三个成绩相加,然后对学生的总成绩进行排序,按照名字排序。
例如: (2 名学生)
学生1
- 分数 1 - 2
- 得分 2 - 4
- 得分 3 - 7
(所以总数是13)
学生2
- 分数 1 - 5
- 得分 2 - 1
- 得分 3 - 4
(所以总数是10)
(程序按从高到低的顺序打印)
"Student 1 - 15 , Student 2 - 10"
传递函数排序时需要使用语法 key=final_score
:
b.sort(key=final_score)
但是排序方法期望在 中传递 function
而不是 变量,因此通过添加 name2 + name3 + name4
传递 int
值是不会工作。
如果您只想对分数列表进行排序,只需调用 b.sort()
您应该做的是使用 defautdict 并将每个名称用作键并将所有分数存储在列表中:
from collections import defaultdict
d = defaultdict(list)
for _ in range(students):
name = input("Enter your name: ")
scores = input("Enter your scores separated by a space: "
# add all scores for the user to the list
d[name].extend(map(int,scores.split()))
显示平均值、总计和最大值很简单:
# from statistics import mean will work for python 3.4
for k,v in d.items():
print("Scores total for {} is {}".format(k,sum(v)))
print("Scores average for {} is {}".format(k,sum(v)/len(v))) # mean(v) for python 3,4
print("Highest score for {} is {}".format(k, max(v)))
打印按最高用户总分排序:
print("The top scoring students from highest to lowest are:")
for k,v in sorted(d.items(),key=lambda x:sum(x[1]),reverse=True):
print("{} : {}".format(k,sum(v)))
现在你有一个字典,其中学生姓名是键,每个学生的分数都存储在一个列表中。
你真的应该添加一个 try/except 接受用户输入并验证它的格式是否正确。