2017-03-26 93 views
0

所以我正在學習Python dataquest.io。我剛剛完成了初學者任務。其中一個挑戰的問題,我認爲我已經完成了(下面的代碼),是:Python - 根據兩個變量打印

編寫可以跨年提取相同的價值觀和 計算連續值之間的差異,顯示的功能,如果 出生人數正在增加或減少。例如,在1994年到2003年間,每週六的出生人數是如何變化的?

然而,我怎樣才能使打印結果告訴讀者什麼時間段是得到它。例如,當column == 1,值1表示1月。但是,當column == 2時,值1表示「月的第一個月」。那麼什麼樣的價值取決於哪一列。我怎樣才能把這個有意義的東西傳達給讀者,這是什麼叫我下次知道的。僅僅是寫一個長長的清單ifand陳述的問題?

謝謝!

我的代碼:

# year,month,date_of_month,day_of_week,births 
# 0  1  2    3   4 
def year_range(start_year, end_year): 
    # years must be bewtween 1994 and 2003 
    if end_year > 2003: 
     print ("End year too high") 
     return 
    if start_year < 1994: 
     print ("Start year too low") 
     return 
    # for each year from start to end 
    years = [] 
    for x in range(end_year - start_year + 1): 
     years.append(start_year + x) 
    return years 

def yearly_diffs(data, column, value, start_year, end_year): 
    # column = 0-3 
    # value depends on col, but 1-6 are always okay 
    if column == 0: 
     period = 'year' 
    if column == 1: 
     period = 'month' 
    if column == 2: 
     period = 'day of month' 
    if column ==3: 
     period = 'day of week' 
    years = year_range(start_year, end_year) 
    period_births = {} 
    for year in years: 
     period_births[year] = 0 
     for x in data: 
      births = x[4] 
      if x[0] == year and x[column] == value: 
       period_births[year] += births 
    changes = {} 
    for x in years: 
     if x != start_year: 
      changes[x] = period_births[x] - period_births[x-1] 

    print ('Here are the yearly values for births for:\n{} (period)\n{} (value in period)'.format(period, value)) 
    return period_births, changes 

回答

0

聽起來像是名單列表的工作。

period = [ 
      range(3000), 
      [None, 'January', 'February', ...], 
      [None, '1st of the month', '2nd of the month', ...], 
      [None, 'Sunday', 'Monday', ...] 
     ] 

print(period[column][value]) 

column變量選擇適當的內部列表,並且value變量索引它。否需要if。前面的None表示您的值從1開始而不是從0開始。range(3000)處理這些年份。