2012-04-17 102 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()'在兩個版本之間做了不同的事情。 – Makoto 2012-04-17 01:28:51

+1

'如果check_in中的location_search(日期):''如果location_search == check_in(日期):' – Alan 2012-04-17 01:29:59

+0

謝謝你的全部幫助。這是python3,對不起,以前沒有指定。 – user1337582 2012-04-17 02:20:22

回答

1

一個幾句話:

  1. 通過每執行一次循環,你沖洗check_in。我們之前在那裏放置什麼並不重要,當我們回到它時,它不會在附近。

  2. 選擇2可簡化爲d.get(key)陳述。你可以看看它是如何工作的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

Hi Makoto,謝謝你的幫助。我想花時間的原因是,人們可以在一天內多次在同一地點辦理登機手續。我不知道如何正確格式化,並沒有弄清楚如何擺脫毫秒。 – user1337582 2012-04-17 02:26:19

+0

嗨企鵝。這工作得很好,謝謝。我查了一下.iteritems的功能,因爲我使用python3只使用.items。這似乎工作。 – user1337582 2012-04-17 02:42:25

+0

@ user1337582:如果你想讓他們看到它,你應該回復PenguinCoder的回答,而不是我的回答。 – Makoto 2012-04-17 02:44:19

0

將您的input s更改爲raw_input s,否則在Python 2.7.2中,此代碼將評估input作爲代碼,而不是實際的數字或字符串。我想像的不完全是你想要的。

至於你通過字典搜索的最後一個問題,你檢查字典中的匹配不會匹配。您可以在該EVERY循環中重新設置變量check_in。您還將以與您接受用戶輸入的格式不同的格式將當前日期/時間輸入字典。

請輸入您的當前位置:首頁

( '家' '你已經在檢查中', '2012-04-16 20:43:08.891334')

您的選擇: 2

請輸入日期(年/月/日)2012/04/16

您的選擇:

您需要規範化數據和輸入,並將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 2012-04-17 02:02:54

+0

嗨企鵝。這工作得很好,謝謝。我查了一下.iteritems的功能,因爲我使用python3只使用.items。這似乎工作。 – user1337582 2012-04-17 03:13:15