2017-03-18 67 views
1

我想構建一個程序,如果用戶輸入一個名稱,它將返回具有該名稱的人數。如果他們輸入'most',它會返回最常用的名稱。我以某種方式獲得了計數單個詞的部分,但我不知道如何使程序定義和計算出現頻率最高的單詞。計算列表中最頻繁的單詞

import re 
from collections import Counter 

data = ('Billy Bob', 'Misty', 'Leroy', 'Leroy', 'Leroy', 'Billy Bob', 'Betty Sue', 
     'Billy Bob', 'Betty Sue', 'Misty', 'Betty Sue', 'Betty Sue', 
     'Misty', 'Betty Sue', 'Horace', 'Misty', 'Betty Sue', 'Misty', 
     'Leroy', 'Betty Sue', 'Misty', 'Doug', 'Misty', 'Wilma', 'Jesse', 
     'Misty', 'Billy Bob', 'Betty Sue', 'Betty Sue', 'Leroy', 'Misty', 
     'Leroy', 'Jesse Jr', 'Betty Sue', 'Betty Sue', 'Misty', 'Misty', 
     'Misty', 'Betty Sue', 'Misty', 'Misty', 'Misty', 'Leroy', 'Leroy', 
     'Bailey', 'Peggy', 'Leroy', 'Billy Bob', 'Leroy', 'Leroy', 'Misty', 
     'Paris', 'Leroy', 'Leroy', 'Misty Mae', 'Leroy', 'Misty', 'Leroy', 
     'Bart', 'Big Daddy', 'Betty Sue', 'Billy Bob', 'Betty Sue', 
     'LeeAnne', 'Billy Bob', 'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 
     'Misty', 'Rowdy', 'Billy Bob', 'Ricky', 'Misty', 'Billy Bob', 'Billy 
     Bob', 'Billy Bob', 'EvaSue', 'Mark', 'Betty Sue', 'Leroy', 'Betty 
     Sue', 'Billy Bob', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 
     'Billy Bob', 'Billy Bob', 'Billy Bob', 'Misty', 'Rob', 'Betty Sue', 
     'SuelySue', 'Billy Bob', 'Misty', 'Betty Sue', 'Misty', 'Billy Bob', 
     'Betty Sue', 'Leroy', 'Misty', 'Billy Bob', 'Misty', 'Misty', 'Billy 
     Bob', 'Billy Bob', 'Billy Bob', 'Billy Bob', 'Leroy', 'Jesse Jr Jr', 
     'Billy Bob', 'Grady', 'Leroy', 'Billy Bob', 'Leroy', 'Billy Bob', 
     'Betty Sue', 'Billy Bob', 'Misty', 'Louise', 'Leroy', 'Betty Sue', 
     'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 'Betty Sue', 'Billy 
     Bob', 'Leroy', 'Jenny Jae', 'Misty', 'Betty Sue', 'Billy Bob', 
     'Leroy', 'Billy Bob', 'Jesse', 'Misty', 'Misty', 'Leroy', 'Betty 
     Sue', 'BJ', 'Misty', 'Leroy', 'Boris', 'Misty', 'Billy Bob', 'Pegs', 
     'Misty', 'Leslie', 'James', 'Melvin', 'Misty', 'Betty Sue', 'Mary 
     Beth', 'Billy Bob', 'Betty Sue', 'Billy Bob', 'Misty', 'Betty Sue', 
     'Leroy', 'Billy Bob', 'Billy Bob', 'BethAnne', 'Leroy', 'Betty Sue', 
     'Bett', 'Billy Bob', 'Misty', 'Misty', 'Billy Bob', 'Leroy', 'Billy 
     Bob', 'Billy Bob', 'Misty', 'Billy Bob', 'Raina', 'Betty Sue', 
     'Misty', 'Misty', 'Misty', 'Betty Sue', 'Mikey', 'Betty Sue', 'Billy 
     Bob', 'Misty', 'Betty Sue', 'Leroy', 'Betty Sue', 'Billy Bob', 
     'Betty Sue', 'Billy Bob', 'Betty Sue', 'Louise Jr', 'Billy Bob', 
     'Misty', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 'Misty', 
     'Leroy', 'Leroy', 'Leroy', 'Billy Bob', 'Betty Sue', 'Billy Bob', 
     'Betty Sue', 'Misty', 'Betty Sue', 'Betty Sue', 'Misty', 'Betty 
     Sue', 'Horace', 'Misty', 'Betty Sue', 'Misty', 'Leroy', 'Betty Sue', 
     'Misty', 'Doug', 'Misty', 'Wilma', 'Jesse', 'Misty', 'Billy Bob', 
     'Betty Sue', 'Betty Sue', 'Leroy', 'Misty', 'Leroy', 'Jesse Jr', 
     'Betty Sue', 'Betty Sue', 'Misty', 'Misty', 'Misty', 'Betty Sue', 
     'Misty', 'Misty', 'Misty', 'Leroy', 'Leroy', 'Bailey', 'Peggy', 
     'Leroy', 'Billy Bob', 'Leroy', 'Leroy', 'Misty', 'Paris', 'Leroy', 
     'Leroy', 'Misty Mae', 'Leroy', 'Misty', 'Leroy', 'Bart', 'Big 
     Daddy', 'Betty Sue', 'Billy Bob', 'Betty Sue', 'LeeAnne', 'Billy 
     Bob', 'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 'Misty', 'Rowdy', 
     'Billy Bob', 'Ricky', 'Misty', 'Billy Bob', 'Billy Bob', 'Billy 
     Bob', 'EvaSue', 'Mark', 'Betty Sue', 'Leroy', 'Betty Sue', 'Billy 
     Bob', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 'Billy Bob', 
     'Billy Bob', 'Billy Bob', 'Misty', 'Rob', 'Betty Sue', 'SuelySue', 
     'Billy Bob', 'Misty', 'Betty Sue', 'Misty', 'Billy Bob', 'Betty 
     Sue', 'Leroy', 'Misty', 'Billy Bob', 'Misty', 'Misty', 'Billy Bob', 
     'Billy Bob', 'Billy Bob', 'Billy Bob', 'Leroy', 'Jesse Jr Jr', 
     'Billy Bob', 'Grady', 'Leroy', 'Billy Bob', 'Leroy', 'Billy Bob', 
     'Betty Sue', 'Billy Bob', 'Misty', 'Louise', 'Leroy', 'Betty Sue', 
     'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 'Betty Sue', 'Billy 
     Bob', 'Leroy', 'Jenny Jae', 'Misty', 'Betty Sue', 'Billy Bob', 
     'Leroy', 'Billy Bob', 'Jesse', 'Misty', 'Misty', 'Leroy', 'Betty 
     Sue', 'BJ', 'Misty', 'Leroy', 'Boris', 'Misty', 'Billy Bob', 'Pegs', 
     'Misty', 'Leslie', 'James', 'Melvin', 'Misty', 'Betty Sue', 'Mary 
     Beth', 'Billy Bob', 'Betty Sue', 'Billy Bob', 'Misty', 'Betty Sue', 
     'Leroy', 'Billy Bob', 'Billy Bob', 'BethAnne', 'Leroy', 'Betty Sue', 
     'Bett', 'Billy Bob', 'Misty', 'Misty', 'Billy Bob', 'Leroy', 'Billy 
     Bob', 'Billy Bob', 'Misty', 'Billy Bob', 'Raina', 'Betty Sue', 
     'Misty', 'Misty', 'Misty', 'Betty Sue', 'Mikey', 'Betty Sue', 'Billy 
     Bob', 'Misty', 'Betty Sue', 'Leroy', 'Betty Sue', 'Billy Bob', 
     'Betty Sue', 'Billy Bob', 'Betty Sue', 'Louise Jr', 'Billy Bob', 
     'Misty', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 'Betty Sue') 

print('''Welcome to the White Valley Name Counter. Enter a name, or "most" to see what name is the most used in this great city!''') 

print() 
keepgoing = 'y' 

while keepgoing == 'y': 
    count = 0 
    search = input("What name do you want to search for in White Valley database? ") 
    print() 
    data_list = list(data) 
    if search != "most": 
     print("There are {} people named {}".format(data_list.count(search),search)) 
     print() 
    elif search == "most": 
     print("{} is the most common. There are {} of them".format(
       data_list.count.most_common(data_list), search)) 
    keepgoing = input('''Want to search another name ("y" for yes)? ''') 
    print() 

我試圖使輸出看起來就像這樣:

Welcome to the White Valley Name Counter. Enter a name, or "most" to see what name is the most used in this great city! 

What name do you want to search for in White Valley database? john 

There are 0 people named john 

Want to search another name ("y" for yes)? y 

What name do you want to search for in White Valley database? Betty Sue 

There are 79 people named Betty Sue 

Want to search another name ("y" for yes)? y 

What name do you want to search for in White Valley database? most 

Billy Bob is most common. There are 93 of them 

Want to search another name ("y" for yes)? n 
+0

用戶應該如何搜索名爲「most」的人? –

回答

0

您可以使用此計數器:

import collections 

data = ('Billy Bob', 'Misty', …) 
counts = collections.Counter(data) 

# add an additional 'Misty' 
counts.update(['Misty']) 

# most seen name 
if counts: 
    name, count = counts.most_common(1)[0] 
    print("most common name is {} with a count of {}".format(name, count)) 
else: 
    print("no names available") 

name = "Billy Bob" 
count = counts.get(name) 
if count is not None: 
    print("There are {} people named {}".format(count, name)) 
else: 
    print("There is no {}".format(name)) 
0

好算一個名字出現的次數這是用戶指定的非常簡單!

讓我們編寫一個小函數來處理它並返回結果。

names = ("billy","bob","pete","bob",'pete','bob'); 


def count_my_name(name): 
    return ("The name %s occurs %s times." % (name,str(names.count(name)))); 

如果我們打印這個結果與名稱皮特我們會得到以下結果:

The name pete occurs 2 times.

現在列表中的計數中最常見的名字,我們可以寫另一個整潔的小功能處理這個問題並將結果返還給我們。

names = ("billy","bob","pete","bob",'pete','bob'); 
def get_most_common_name(): 
    all_names = set(names); 
    most_common = max([names.count(i) for i in all_names]); 
    for name in all_names: 
     if names.count(name) == most_common: 
      return ("The most common name is %s occuring a total of %s times." % (name,str(most_common))); 

這將給我們的結果:The most common name is bob occuring a total of 3 times.

好了,所以現在我們的第二個函數一些解釋,什麼是我們真正在這裏做什麼?

嗯,首先我們抓住我們的元組命名,它有名字,但其中一些是重複的,我們不想迭代相同的名字多次。 因此,創建一個名爲all_names的新變量並從該列表中創建一個列表。

集有用,因爲它們會刪除我們的任何重複。

現在我們可以使用計數的名字一個名字出現的次數:

most_common = max([names.count(i) for i in all_names]);

這給了我們,我們發生元組裏面最名稱的數量。 這將是3.

現在我們只是遍歷我們的集合all_names並計算該名稱出現在名稱中的次數。

如果名稱的出現次數與我們的most_common變量名稱的次數相同,我們會得到最多的名稱。

希望這會有所幫助!