【问题标题】:Changing the int and string from a string从字符串更改 int 和 string
【发布时间】:2020-10-02 17:30:42
【问题描述】:

format_address 函数将地址字符串的一部分分离为新字符串:house_numberstreet_name,并返回:"house number X on street named Y"

输入字符串的格式为:数字门牌号,后跟街道名称,可以包含数字,但不能单独包含数字,可以是几个单词。例如,"123 Main Street""1001 1st Ave""55 North Center Drive"

填补空白以完成此功能。

def format_address(address_string):
  # Declare variables
  house_number=' '
  street_name=" "

  # Separate the address string into parts
  x=address_string.split(" ")
  # Traverse through the address parts
  for y in x:
    if(y.isdigit()):
      house_number=y
    else:
      street_name+=y
      street_name+=' '
    # Determine if the address part is the
    # house number or part of the street name
 # Does anything else need to be done 
  # before returning the result?
  
  # Return the formatted string  
    return "house number {} on street named {}".format(house_number,street_name)

print(format_address("123 Main Street"))
# Should print: "house number 123 on street named Main Street"

但它显示输出为:

house number 123 on street named  
house number 1001 on street named  
house number 55 on street named  

【问题讨论】:

  • @TomServo 我认为使用 {} 语法它只会从左到右填充它

标签: python string function formatting integer


【解决方案1】:

当您使用str.split() 时,您可以选择要将字符串拆分为多少段(只要不超过最大值)。在您的情况下,字符串应该只拆分一次,以将门牌号与街道名称分开。此外,您可以格式化字符串:

def format_address(address_string):
    num, st = address_string.split(' ',1)
    return f"house number {num} on street named {st}"

print(format_address("123 Main Street"))

输出:

house number 123 on street named Main Street

【讨论】:

  • 非常好的答案,不仅仅是直接修复明显的错误。
【解决方案2】:

在我看来,您的 return 语句发生在 for 循环内,这意味着您在第一项之后就退出了循环!但到那时你还没有确定街道名称。

只需将return ... 移回一个标签,它应该可以正常工作。

【讨论】:

  • 好地方!这是一个很好的例子,说明为什么让您的 cmets 与他们评论的代码保持一致是一种很好的做法;很难在视觉上跟随压痕的垂直线,因为 cmets 到处都是。
【解决方案3】:
def format_address(address_string):
  # Declare variables
  house_number = 0
  street_name = []
  # Separate the address string into parts
  address = address_string.split()
  # Traverse through the address parts
  for item in address:
    if item.isnumeric():
      house_number = item
    else:
      street_name.append(item)
    # Determine if the address part is the
    # house number or part of the street name

  # Does anything else need to be done 
  # before returning the result?
  
  # Return the formatted string  
  return "house number {} on street named {}".format(house_number, " ".join(street_name))

print(format_address("123 Main Street"))
# Should print: "house number 123 on street named Main Street"

print(format_address("1001 1st Ave"))
# Should print: "house number 1001 on street named 1st Ave"

print(format_address("55 North Center Drive"))
# Should print "house number 55 on street named North Center Drive"

【讨论】:

    【解决方案4】:
    def format_address(address_string):
      # Declare variables
      number = ''
      street = ''
      # Separate the address string into parts
      address_string = address_string.split()
      # Traverse through the address parts
      for add in address_string:
          # Determine if the address part is the
          # house number or part of the street name
          if add.isdigit():
              number += add 
          # Does anything else need to be done 
          # before returning the result?
          else :
              street += " " + add
          # Return the formatted string  
          return "house number {} on street named {}".format(number, street)
    
    print(format_address("123 Main Street"))
    # Should print: "house number 123 on street named Main Street"
    
    print(format_address("1001 1st Ave"))
    # Should print: "house number 1001 on street named 1st Ave"
    
    print(format_address("55 North Center Drive"))
    # Should print "house number 55 on street named North Center Drive"
    

    【讨论】:

      【解决方案5】:
      def format_address(address_string):
      # Declare variables
      house_number=''
      street_name=''
      # Separate the address string into parts
      address = address_string.split()
      # Traverse through the address parts
      for add in address:
          # Determine if the address part is the
          # house number or part of the street name
          if add.isnumeric():
              house_number = int(add)
          else:
              street_name += add + " "
              # Does anything else need to be done 
              # before returning the result?
          # Return the formatted string
      return "house number {} on street named {}".format(house_number,street_name.strip())
      

      【讨论】:

      • 你好 Ghyxen。欢迎来到堆栈溢出。虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 How to Answer。此外,这个问题有很多答案。您能否解释一下为什么我应该使用这个而不是现有答案之一。亲切的问候。
      【解决方案6】:

      那是因为你的返回不是在好的压痕中。它在第一个循环中被调用,因此您的 boucle for 只进行了一次迭代。

      def format_address(address_string):
        # Declare variables
        house_number=' '
        street_name=" "
      
        # Separate the address string into parts
        x=address_string.split(" ")
        # Traverse through the address parts
        for y in x:
          if(y.isdigit()):
            house_number=y
          else:
            street_name+=y
            street_name+=' '
          # Determine if the address part is the
          # house number or part of the street name
       # Does anything else need to be done 
        # before returning the result?
      
        # Return the formatted string  
        return "house number {} on street named {}".format(house_number,street_name)
      
      print(format_address("123 Main Street"))
      # Should print: "house number 123 on street named Main Street"```
      

      【讨论】:

        【解决方案7】:

        或者你可以这样做!

        def format_address(address_string):
          # Declare variables
          space = address_string.find(" ")
          house_number = address_string[:space]
          street_name = address_string[space:]
          return "house number {} on street named{}".format(house_number, street_name)
        
        print(format_address("123 Main Street"))
        # Should print: "house number 123 on street named Main Street"
        
        print(format_address("1001 1st Ave"))
        # Should print: "house number 1001 on street named 1st Ave"
        
        print(format_address("55 North Center Drive"))
        # Should print "house number 55 on street named North Center Drive"
        

        【讨论】:

          【解决方案8】:
          def format_address(address_string):
            house_number =''
            street_name =''
          
            # Declare variables
          
            # Separate the address string into parts
            spi = address_string.split()
            # Traverse through the address parts
            for ele in spi:
              if ele.isdigit():
                house_number = ele
              else:
                street_name += ele
                street_name += ' '
          `
          
          `# Return the formatted string`
            `return "house number {} on street named {}".format(house_number, street_name)`
          
          
          print(format_address("123 Main Street"))
          # Should print: "house number 123 on street named Main Street"
          
          print(format_address("1001 1st Ave"))
          # Should print: "house number 1001 on street named 1st Ave"
          
          print(format_address("55 North Center Drive"))
          # Should print "house number 55 on street named North Center Drive"`
          

          【讨论】:

            【解决方案9】:

            这对我有用

            def format_address(address_string):
                # Declare variables
                hn =""
                ha =""
              # Separate the address string into parts
                address_string = address_string.split()
              # Traverse through the address parts
                for add in address_string:
                    if add.isnumeric():
                        hn += add
                    else:
                        ha += add + " "
                # Determine if the address part is the
                # house number or part of the street name
              # Does anything else need to be done
              # before returning the result?
            
              # Return the formatted string
                return "house number {} on street named {}".format(hn,ha)
            
            print(format_address("123 Main Street"))
            # Should print: "house number 123 on street named Main Street"
            
            print(format_address("1001 1st Ave"))
            # Should print: "house number 1001 on street named 1st Ave"
            
            print(format_address("55 North Center Drive"))
            # Should print "house number 55 on street named North Center Drive"
            

            【讨论】:

              【解决方案10】:
              def format_address(address_string):
              # Declare variables
                house_number=[]
                street_name=[]
                addresses=[]
              # Separate the address string into parts
                addresses = address_string.split()
              # Traverse through the address parts
                for address in addresses:
              # Determine if the address part is the house number or part of the street name
                  
                  if address.isnumeric() == True:
                     house_number.append(address)
                  else:
                     street_name.append(address)
                
                house=" ".join(house_number)
                street=" ".join(street_name)
              # Return the formatted string  
                return "house number {} on street named {}".format(house,street)
              
              print(format_address("123 Main Street"))
              # Should print: "house number 123 on street named Main Street"
              
              print(format_address("1001 1st Ave"))
              # Should print: "house number 1001 on street named 1st Ave"
              
              print(format_address("55 North Center Drive"))
              # Should print "house number 55 on street named North Center Drive"
              

              【讨论】:

                【解决方案11】:
                def format_address(address_string):
                  words = address_string.split()
                  return "house number {} on street named {}".format(words[0],' '.join(words[1:]))
                

                【讨论】:

                  【解决方案12】:
                  def format_address(address_string):
                    # Declare variables
                    addres_list = []
                    name = " "
                    # Separate the address string into parts
                    addres_list = address_string.split(" ")
                    # Traverse through the address parts
                    number = addres_list[0]
                    name = name.join(addres_list[1:])
                    # Return the formatted string  
                    return "house number {} on street named {}".format(number,name)
                  

                  【讨论】:

                    【解决方案13】:
                    def format_address(address_string):
                    
                      address = address_string.split(" ",1)
                      house=address[0]
                      street=address[1]
                      return "house number {} on street named {}".format(house,street)
                    
                    print(format_address("123 Main Street"))
                    # Should print: "house number 123 on street named Main Street"
                    
                    print(format_address("1001 1st Ave"))
                    # Should print: "house number 1001 on street named 1st Ave"
                    
                    print(format_address("55 North Center Drive"))
                    # Should print "house number 55 on street named North Center Drive"
                    

                    【讨论】:

                      【解决方案14】:

                      我在不使用数字的 if 语句的情况下解决它,我将列表分成 2 部分并将每个部分添加到适当的变量中。

                      def format_address(address_string):
                            house_number = ''
                            street_name = ''
                            parts = address_string.split(' ',1)
                            house_number += parts[0]
                            street_name += parts[1]
                          
                          
                            return "house number {} on street named {}".format(house_number,street_name)
                      

                      【讨论】:

                        【解决方案15】:
                        def format_address(address_string):
                             # Declare variables
                             house_number =' '
                             street_name =" "
                        
                             # Separate the address string into parts
                             x= address_string.split(" ")
                              # Traverse through the address parts
                              for y in x:
                                if(y.isdigit()):
                                  house_number=y
                                else:
                                  street_name+=y
                                  street_name+=' '
                            # Determine if the address part is the
                            # house number or part of the street name
                            # Does anything else need to be done
                            # before returning the result?
                        
                            # Return the formatted string
                            return "house number {} on street named {}".format(house_number, street_name)
                        
                            print(format_address("123 Main Street"))
                            # Should print: "house number 123 on street named Main Street"
                        
                            print(format_address("1001 1st Ave"))
                            # Should print: "house number 1001 on stre
                            print(format_address("55 North Center Drive"))
                            # Should print "house number 55 on street named North Center Drive"
                        

                        【讨论】:

                        • 欢迎来到 StackOverflow。虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将提高​​答案的长期价值。
                        【解决方案16】:
                        def format_address(address_string):
                          street_name = ""
                          houseandstreet = address_string.split()
                          for i in houseandstreet:
                            if i.isdigit():
                              house_number = i
                            else:
                              street_name = street_name + i +" "   
                          return "house number {} on street named {}".format(house_number,street_name)
                        

                        【讨论】:

                        • 这里的 house_number 永远是个位数
                        • @arunna house_number 并不总是一个数字,因为我在第 3 行使用了 split() 方法。
                        【解决方案17】:

                        我也会参与进来。 有时数字不在开头,所以这里的最短答案在这种情况下不起作用。

                        这是我的版本:

                        def format_address(address_string):
                          # Declare variables
                            house_nr = ""
                            street = ""
                          # Separate the address string into parts
                            addy_parts = address_string.split()
                          # Traverse through the address parts
                            for p in addy_parts:
                            # Determine if the address part is the
                            # house number or part of the street name
                                if p.isnumeric() and house_nr == "":
                                    house_nr = p
                                else:
                                    street += p + " "
                                    
                          # Does anything else need to be done 
                          # before returning the result?
                          
                          # Return the formatted string  
                            return "house number {} on street named {street}".format(house_nr, street = street.rstrip())
                        
                        print(format_address("Main Street 123"))
                        # Should print: "house number 123 on street named Main Street"
                        
                        print(format_address("1001 1st Ave Apt 20"))
                        # Should print: "house number 1001 on street named 1st Ave"
                        
                        print(format_address("55 North Center Drive"))
                        # Should print "house number 55 on street named North Center Drive"
                        

                        它还将考虑地址中超过 1 个数字字,例如当给出一个公寓号码,或者一个人给出的任何愚蠢的条目时。

                        我知道这不是这个 Q 来自 Google 课程的原始问题的一部分,但它有助于理解它是如何工作的。

                        如果您只想要简短的答案,请使用@Ann Zen 的答案,很好。

                        【讨论】:

                          【解决方案18】:
                          def format_address(address_string):
                            # Declare variables
                            z = address_string.split(" ")
                            house_number = z[0]
                            street_name = z[1:]
                            # Return the formatted string  
                            return "house number {} on street named {}".format(house_number, " ".join(street_name))
                          
                          print(format_address("123 Main Street"))
                          # Should print: "house number 123 on street named Main Street"
                          
                          print(format_address("1001 1st Ave"))
                          # Should print: "house number 1001 on street named 1st Ave"
                          
                          print(format_address("55 North Center Drive"))
                          # Should print "house number 55 on street named North Center Drive"
                          

                          【讨论】:

                            【解决方案19】:

                            x[0] 将是门牌号,而 " ".join(x[1:]) 将是街道名称。这是可行的,因为数字总是在字符串中排在第一位。

                            def format_address(address_string):
                                x = address_string.split()
                                return "house number {} on street named {}".format(x[0], " ".join(x[1:]))
                            
                            print(format_address("123 Main Street"))
                            print(format_address("1001 1st Ave"))
                            print(format_address("55 North Center Drive"))
                            

                            【讨论】:

                            • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                            【解决方案20】:

                            定义格式地址(地址字符串):

                            return "house number {} on street named {}".format(address_string.split()[0], " ".join(address_string.split()[1:]))
                            
                            print(format_address("123 Main Street"))
                            # Should print: "house number 123 on street named Main Street"
                            
                            print(format_address("1001 1st Ave"))
                            # Should print: "house number 1001 on street named 1st Ave"
                            
                            print(format_address("55 North Center Drive"))
                            # Should print "house number 55 on street named North Center Drive"
                            

                            【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2017-06-15
                            • 1970-01-01
                            • 2011-03-05
                            相关资源
                            最近更新 更多