2016-03-30 11 views
0

JanからJAFebからFEに日付を取得しようとしています。これを行うための辞書が用意されていますが、コードは無作為にしか動作しません(例:4回ごと、時々24回ごとなど)。私はPythonの初心者です。私はこれを理解できません。下のコードの出力はほとんどの場合16Jun28ですが、時には正しく16JN28となります。3文字の月コードを2文字の月コードのPythonに変換する必要があります

import datetime 
month_code = {'Jan': 'JA', 
     'Feb': 'FE', 
     'Mar': 'MR', 
     'Apr': 'AL', 
     'May': 'MA', 
     'Jun': 'JN', 
     'Jul': 'JL', 
     'Aug': 'AU', 
     'Sep': 'SE', 
     'Oct': 'OC', 
     'Nov': 'NO', 
     'Dec': 'DE'} 

today = datetime.datetime.now() 
DD = datetime.timedelta(days=90)  
use_by = today + DD 
use_by_str = use_by.strftime("%y-%b-%d") 

def label_function(): 
    month = use_by.strftime("%b") 
    year = use_by.strftime("%y") 
    day = use_by.strftime("%d") 
    return year + month + day 

line = label_function() 

for k, v in month_code.items(): 
    Result = line.replace(k, v) 
print(Result) 

答えて

2

あなたは2文字に自分の3文字の月名を置き換えるために、あなたの辞書を反復処理されていますが、常に別の変数に結果を配置し、line自体を変異していません。

あなたがlabel_functionあなたの日付文字列のタプルを返す必要があり、その後、あなただけの代わりに、1つの値を持つ1のルックアップを変更する必要はない理由はさておきとして

for k, v in month_code.items(): 
    line = line.replace(k, v) 

、どうなるかあなたが探しているはずです。

def label_function(): 
    month = use_by.strftime('%b') 
    year = use_by.strftime('%y') 
    day = use_by.strftime('%d') 
    return year, month, day 

year, month, day = label_function() 
result = year + month_code[month] + day 
+0

両方のソリューションが完全に機能しました。脇の下の答えは私が一緒に行くものです!物事の壮大な計画では、私は12反復がそれほど大きな取引だとは考えていませんでした...私は助けに感謝します! –

+0

これは私がフォーラムから捨てられるかもしれませんが、VBScriptへの変換方法に関するアイデアはありますか? –

+0

それはあなたがフォーラムから投げ出されることはありません;)その答えを見てみることができますhttp://stackoverflow.com/questions/9003923/vbscript-how-can-i-format-dateどこから始めましょうか。 –

0

クリスチャンは、必要なものを実装するための優れた方法をすでに示しています。私はそのバグについて説明しようとします。

あなたのコードの論理エラーと辞書のランダムな順序付けが組み合わさってランダムに動作します。

2つの変数、lineResultがあります。 lineが '16Feb28'であるとします。あなたのコード

  • lineをとり、JAと月を交換しようとし、Resultに結果(変更なし)を置きます。
  • 次に、line、FebとFEを置き換えようとし、結果(16FE28)をResultに入れます。
  • 次に、line(16Feb28)をとり、MRをMRに置き換えて、結果(16Feb28)をResultに入れようとします。
  • など。あなたは今問題を見ることができますか?
  • 最後にline(16Feb28)をとり、DECとDEを置き換えようとし、結果(16Feb28)をResultに入れます。

それ時々作品は実際に辞書を使用すると、ソースコードでそれらを記述するために反復が、ランダム一つにされていないということであることを理由、その時々一致するエントリFeb-> FE最終的に起こる。

なぜ注文はランダムですか? Why is the order in dictionaries and sets arbitrary?

+0

詳細をお寄せいただきありがとうございます。辞書の背後にある推論は無作為に注文されていますか?あなたが提供した説明は、そうでなければ完璧な意味を持ちます。 –

+0

私は説明にリンクする答えを編集しました。 –

関連する問題