[Python]按字母顺序排列名称

问题描述 投票:0回答:6

对于此代码,我需要一种方法让用户能够选择如何排列代码的方式,因此如果用户输入“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 ('------------------------------------') 
python
6个回答
1
投票

不要按字母顺序创建;创建它,然后对其进行排序。

更具体地说:将随机生成的名称放入列表中,然后使用

sort
方法对该列表进行排序,或者(如@gefei 建议)使用
sorted
函数获取列表的排序副本。


1
投票

您看过 .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 个名字的随机列表,然后对其进行排序。


0
投票

使斯科特的想法更加具体:

>>> 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']
>>> 

0
投票

假设您想累积按名称排序的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
列表重置为空列表,并在每堂课结束时打印结果。


0
投票

进一步说明斯科特所说的。创建列表,然后迭代它。

循环外:

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]

0
投票

要按键对字典进行排序,请使用

sorted(dict_pra_ordenar.items())
© www.soinside.com 2019 - 2024. All rights reserved.