【问题标题】:Repeat string with a specific pattern without slicing以特定模式重复字符串而不切片
【发布时间】:2021-02-08 05:46:51
【问题描述】:

我正在处理一个非常烦人的 Python 作业,但我迷路了。这些是要求:

  • 征求意见。
  • 对于保存的字符串中的每个字符,我需要输出经过一定修改的字符串。例如,如果输入是 abcd,则输出如下所示:
abcd
bcda
cdab
dabc

即有len(input) 行,每一行都从下一个input[i] 字符开始,并重复到原始输入的长度。

  • 我不应该使用切片,这是循环练习 (T_T)。没有功能或包。仅循环。

我制作了一个如下所示的工作脚本:

w = input('Type a word:')
w2 = ''

for i, char in enumerate(w):
    w2 = w[i:]+w[:i]
    print(w2)

它简洁而简短。但它会被标记为切片。 Python循环大师可以帮我把它改造成循环吗?提前非常感谢!

【问题讨论】:

  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题?”与 Stack Overflow 无关。您必须诚实地尝试解决方案,然后就您的实施提出具体问题。 Stack Overflow 无意取代现有的教程和文档。
  • 同时检查can someone help me?。避免本说明中给出的离题区域,更新您的帖子,您更有可能获得帮助。例如,显示您尝试用循环替换该切片。
  • @Prune - 标题很好,并且尝试了一个不起作用的解决方案。我认为它很适合这个网站。

标签: python string loops input slice


【解决方案1】:

如果你不能分割字符串,你可以追加和弹出列表。因此,将字符串转换为列表并使用列表方法。

>>> test = "abcd"
>>> l = list(test)
>>> for _ in range(len(l)):
...     print("".join(l))
...     l.append(l.pop(0))
... 
abcd
bcda
cdab
dabc

【讨论】:

  • 因为这显然是一个分配,并且 OP 没有尝试用他们自己引用的限制来回答这个问题,.. 为什么要回答? meta.stackoverflow.com/questions/334822/… 非常失望。
  • 谢谢,我没想过转换为列表,range() 似乎也非常适合这项任务。会试试的。
  • @barny - 因为 OP 显然符合标准。问题已明确说明。尽管文中有“你能帮帮我吗”,但问题的标题还是很明确的。 OP 尝试了一个解决方案,但它失败了约束。 OP 不确定如何解决这个问题,所以没有第二个解决方案。这个网站上的很多错误都是这样的。你会不会因为这个人不知道特定的 ufunc 而回答 pandas 问题?
  • @CathNeman - 当您不使用 enumerate 迭代的值之一时,这很好地表明它毕竟不需要。
  • @barny 我确实尝试多次使用循环,但只有我发布的代码至少产生了所需的输出,其他脚本甚至没有关闭。对不起,如果我的任务不符合标准,我主要是潜伏在这里,很少发帖。
【解决方案2】:

您可以使用自身的模数对原始字符串进行索引:

w = "aword" 
lw = len(w)

for offset in range(lw):
    for character in range(lw):
        print(w[(offset+character) % lw], end="")
    print()

输出:

aword
worda
ordaw
rdawo
dawor

如果您的偏移量和字符的总和超过了模运算所环绕的字符数量。

【讨论】:

  • 因为这显然是一个分配,并且 OP 没有尝试用他们自己引用的限制来回答这个问题,.. 为什么要回答? meta.stackoverflow.com/questions/334822/… 非常失望。
  • 非常感谢,由于某种原因我忘记了 range()。
  • @barny 使用模数索引到字符串的方法是新的,但问题提出了切片问题的解决方案。所以我看到了一个解决方案的尝试,这个问题看起来也不错。凭空提出这种模块化索引可能会要求很多,那么为什么不回答呢?考虑到这里通常出现的问题,这个问题获得 3.5/5 星评级。
【解决方案3】:

只是为了好玩另一个:

s = 'aword'
ss = s * 2  # 'awordaword'
for i in range(len(s)):
    for j in range(len(s)):
        print(ss[i+j], end='')
    print()

输出:

aword
worda
ordaw
rdawo
dawor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2016-07-30
    • 2012-02-10
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多