我坚持以下实验练习:
我们需要的第一件事是一个例行公事,一句话,将会在 总而言之,除了第一个和最后一个之外,所有的顺序都混杂起来 字符。而不是随意移动我们周围的人物 将颠倒字母的顺序。以下代码实现 这样:
def jumble(x): return x[len(x)::-1] my_string="Alistair" print(" Reverse ",jumble(my_string))
将上述代码复制到文件并运行它。目前它逆转了 “my_string”中所有字符的顺序。修改代码,以便 这个词的第一个和最后一个字母是不相反的。那是, 而不是产生
"riatsilA"
它产生"Aiatsilr"
。
这是我上面部分的代码:
def jumble(x):
temp0=x[0]
temp_last=x[-1]
x_new=temp0 + x[-2:0:-1] + temp_last
return x_new
my_string="Alistair"
print(" Reverse ",jumble(my_string))
上述例程不考虑前导或尾随白色 空格,标点符号或其他可能合法参与的字符 字符串,但不应混淆。对于 例如,如果字符串是
" Alistair, "
,结果应该是" riatsilA, ".
修改您的例程,以便只有FIRST连续 一系列字母字符(减去第一个和最后一个 字符)是相反的。确保最终返回的字符串 包括所有其他前导和尾随字符。
我不知道如何做到这一点,因为白色空间和标点符号可以在任何地方发生,我正在考虑有两个列表,一个用于空格和标点符号,另一个用于“连续系列的字母字符”,使用追加方法将元素附加到每个列表,但不知道如何保留index.Can有人帮助我吗?提前谢谢。
答案 0 :(得分:0)
#!/usr/bin/env python
#-*-coding:utf-8-*-
import re
def reverse(s):
p = re.compile(r'\w+')
for m in p.finditer(s):
word = m.group()
if word:
p = s.partition(word)
l = list(p)
index = p.index(word)
l[index] = l[index][::-1]
l2 = list(l[index])
l2[0],l2[-1]=l2[-1],l2[0]
l[index]=''.join(l2)
s = ''.join(l)
return s
s="Alistair Chris,"
print reverse(s)
修好了。
答案 1 :(得分:0)
以下代码snipplet可能会帮助您完成上一个任务。 如果在字符串的开头或结尾处找到特殊字符,则没有特殊处理来恢复子集。
# Special chars which should be ignored for reverting
SPECIALCHARS = [' ', '.', ',']
def reverse( string_ ):
# Find occurence of 'special' chars. Stack position and char into a list.
specchar = [( i, ltr ) for i, ltr in enumerate( string_ ) if ltr in SPECIALCHARS]
if specchar:
# Remove all the special characters
newstring = ''.join( c for c in string_ if c not in SPECIALCHARS )
# Reverse the legal characters
newstring = newstring[::-1]
offset = 0
# Re-insert the removed special chars
for pos, char in specchar:
if pos + 1 + offset >= len( newstring ):
# Append at the end
newstring += char
else:
# Insert
newstring = newstring[:pos + offset] + char + newstring[pos + offset:]
offset += 1
return newstring
else: # No special char at all, so just revert
return string_[::-1]
print " '%s' =?= ' riatsilA, '" % ( reverse( " Alistair, " ) )
将导致以下输出:' riatsilA, ' =?= ' riatsilA, '
只需忽略第一个和最后一个字符即可恢复。 用这个来反转'中间':t [1:-1] [:: - 1] 然后添加第一个和最后一个字符。
>>> t = "Alistair"
>>> t[0]+t[1:-1][::-1]+t[-1]
'Aiatsilr'
修改强>
好的,现在我想我明白了你想要的东西: - )
newstr = ""
fullstr = ""
for char in mystr:
if char in SPECIALCHARS:
if len( newstr ): # Is already something to invert there?
#Ignore 1st and last char and revert the rest
newstr = newstr[0] + newstr[1:-1][::-1] + newstr[-1]
fullstr += newstr + char
else: # Special char found but nothing to revert so far
fullstr += char
newstr = ""
else: # No special char so just append
newstr += char
print "'%s'" % fullstr