2012-04-17 24 views
0

私はPythonには新しく、foursquareの非常に単純化されたバージョンを作成しようとしています。Pythonの辞書

私は、ユーザーがチェックインできるようにしたいと思います。以前のチェックインで日付と場所を検索することもできます。私が持っているコードは、チェックインで問題なく動作しているようですが、検索結果はユーザーに返されません。私はforループ内の私の言葉がオフであることを知っているが、私はどのように辞書を検索するかに関して混乱している。

ご協力いただきありがとうございます。

print("What would you like to do? \n1 Check-in \n" \ 
    "2 Search check-ins by date \n3 Search check-ins by location \n4 Exit") 

while True: 
    import datetime 
    current_date = str(datetime.datetime.now()) 
    check_in = {} 
    choice = input("\nYour choice: ") 

    if choice == '1': 
     location = input("\nPlease enter your current location: ") 
     check_in[current_date] = location 
     print("You have checked in at", location, current_date) 

    elif choice == '2': 
     date_search = input("Please enter a date (yyyy/mm/dd) ") 
     for date in check_in.keys(): 
      if date_search in check_in(date): 
       print(check_in[key]) 

    elif choice == '3': 
     location_search = input("Please enter a location: ") 
     for date in check_in.keys(): 
      if location_search in check_in(date): 
       print(date) 

    elif choice == '4': 
     break 
+0

このPython 2.xまたはPython 3.xはありますか? 'input()'は2つのバージョン間で異なることを行います。 – Makoto

+1

'check_in(date)のlocation_search:' to 'location_search == check_in(date):' – Alan

+0

ありがとうございました。これはPython3です。以前は指定しておかないと残念です。 – user1337582

答えて

1

いくつかの発言:

  1. ループを通るたびに、あなたはcheck_inをフラッシュしています。私たちが前にそこに入れたものは問題ではありませんが、私たちがそれに戻ったときにはそれは周りにはないでしょう。

  2. 選択肢2を単純な0​​ステートメントに減らすことができます。あなたはそれがどのように動作するかを調べることができますhere

  3. 使用しているキーは、あなたが思うように印刷されません。私は場所を入力した場合、「ホーム」と言う、キーは次のようになります。余分な情報の

    Please enter your current location: Home 
    You have checked in at Home 2012-04-16 19:44:26.235305 
    {'2012-04-16 19:44:26.235305': 'Home'} # Print statement added by me. 
    

お知らせすべての?うん、あなたが期待したものではありません。日付部分だけを取得したい場合は、datetimeモジュールをもっと見て、それを完璧にする方法や(デバッグ中のように)怠け者で、datetime.datetime.now().split()[0]を使用してください。この複雑なコードは、文字列をスペースで区切り、最初の要素を取得します('2012-04-16')。

私は最後にあなたに練習として残しますが、dictionary documentationをチェックするだけで十分です。

+0

こんにちは、ご協力いただきありがとうございます。私が時間を過ごしたかった理由は、人々が1日のうちに同じ場所で何度もチェックインできるようにするためです。私はそれを正しくフォーマットする方法を知らず、ミリ秒を取り除く方法を理解していませんでした。 – user1337582

+0

こんにちはペンギン。それはとてもうまくいった、ありがとう。私は.itititemsが何をしているのか調べました。私はpython3を使っているので、.itemsだけを使っていました。それはうまくいくようでした。 – user1337582

+0

@ user1337582:PenguinCoderの回答に返信する必要があります。 – Makoto

0

inputraw_inputに変更します。それ以外の場合はPython 2.7.2でこのコードはinputをコードとして評価し、実際の数値や文字列は評価しません。あなたが望むものではありません、私は想像します。

辞書で検索する最後の質問については、辞書で一致するかどうかは決して一致しません。 whileのEVERYループでcheck_in変数を再初期化します。現在の日付/時刻を、ユーザーの入力を受け入れる形式とは異なる形式で辞書に入力しています。

あなたの現在の場所を入力してください:ホーム

(、 'ホーム' 'あなたはにチェックインしている' '2012-04-16 20:43:08.891334')

あなたの選択: 2

お好み

2012年4月16日

(YYYY/MM/DD)日付を入力してください:

データと入力を正規化し、check_inをwhileループの外側に移動する必要があります。

print("What would you like to do? \n1 Check-in \n2 Search check-ins by date \n3 Search check-ins by location \n4 Exit") 


check_in = {} 

while(True): 
    import datetime 
    current_date = datetime.datetime.now().strftime("%Y/%m/%d") 
    choice = raw_input("\nYour choice: ") 

    if(choice == '1'): 
     location = raw_input("\nPlease enter your current location: ") 
     check_in[current_date] = location 
     print check_in 

    elif(choice == '2'): 
     date_search = raw_input("Please enter a date (yyyy/mm/dd) ") 
     for date,location in check_in.iteritems(): 
      if date_search == date: 
       print "%s - %s" % (date,location) 

    elif(choice == '3'): 
     location_search = raw_input("Please enter a location: ") 
     for date,location in check_in.iteritems(): 
      if location_search == location: 
       print "%s - %s" % (date,location) 
    elif(choice == '4'): 
     break 
+0

Python 3.xでは、 'input()'は問題ありません。 OPがPython 3.xでコードを書いている可能性もありますので、それほど大きな問題ではありません。 – Makoto

+0

こんにちはペンギン。それはとてもうまくいった、ありがとう。私は.itititemsが何をしているのか調べました。私はpython3を使っているので、.itemsだけを使っていました。それはうまくいくようでした。 – user1337582