[Python]按字母顺序排列名称
对于这段代码,我需要一种方法,让用户能够选择如何排列代码,因此,如果用户输入“a”,那么代码将按照字母顺序排列名称。这段代码的大部分都很简单,我只是找不到在按字母顺序排列时让代码创建随机名称的方法。我知道我问了很多,但如果有人能帮上忙,那就太好了。(顺便说一句,这是python中的一个表,没有自定义内容,只有纯python)[Python]按字母顺序排列名称,python,Python,对于这段代码,我需要一种方法,让用户能够选择如何排列代码,因此,如果用户输入“a”,那么代码将按照字母顺序排列名称。这段代码的大部分都很简单,我只是找不到在按字母顺序排列时让代码创建随机名称的方法。我知道我问了很多,但如果有人能帮上忙,那就太好了。(顺便说一句,这是python中的一个表,没有自定义内容,只有纯python) 不要按字母顺序创建它;创建它,然后对它进行排序 更具体地说:将随机生成的姓名放入列表中,然后使用排序方法对该列表进行排序,或者(正如@gefei所建议的)使用排序功能获得列
不要按字母顺序创建它;创建它,然后对它进行排序
更具体地说:将随机生成的姓名放入列表中,然后使用
排序
方法对该列表进行排序,或者(正如@gefei所建议的)使用排序
功能获得列表的排序副本。使Scott的想法更具体:
>>> 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']
>>>
假设您希望为所有按名称排序的类累积结果,则生成数据并将其存储在列表中。然后对列表进行排序并打印:
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('------------------------------------')
如果您希望每个类都有单独的排序结果,只需在每个类之前将
结果
列表重置为空列表,并在每个类结束时打印结果。与Scott所说的更进一步。创建列表,然后对其进行迭代
圈外:
names_list = [random.choice(surname) + ", " + (random.choice(name)) for x in range(1,10)]
print sorted(names_list)
然后,我们没有打印(('Name:')+(random.choice(Name))+(random.choice(姓氏)),而是
print 'Name: ' + sorted(names_list)[i]
您看过.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个名字的随机列表,然后对其进行排序。你会怎么建议?是的,我尝试了这个方法,但没有将单词按顺序排列,而是将每个字母按顺序打印出来:[''C','p','a','d','e','I','l','n']这实际上就是人们名字的代码。啊,我明白了,试着用names.append(random.choice(name))+random.choice(姓氏))代替+=是的,我也试过了,我试过了,如果我在(姓氏)末尾用了两个括号,它会出现一个syntex错误。我用一个括号试了一下,结果出现了一个错误:names.append(random.choice(name))+random.choice(姓氏)TypeError:unsorting操作数类型for+:'NoneType'和'str'我已经用我的意思更新了我的示例,这次我运行了代码,而不是仅仅键入它。
print (('Name: ')+(random.choice(name))+(random.choice(surname)))