Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[Python]按字母顺序排列名称_Python - Fatal编程技术网

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

[Python]按字母顺序排列名称,python,Python,对于这段代码,我需要一种方法,让用户能够选择如何排列代码,因此,如果用户输入“a”,那么代码将按照字母顺序排列名称。这段代码的大部分都很简单,我只是找不到在按字母顺序排列时让代码创建随机名称的方法。我知道我问了很多,但如果有人能帮上忙,那就太好了。(顺便说一句,这是python中的一个表,没有自定义内容,只有纯python) 不要按字母顺序创建它;创建它,然后对它进行排序 更具体地说:将随机生成的姓名放入列表中,然后使用排序方法对该列表进行排序,或者(正如@gefei所建议的)使用排序功能获得列

对于这段代码,我需要一种方法,让用户能够选择如何排列代码,因此,如果用户输入“a”,那么代码将按照字母顺序排列名称。这段代码的大部分都很简单,我只是找不到在按字母顺序排列时让代码创建随机名称的方法。我知道我问了很多,但如果有人能帮上忙,那就太好了。(顺便说一句,这是python中的一个表,没有自定义内容,只有纯python)


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


更具体地说:将随机生成的姓名放入列表中,然后使用
排序
方法对该列表进行排序,或者(正如@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)))