【问题标题】:Why isn't this str.join() looping properly?为什么这个 str.join() 不能正确循环?
【发布时间】:2021-03-23 21:16:49
【问题描述】:

我在网上看到了很多关于添加整数 + 列表的教程,但我对连接字符串仍然有些模糊。我似乎无法让它正确循环。最终输出应该是“嗨!!!”但它只返回一次迭代。

input_string = "hi"
more_char = "!"

def add_strings(input_string, more_char):

  for output_string in input_string:

    output_string = input_string
    if len(output_string) > 5:
      break
    while len(output_string) < 5:
      while True:
        if len(output_string) < 5:
          output_string = "".join(input_string + more_char)
          return output_string
        elif len(output_string) == 5:
          return output_string

  return str(output_string)

print(add_strings(input_string, more_char))

【问题讨论】:

  • join() 用于将列表组合成字符串。 input_stringmore_char 已经是字符串,你不需要使用join
  • 另外,通过调用return output_string 可以打破循环;)
  • 您应该使用break 而不是return output_string。这会停止循环,但不会结束函数。
  • 你的函数相当于:return input_string + more_char
  • 整件事应该是return input_string + more_char * (5 - len(input_string))

标签: python string for-loop concatenation


【解决方案1】:

听起来您的意思是将第二个字符串重复添加到第一个字符串上,直到其长度为 5 或更多:

def add_strings(input_string, more_char):
    output_string = input_string
    while len(output_string) < 5:
        output_string += more_char

    return output_string

input_string = "hi"
more_char = "!"
print(add_strings(input_string, more_char))

按要求输出

【讨论】:

  • 好的,现在我知道我在哪里感到困惑了。我读到我应该尽可能避免使用 '+=' 所以我试图通过一系列 elif 来做到这一点,但我发现在 while 中放置条件会导致问题。 “+=”是这里的最佳情况吗?
  • 检查来自 cmets 中 @Barmar 的答案。
【解决方案2】:

您根本不需要任何循环。您可以通过将字符串乘以重复次数来重复字符串。

def add_strings(input_string, more_char):
    if len(input_string) < 5:
        output_string = input_string + (5 - len(input_string)) * more_char
    else:
        output_string = input_string
    return output_string

您实际上并不需要if,因为乘以小于 1 的数字会返回一个空字符串。但它使意图更清晰,恕我直言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多