我可以在C ++中完成相同的任务;但是我正在新学习python,我只是想尝试一下我在C ++中使用的类似代码-但是我在此代码中遇到了一些问题,请您帮我解决我的错误;
def constructPalin(string,length):
i = 0
j = length - 1;
while(i < j):
if (string[i] == string[j] and string[i] != '.'):
continue
elif (string[i] == string[j] and string[i] == '.'):
string[i] = 'a'
string[j] = 'a'
continue
elif (string[i] == '.'):
string[i] = string[j]
continue
elif (string[j] == '.'):
string[j] = string[i]
continue
else:
string="-1"
return string
i=i+1
j=j-1
return string
string=input()
length = len(string)
string=constructPalin(string,length)
print(string)
我只能得到-1的正确输出;在其他情况下可以帮助我
答案 0 :(得分:0)
如果第一个和最后一个字符串匹配,则其索引值应得到更新!
if (string[i] == string[j] and string[i] != '.'):
i=i+1
j=j-1
答案 1 :(得分:0)
首先,Python不允许您修改字符串(它们是“不可变的”),但是您可以将它们变成列表,进行修改,然后再将它们变成字符串。看起来很困难或很慢,但根本没有。
第二,很少使用Python中的“继续”。一个好的代码不应该拥有它。这就是为什么毕竟有elif的原因。
第三,如果您在其中没有做任何事情,请不要使用'if'。
第四,学习python技巧(例如下面的==或=行),这是与其他语言的真正区别。在大多数情况下,使代码更清晰。
欢呼
def constructPalin(string, length):
i = 0
j = length - 1
string = list(string) # turn it to list, as strings can't be modified
while (i <= j): # '<=' to consider a '.' in the middle
# if (string[i] == string[j] and string[i] != '.'): # only use 'if' when you need to
if (string[i] == string[j] == '.'): # both equal to '.'
string[i] = string[j] = 'a' # turn them to 'a'
elif string[i] != string[j]: # not equal, can still be fixed filling the '.'s?
if (string[i] == '.'):
string[i] = string[j]
elif (string[j] == '.'):
string[j] = string[i]
else: # hopeless
string = "-1"
return string
i = i + 1 # if you use "continue", you'll never reach these lines
j = j - 1 # ... and the program loops forever
return "".join(string) # turn it back to string