2012-04-17 106 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