在python中递归合并两个字符串而不使用内置函数
在名为在python中递归合并两个字符串而不使用内置函数,python,python-3.x,string,sorting,recursion,Python,Python 3.x,String,Sorting,Recursion,在名为concat_strings.py的文件中编写一个Python程序,其中包括以下函数: orderedConcat,一个递归函数,它接受两个按字母顺序排列的字符串并合并它们,留下 按字母顺序排列的字母。请注意,字符串的长度可能不同 一种主方法,它输入两个有序字符串并调用orderedConcat方法以返回结果合并的有序字符串。main方法应该打印两个输入字符串和结果 注意:对于字符串连接或排序,您不能使用任何内置方法,但可以使用len()函数和切片运算符(:)。您可以假设输入字符串已经排序
concat_strings.py
的文件中编写一个Python程序,其中包括以下函数:
orderedConcat
,一个递归函数,它接受两个按字母顺序排列的字符串并合并它们,留下
按字母顺序排列的字母。请注意,字符串的长度可能不同
一种主方法,它输入两个有序字符串并调用orderedConcat
方法以返回结果合并的有序字符串。main方法应该打印两个输入字符串和结果
注意:对于字符串连接或排序,您不能使用任何内置方法,但可以使用len()
函数和切片运算符(:)。您可以假设输入字符串已经排序
输入/输出示例:
Enter the first ordered string: DEab
Enter the second ordered string: BFxz
First string: DEab
Second string: BFxz
Result: BDEFabxz
注意:我对编程一无所知,很难弄明白这一点。从理论上讲
字符串必须加在一起,但如何按字母顺序排序?我如何处理大小写字母?我使用选择排序还是合并排序?我的基本情况和递归情况应该是什么?任何帮助都将不胜感激
到目前为止,我已经尝试了什么(虽然不多,但我尽了我所能):
def orderedConcat(长度):
新闻字符串=string1+string2
长度=长度(新闻字符串)
如果长度==1或长度==“”:
返回真值
elif length[0]让我们一步一步地完成这个过程。首先,我们的函数接受两个字符串,我们将它们称为a
和b
:
def orderedConcat(a, b):
在编写递归函数时,我们通常从基本情况开始。在这种情况下,有两种基本情况:
a
为空,因此不需要合并,我们只需返回b
(因为b
已排序)
b
为空,遵循与案例1相同的逻辑并返回a
代码:
if len(a) == 0:
return b
elif len(b) == 0:
return a
else:
# ...
现在,对于递归情况,我们需要比较两个字符串a[0]
和b[0]
的第一个元素。如果a[0]
(Python实现),我不知道如何递归处理大小写,但这可能是一个快速解决方法
def orderedConcat(string1, string2):
if len(string1 + string2) == 0:
return ''
elif (len(string1) > 0 and len(string2) == 0) or (len(string1) == 0 and len(string2) > 0):
return string1 + string2
else:
if string1[0] < string2[0]:
return string1[0] + orderedConcat(string1[1:], string2)
elif string2[0] < string1[0]:
return string2[0] + orderedConcat(string1, string2[1:])
else: # if they're equal
return string1[0] + string2[0] + \
orderedConcat(string1[1:], string2[1:])
def main():
string1 = "acdrt"
string2 = "bdet"
print("First string: ", string1)
print("Second string: ", string2)
print("Result : ", end=' ')
print(orderedConcat("acdrt", "bdet"))
main()
def orderedConcat(string1、string2):
如果len(string1+string2)==0:
返回“”
elif(len(string1)>0和len(string2)==0)或(len(string1)==0和len(string2)>0):
返回字符串1+字符串2
其他:
如果string1[0]
查看您的功能:
def orderedConcat(length):
newString = string1 + string2
length = len(newString) #cut
elif st1[:1] <= st2[:1]:
newString = newString + st1[:1]
return oC(st1[1:], st2[:]) #shorten here
else:
newString = newString + st2[:1]
return oC(st1[:], st2[1:])
首先,您必须将字符串传递到函数中,而不是传递长度。因此,从定义开始。为了在概念上更简单,让我们使用Python作用域规则声明一个静态变量,一个空字符串来保存最终的具体排序结果(全局允许字符串newString
在多个函数调用中保持和增长,而不是在每次调用时重新初始化):
第二,任何递归问题的第一步是确定将停止递归的基本情况,这样就不会无限递归。因为我们处理的是字符串,并且将它们切碎,所以基本情况将是len相关的。而且字符串是单独排序的,所以剩下的任何东西(如果一个比另一个长)这不是问题,我们只需将剩余部分涂到混凝土上即可:
if len(st1) == 0:
newString += st2
return
elif len(st2) == 0:
newString += st1
return
在整理好基本情况后,任何递归问题的下一步是按顺序缩短问题-将其分成越来越小的部分,以便最终达到基本情况。在这里,我们可以使用slice运算符按顺序比较字符串元素,并缩短字符串以反馈到函数中:
def orderedConcat(length):
newString = string1 + string2
length = len(newString) #cut
elif st1[:1] <= st2[:1]:
newString = newString + st1[:1]
return oC(st1[1:], st2[:]) #shorten here
else:
newString = newString + st2[:1]
return oC(st1[:], st2[1:])
这有点不方便。看看您是否能找出如何在这段代码中消除函数中对外部concat字符串和全局字符串的需要。您的示例不是按字母顺序排序,而是按字母顺序排序。这很好,因为它简化了我们的问题。而不是使用len()
函数是一个例外,我们也不要使用它:
def orderedConcat(a, b):
if a:
if b:
if a[:1] < b[:1]:
return a[:1] + orderedConcat(a[1:], b)
return b[:1] + orderedConcat(a, b[1:])
return a
return b
print(orderedConcat('DEab', 'BFxz'))
def orderedConcat(a,b):
如果是:
如果b:
如果a[:1]
我认为你需要做更多的工作来更好地理解这个问题,因为你提出的解决方案与你在问题中提出的问题相去甚远,在这里得到解决方案的更好方法是了解你必须做什么,并尝试解决问题你自己的第一个问题你这么说吗“获取两个按字母顺序排列的字符串并合并它们的函数”,但在示例中输入了两个不按字母顺序排列的字符串,是否正确?第二个问题:orderedConcat接收两个参数,但在您的示例中只有一个参数。为什么??
elif st1[:1] <= st2[:1]:
newString = newString + st1[:1]
return oC(st1[1:], st2[:]) #shorten here
else:
newString = newString + st2[:1]
return oC(st1[:], st2[1:])
newString = ""
oC(st1, st2)
def orderedConcat(a, b):
if a:
if b:
if a[:1] < b[:1]:
return a[:1] + orderedConcat(a[1:], b)
return b[:1] + orderedConcat(a, b[1:])
return a
return b
print(orderedConcat('DEab', 'BFxz'))