【问题标题】:Iterate through a string forwards and backwards, extracting alternating characters向前和向后遍历字符串,提取交替字符
【发布时间】:2021-04-12 22:16:29
【问题描述】:

我正在研究 python,但有一个我似乎无法破解的实验室。我们有一条线,例如shacnidw,必须转换为 sandwich。我不知何故需要使用for 循环进行迭代,并首先选择具有奇数索引的字母,然后是后向偶数索引。比如选择索引为 1,3,5,7,8,6,4,2 的字母。

使用列表或切片看起来很明显,但我们还不能使用这些函数。我想问题是我该怎么做?

【问题讨论】:

  • 如果你了解切片,你应该能够了解索引访问
  • for i, letter in enumerate (mystring): print (i, letter) 开始,看看这是否暗示了一种方法
  • 您可能还想查看范围函数的 step 参数
  • 能否详细介绍一下实验室的条件?是否只允许一个 for 循环?
  • 请注意,字符串的第一个索引是 0,而不是 1。我没有看到用一个简单的(即没有额外的决策逻辑)循环来解决这个问题的方法。

标签: python string for-loop


【解决方案1】:

我希望我能正确理解您的问题。检查下面的代码。

s = 'shacnidw'
s_odd = ""
s_even = ""
for i in range(len(s)):
  if i%2 == 0:
    s_even += s[i]
for i in range(len(s), 0, -1):
  if i%2 == 1:
    s_odd += s[i]

print(s_even + s_odd)

希望对你有帮助。

【讨论】:

  • @anvoice 是的,这每次都会创建一个新字符串
  • IMO 最好不要只提供完整的解决方案。学校作业的重点不是拥有正确答案,而是找出正确答案。这就是学习的方式。
  • 是的,现在已经知道了。它要么是新的,要么我忘记了。
  • 你可以跳过取模,做range(0,len(s),2),例如
  • @John Kugelman 感谢您的建议。实际上我是这个平台的新手,所以我会记住这一点
【解决方案2】:

编程就是将复杂问题分解为更简单的问题。试着把它分解成更小的步骤。

  1. 首先,您能否在for 循环中生成数字1、3、5、7?
  2. 接下来,能否在第二个循环中生成 8、6、4、2?

解决这两个步骤应该会让你走上正轨。

【讨论】:

  • 成功了!这就是我想出的:line = input('Enter an encrypted word: ') for i in range(0, len(line), 2): print(line[i], end = '') for n in range(len(line)-1, 0, -2): print(line[n], end = '') 再次感谢你,这个建议真的很有帮助,很高兴你也没有给我发送完整的代码!
【解决方案3】:

您的文本看起来采用了可以使用以下语法实现的特定模式。

1, 3, 5, 7 : for n in range(1, size, 2) : 正向步长 2

8, 6, 4, 2 : for m in range(size, 0, -2) : 反向步长 2

通过使用上述索引构建字符串,我们可以很容易地得到预期的结果。

string = 'shacnidw'
result = ''
size = len(string) - 1

for n in range(0, size, 2):
    result += string[n]

for m in range(size, 0, -2):
    result += string[m]

print(result)

结果

sandwich

【讨论】:

  • 谢谢!这正是我一直在寻找的。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多