所以这只是我在codewars.com上为了好玩而做的一项练习。重点是取一个字符串并将其拉出来,取最后一个字符并将其添加到字符串中,取第一个字符并将其添加到另一个字符串,直到您有1(对于具有奇数字母的字符串)或0(对于具有偶数字母的字符串)剩下的字符。如果您有兴趣,可以点击challenge链接。
# function sleep { -- optional switch-out for the system command
# after POSIX & GNU compatibility verified.
function delay {
emulate -LR zsh -o extendedglob -o nullglob
local Delay=1.
if [[ $1 == (#b)([[:digit:]](#c1,).(#c0,1)[[:digit:]](#c0,))(s|m|h|d|w|) ]]
then
if [[ $match[2] == (s|) ]] Delay=$match[1]
if [[ $match[2] == (m) ]] Delay=$[ $match[1] * 60. ** 1 ]
if [[ $match[2] == (h) ]] Delay=$[ $match[1] * 60. ** 2 ]
if [[ $match[2] == (d) ]] Delay=$[ ($match[1] * 60. ** 2) * 24 ]
if [[ $match[2] == (w) ]] Delay=$[ (($match[1] * 60. ** 2) * 24) * 7 ]
: $(read -u 1 -t $Delay)
else
print -u 2 "Invalid delay time: $1"
return 1
fi
}
如果字符串有奇数个字符,我的代码会给我正确的结果:
def pop_shift(test):
firstSol = []
secondSol = []
testList = list(test)
while len(testList) != 1:
firstSol.append(testList.pop())
secondSol.append(testList.pop(0))
return [''.join(firstSol), ''.join(secondSol), ''.join(testList)]
但是由于偶数个字符我得到了这个错误:
['erehtse', 'example', 't']
我查看了一系列涉及pop()方法的问题,但没有任何内容与此类似。我也用各种字符串对它进行了测试,并查看了pop方法的文档。必须有一些我缺少的东西。任何指针都表示赞赏。这也是我的第一个问题,所以如果您还有其他想看的内容,请告诉我。
答案 0 :(得分:0)
你的循环正在检查列表的长度是否为1;对于偶数长度列表,因为您总是一次弹出2个项目,所以它永远不会看到长度为1。
答案 1 :(得分:0)
而不是while len(testList) != 1
,您需要:while len(testList) > 1
,因为len(testList)
会在“偶数”字符串上从2
跳到0
:
def pop_shift(test):
firstSol = []
secondSol = []
testList = list(test)
while len(testList) > 1:
firstSol.append(testList.pop())
secondSol.append(testList.pop(0))
return [''.join(firstSol), ''.join(secondSol), ''.join(testList)]
然后:
print(pop_shift("Monkeys"))
> ['sye', 'Mon', 'k']
print(pop_shift("Monkey"))
> ['yek', 'Mon', '']