2017-03-26 9 views
0

に応じて印刷するので、dataquest.ioでPythonを学んでいます。私はちょうど初心者ミッションを完了しました。私は(以下コード)を達成したと思うチャレンジ質問の一つは、次のとおりです。Python - 2つの変数

は年間で同じ値を抽出し、 が出産の場合 数を表示するように連続した値の差を計算する関数を書きます増減している。たとえば、1994年から2003年にかけて、土曜日の出生数は毎年どのように変化しましたか? 印刷結果は、期間が何であるかを読者に伝えるように、私はそれを得ることができる方法

しかし

。たとえば、column == 1の場合、値1は1月を意味します。ただし、column == 2の場合、値1は「月の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は、値が0ではなく1から始まるという事実を考慮に入れています。range(3000)は年を扱います。

関連する問題