2014-11-25 175 views
1

對於此代碼,我需要一種方法讓用戶能夠選擇如何安排代碼的方法,因此如果用戶輸入'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 ('------------------------------------') 

回答

1

不要按字母順序創建它;創建它,然後對其進行分類。

更具體地說:將您的隨機生成的名稱放入列表中,並使用sort方法對該列表進行排序,或者(如@gefei所示)使用sorted函數獲取列表的已排序副本。

+0

你會怎麼建議? – Dyde 2014-11-25 14:34:33

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

假設你想積累的結果按名稱排序的所有類,生成你的數據並將其存儲在列表中。然後整理並打印列表:

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

是的,我試過這個,但不是把這些文字整理出來,而是將其中的字母個別地打印出來,然後打印它們以得到名稱:['','C','P','a','d','e' ,'我','我','l','n']這實際上是代碼發佈的人民的名字。 – Dyde 2014-11-25 15:33:56

+0

啊,我明白了,嘗試使用names.append(random.choice(name))+ random.choice(surname)),而不是+ = – Robzor 2014-11-25 15:38:22

+0

是的,我試過了,我試過了,它出現了一個syntex錯誤如果我在(姓氏)的末尾使用了2個括號)。我用1個括號試了一下,結果出現了一個錯誤:names.append(random.choice(name))+ random.choice(surname)TypeError:用於+:'NoneType'和'str的unsporting操作數類型' – Dyde 2014-11-25 15:59:14