对于此代码,我需要一种方法让用户能够选择如何排列代码的方式,因此如果用户输入“A”,那么代码将按字母顺序排列名称。大部分代码都非常简单,我就是找不到让代码按字母顺序创建随机名称的方法。我知道我问了很多,但如果有人能提供帮助,那就太好了。 (顺便说一下,它是 python 中的一个表,没有自定义的东西,只是纯 python)
from random import randint
import random
import math
print ('''
-----------------------
Class 5A
-----------------------
------------------------------------''')
for i in range(10): #Class 5A
name = ['John', 'David', 'Bob', 'Luke', 'James', 'Kyle', 'Sam', 'Adam', 'Rick', 'Charlie', 'Alan', 'George', 'Alex', 'Jimmy', 'Batman', 'Oliver', 'Rebeca', 'Emily', 'Amy', 'Nat', 'Ellie', 'Maddie', 'Clidna', 'Tor', 'Hannah', 'Lucy', 'Olivia', 'Sam', 'Lynn',]
surname = [' Dyde', ' Davis', ' Pennington', ' Kelly', ' Hadfield', ' Millward', ' Bennet', ' Goldrick', ' Webb', ' West', ' Cotton', ' Pie', ' Rasberry', ' Fujitsu', ' Neil', ' Gothem',]
score1 = randint(1, 10)
score2 = randint(1, 10)
score3 = randint(1, 10)
average1 = (score1 + score2 + score3)/3
score1 = str(score1)
score2 = str(score2)
score3 = str(score3)
average1 = round(average1)
average1 = str(average1)
print (('Name: ')+(random.choice(name))+(random.choice(surname)))
print (('Class: 5A'))
print (('Score1: ')+(score1))
print (('Score2: ')+(score2))
print (('Score3: ')+(score3))
print (('Average Score: ')+(average1))
print ('------------------------------------')
print ('''
-----------------------
Class 5B
-----------------------
------------------------------------''')
for i in range(10): #Class 5B
name = ['John', 'David', 'Bob', 'Luke', 'James', 'Kyle', 'Sam', 'Adam', 'Rick', 'Charlie', 'Alan', 'George', 'Alex', 'Jimmy', 'Batman', 'Oliver', 'Rebeca', 'Emily', 'Amy', 'Nat', 'Ellie', 'Maddie', 'Clidna', 'Tor', 'Hannah', 'Lucy', 'Olivia', 'Sam', 'Lynn',]
surname = [' Dyde', ' Davis', ' Pennington', ' Kelly', ' Hadfield', ' Millward', ' Bennet', ' Goldrick', ' Webb', ' West', ' Cotton', ' Pie', ' Rasberry', ' Fujitsu', ' Neil', ' Gothem',]
score1 = randint(1, 10)
score2 = randint(1, 10)
score3 = randint(1, 10)
average1 = (score1 + score2 + score3)/3
score1 = str(score1)
score2 = str(score2)
score3 = str(score3)
average1 = round(average1)
average1 = str(average1)
print (('Name: ')+(random.choice(name))+(random.choice(surname)))
print (('Class: 5B'))
print (('Score1: ')+(score1))
print (('Score2: ')+(score2))
print (('Score3: ')+(score3))
print (('Average Score: ')+(average1))
print ('------------------------------------')
print('''
-----------------------
Class 5C
-----------------------
------------------------------------''')
for i in range(10): #Class 5C
name = ['John', 'David', 'Bob', 'Luke', 'James', 'Kyle', 'Sam', 'Adam', 'Rick', 'Charlie', 'Alan', 'George', 'Alex', 'Jimmy', 'Batman', 'Oliver', 'Rebeca', 'Emily', 'Amy', 'Nat', 'Ellie', 'Maddie', 'Clidna', 'Tor', 'Hannah', 'Lucy', 'Olivia', 'Sam', 'Lynn',]
surname = [' Dyde', ' Davis', ' Pennington', ' Kelly', ' Hadfield', ' Millward', ' Bennet', ' Goldrick', ' Webb', ' West', ' Cotton', ' Pie', ' Rasberry', ' Fujitsu', ' Neil', ' Gothem',]
score1 = randint(1, 10)
score2 = randint(1, 10)
score3 = randint(1, 10)
average1 = (score1 + score2 + score3)/3
score1 = str(score1)
score2 = str(score2)
score3 = str(score3)
average1 = round(average1)
average1 = str(average1)
print (('Name: ')+(random.choice(name))+(random.choice(surname)))
print (('Class: 5C'))
print (('Score1: ')+(score1))
print (('Score2: ')+(score2))
print (('Score3: ')+(score3))
print (('Average Score: ')+(average1))
print ('------------------------------------')
不要按字母顺序创建;创建它,然后对其进行排序。
更具体地说:将随机生成的名称放入列表中,然后使用
sort
方法对该列表进行排序,或者(如@gefei 建议)使用 sorted
函数获取列表的排序副本。
您看过 .sort() 函数吗?如果您使用它,这将对列表进行排序,例如:
name.sort()
这会将名称排序为
['Adam', 'Alan', 'Alex', 'Amy', 'Batman', 'Bob', 'Charlie', 'Clidna', 'David', 'Ellie', 'Emily', 'George', 'Hannah', 'James', 'Jimmy', 'John', 'Kyle', 'Lucy', 'Luke', 'Lynn', 'Maddie', 'Nat', 'Oliver', 'Olivia', 'Rebeca', 'Rick', 'Sam', 'Sam', 'Tor']
这将对您的姓名进行排序,但是通过查看您的代码,您还想向程序的用户显示名称,不是吗?
如果是这种情况,我建议您按以下方式重组代码:
...
name = ['John', 'David', 'Bob', 'Luke', 'James', 'Kyle', 'Sam', 'Adam', 'Rick', 'Charlie', 'Alan', 'George', 'Alex', 'Jimmy', 'Batman', 'Oliver', 'Rebeca', 'Emily', 'Amy', 'Nat', 'Ellie', 'Maddie', 'Clidna', 'Tor', 'Hannah', 'Lucy', 'Olivia', 'Sam', 'Lynn',]
surname = [' Dyde', ' Davis', ' Pennington', ' Kelly', ' Hadfield', ' Millward', ' Bennet', ' Goldrick', ' Webb', ' West', ' Cotton', ' Pie', ' Rasberry', ' Fujitsu', ' Neil', ' Gothem',]
names = []
for i in range(10):
names.append(random.choice(name)+random.choice(surname))
names.sort()
print names
不完全确定这是否完美,只需复制粘贴大部分代码,但我希望您能理解它的要点。
这要实现的是创建所有名称的列表,然后对它们进行排序,请记住,这不会保存程序不同运行之间生成的名称(我认为这是没有必要的)。
我建议这样做的原因是,无论您如何组织您拥有的候选人名单,您在这一行中都会从该列表中随机选择姓名:
print (('Name: ')+(random.choice(name))+(random.choice(surname)))
这就是为什么我选择先创建一个包含 10 个名字的随机列表,然后对其进行排序。
使斯科特的想法更加具体:
>>> name = ['John', 'David', 'Bob', 'Luke', 'James', 'Kyle', 'Sam', 'Adam', 'Rick', 'Charlie', 'Alan', 'George', 'Alex', 'Jimmy', 'Batman', 'Oliver', 'Rebeca', 'Emily', 'Amy', 'Nat', 'Ellie', 'Maddie', 'Clidna', 'Tor', 'Hannah', 'Lucy', 'Olivia', 'Sam', 'Lynn',]
>>> sorted(name)
['Adam', 'Alan', 'Alex', 'Amy', 'Batman', 'Bob', 'Charlie', 'Clidna', 'David', 'Ellie', 'Emily', 'George', 'Hannah', 'James', 'Jimmy', 'John', 'Kyle', 'Lucy', 'Luke', 'Lynn', 'Maddie', 'Nat', 'Oliver', 'Olivia', 'Rebeca', 'Rick', 'Sam', 'Sam', 'Tor']
>>>
假设您想累积按名称排序的all类的结果,生成数据并将其存储在列表中。然后排序并打印列表:
results = []
for i in range(10): #Class 5A
name = ['John', 'David', 'Bob', 'Luke', 'James', 'Kyle', 'Sam', 'Adam', 'Rick', 'Charlie', 'Alan', 'George', 'Alex', 'Jimmy', 'Batman', 'Oliver', 'Rebeca', 'Emily', 'Amy', 'Nat', 'Ellie', 'Maddie', 'Clidna', 'Tor', 'Hannah', 'Lucy', 'Olivia', 'Sam', 'Lynn',]
surname = [' Dyde', ' Davis', ' Pennington', ' Kelly', ' Hadfield', ' Millward', ' Bennet', ' Goldrick', ' Webb', ' West', ' Cotton', ' Pie', ' Rasberry', ' Fujitsu', ' Neil', ' Gothem',]
scores = [randint(1, 10) for _ in range(3)]
average = round(sum(scores) / 3.0)
results.append((random.choice(name), random.choice(surname), '5A', scores, average))
其他课程也是如此。现在排序并打印。请注意,排序将主要基于列表中元组的第一项,在本例中为名字。您可以通过排序函数更改键(请参阅
key
参数),或者您可以将姓氏添加到名字之前的元组中。
results.sort()
for r in results:
print('Name: {} {}'.format(r[0], r[1]))
print('Class: {}'.format(r[2]))
for i, score in enumerate(r[3], 1):
print('Score{}: {}'.format(i, score))
print('Average Score: {}'.format(r[4]))
print('------------------------------------')
如果您想要每个班级的单独排序结果,只需在每堂课之前将
results
列表重置为空列表,并在每堂课结束时打印结果。
进一步说明斯科特所说的。创建列表,然后迭代它。
循环外:
names_list = [random.choice(surname) + ", " + (random.choice(name)) for x in range(1,10)]
print sorted(names_list)
然后我们有
而不是
print (('Name: ')+(random.choice(name))+(random.choice(surname)))
print 'Name: ' + sorted(names_list)[i]
要按键对字典进行排序,请使用
sorted(dict_pra_ordenar.items())