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

时间:2014-11-25 14:24:47

标签: python

对于此代码,我需要一种方法让用户能够选择如何安排代码的方式,因此如果用户输入' 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 ('------------------------------------') 

5 个答案:

答案 0 :(得分:1)

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

更具体地说:将随机生成的名称放在列表中,并使用sort方法对该列表进行排序,或者(如@gefei建议的那样)使用sorted函数来获取排序列表副本。

答案 1 :(得分: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个名字的随机列表,然后对其进行排序。

答案 2 :(得分: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']
>>> 

答案 3 :(得分:0)

假设您希望累积按名称排序的所有类的结果,请生成数据并将其存储在列表中。然后排序并打印列表:

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))

同样适用于其他课程。现在排序和打印。请注意,排序主要基于列表中元组的第一项,在这种情况下是名字。您可以通过sort函数更改密钥(请参阅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列表重置为空列表,并在每个类的末尾打印结果。

答案 4 :(得分: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]