【问题标题】:hackerrank day 8 python黑客排名第 8 天 python
【发布时间】:2017-06-12 09:14:23
【问题描述】:

剧透这个问题是关于 Hackerrank Day 8 挑战的,如果你想先自己尝试一下。

这是他们提出的问题:

给定 n 个姓名和电话号码,组装一个电话簿来映射 朋友的名字到他们各自的电话号码。然后你会 给定未知数量的姓名来查询您的电话簿。为了 每个 name 查询,从您的电话簿打印相关条目 以 name=phoneNumber 形式在新行上;如果一个条目不是 找到,打印 Not found 代替。

注意:您的电话簿应该是 Dictionary/Map/HashMap 数据 结构。

第一行包含一个整数,n,表示 电话簿中的条目。 n 行中的每一行都描述了 单行上以 2 个空格分隔的值形式的条目。这 第一个值是朋友的名字,第二个值是 8 位数字 电话号码。

在电话簿条目的 n 行之后,有一个未知号码 查询行数。每行(查询)包含要查找的 name 一个, 你必须继续阅读行,直到没有更多的输入。

注意:名称由小写英文字母组成,并且是 仅限名字。

然后他们进一步提供输入:

3
sam 99912222
tom 11122222
harry 12299933
sam
edward
harry

期望输出:

sam=99912222
Not found
harry=12299933

我无法查询未知数量的名称。我尝试使用 try/except 块在 EOFError 处停止,但我一直在他们的测试用例 1、2 和 3 上超时。它适用于其他两个测试用例,但不适用于那些,我认为这一定是因为我被卡住了在一种无限循环中使用我的 while True 语句?这是我写的:

phonebook = {}
entries = int(raw_input())

for n in range(entries):
    name, num = raw_input().strip().split(' ')
    name, num = [str(name), int(num)]
    phonebook[name] = num

while True:
    try:  
        search = str(raw_input())

        if search in phonebook.keys():
            output = ''.join('%s=%r' % (search, phonebook[search]))
            print output
        else:
            print "Not found"
    except EOFError:
        break

我对 python 还是很陌生,所以也许我没有正确使用 try/except 或 break 方法?如果有人能告诉我哪里出了问题或者我可以做些什么来改进我的代码,我将不胜感激?

【问题讨论】:

  • 只是出于兴趣:你能链接到挑战吗?我真的很想自己解决这个问题。 :)
  • @MSeifert Hackerrank Day 8 如果你能解决它,你介意告诉我怎么解决吗?

标签: python-2.7 infinite-loop


【解决方案1】:

你正在做的唯一错误是你正在使用

phonebook.keys()

您可以在不使用 .keys() 的情况下循环。这将节省时间。

phonebook = {}
entries = int(raw_input())

for n in range(entries):
    name, num = raw_input().strip().split(' ')
    name, num = [str(name), int(num)]
    phonebook[name] = num

while True:
    try:  
        search = str(raw_input())

        if search in phonebook:
            output = ''.join('%s=%r' % (search, phonebook[search]))
            print output
        else:
            print "Not found"
    except EOFError:
        break

以上代码适用于所有测试用例。

【讨论】:

    【解决方案2】:

    在 python-3 中

    # n, Enter number of record you need to insert in dict
    n = int(input())
    d = dict()
    
    # enter name and number by separate space
    for i in range(0, n):
        name, number = input().split()
        d[name] = number
    # print(d)      #print dict, if needed
    
    # enter name in order to get phone number
    for i in range(0, n):
        try:
            name = input()
            if name in d:
                print(f"{name}={d[name]}")
            else:
                print("Not found")
        except:
            break
    

    输入:

    3
    sam 99912222
    tom 11122222
    harry 12299933
    sam
    edward
    harry
    

    输出:

    sam=99912222
    Not found
    harry=12299933
    

    【讨论】:

    • 嘿,你能简单解释一下它为什么起作用吗?
    • 1.第一个 for 循环将在字典 d.2 中插入数据。 n,是您需要在字典中插入的记录数。 3. 第二个 for 循环将搜索您想要的记录,例如。山姆、哈利等
    【解决方案3】:
    n = int(input())
    d = dict()
    
    for i in range(0, n):
    name, number = input().split()
    d[name] = number
    #print(d) Check if your dictionary  is ready
    
    for i in range(0, n):
        name = input()
        if name in d:
            print(f'{name}={d[name]}')
        else:
            print("Not found")
    

    试试这个,它会工作的。

    【讨论】:

      【解决方案4】:

      运行此代码以通过所有测试用例:

      n = int(input())
      d = {}
      for i in range(n):
          tp = input()
          a, b = tp.split()
          d.update({a: b})
      inputs = []
      input1 = input().strip()
      try:
          while len(input1) > 0:
              inputs.append(input1)
              input1 = input().strip()
      except:
          pass
      for i in inputs:
          if i in d.keys():
              c = 1
              print(i + "=" + d[i])
          else:
              print('Not found')
      

      【讨论】:

      • 您至少可以对您的解决方案提供一些解释,以形成有用的答案。
      【解决方案5】:

      让生活更轻松

      黑客排名 30 天代码 - 第 8 天 (@Murtuza Chawala)

      n = int(input())
      i = 0
      book = dict() #Declare a dictionary
      while(i < n):
          name , number = input().split() #Split input for name,number
          book[name] = number #Append key,value pair in dictionary
          i+=1
      while True: #Run infinitely 
          try:
              #Trick - If there is no more input stop the program
              query = input() 
          except:
              break
          val = book.get(query, 0) #Returns 0 is name not in dictionary
          if val != 0:
              print(query + "=" + book[query])
          else:
              print("Not found")
      

      【讨论】:

        【解决方案6】:
        n = int(input())
        PhoneBook = dict(input().split() for x in range(n))
        try:
            for x in range(n):
                key = input()
                if key in PhoneBook: 
                    print (key,'=',PhoneBook[key],sep='') 
                else: 
                    print('Not found')
        except:
                exit()
        

        【讨论】:

        • 虽然这段代码可能会解决问题,但一个好的答案还应该解释代码的什么以及它如何提供帮助。
        【解决方案7】:
        n= int(input())
        dct={}
        for i in range(n):
            info=input().split()
            dct[info[0]]=info[1]
        
        while 1:
            try:
                query=input().lower()
                if query in dct:
                    print(query+'='+dct[query])
                else:
                    print('Not found')
            except EOFError:
                break
        

        【讨论】:

          【解决方案8】:

          下面的 sn-p 对我有用。

          noOfTestCases = int(input())
          phoneDict = {}
          
          for i in range(noOfTestCases):
              name, phoneNumber = input().split()
              phoneDict[name] = phoneNumber
          
          for i in range(noOfTestCases):
              try:
                  name = input()
                  if name in phoneDict:
                       print(name+'='+phoneDict[name])
                  else:
                      print("Not found")
              except:
                  break
                      
          

          输入

          3
          sam 99912222
          tom 11122222
          harry 12299933
          sam
          edward
          harry
          

          输出

          sam=99912222
          Not found
          harry=12299933
          

          【讨论】:

            【解决方案9】:
            # Enter your code here. Read input from STDIN. Print output to STDOUT
            entries = int( input() )
            
            # print(entries)
            data = {}
            for i in range(entries):
                # print("i=",i)
                name, num = input().strip().split(" ")
                # print(name)
                # print(num)
                data[name]=num
            # print(data)
            while True:
                try:
                    search = input()
                    if search in data.keys():
                        print(search,"=",data[search], sep="")
                    else:
                        print("Not found")
                except EOFError:
                    break
             
            Input (stdin)
            3
            sam 99912222
            tom 11122222
            harry 12299933
            sam
            edward
            harry
            
            Your Output (stdout)
            sam=99912222
            Not found
            harry=12299933
            
            Expected Output
            sam=99912222
            Not found
            harry=12299933
            

            【讨论】:

              【解决方案10】:
              n=int(input())
              d=dict()
              for i in range(n):
                  name,number = input().split()
                  d.update({name:number})
              for i in range(n):
                  name=input()
                  if name in d:print(name +"="+d[name])
                  else:
                      print("Not found")
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2023-02-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-02-21
                相关资源
                最近更新 更多