用Python编织数字
我正在尝试编写一个代码,返回两个用户输入的号码中所有可能编织号码的列表。 比如说, 如果A=27和B=54,则有四个数字可以编织 2574 5247 7425 4752 编织一个数字可以从开始编织,从a开始,从开始编织,从B开始,从末端编织,从a开始,从末端编织,从B开始。编织两个数字a和B时,如果a的所有数字都编织好了,B中还有更多的数字,B的其余数字仅附加在末尾 我正在努力用Python编织数字,python,string,math,Python,String,Math,我正在尝试编写一个代码,返回两个用户输入的号码中所有可能编织号码的列表。 比如说, 如果A=27和B=54,则有四个数字可以编织 2574 5247 7425 4752 编织一个数字可以从开始编织,从a开始,从开始编织,从B开始,从末端编织,从a开始,从末端编织,从B开始。编织两个数字a和B时,如果a的所有数字都编织好了,B中还有更多的数字,B的其余数字仅附加在末尾 我正在努力 num_a=input() num_b=输入() 编织的_nums=[] def排列(字符串): 如果len(字符串)
num_a=input()
num_b=输入()
编织的_nums=[]
def排列(字符串):
如果len(字符串)==1:
返回字符串
递归_perms=[]
对于字符串中的c:
对于置换中的置换(string.replace(c',1)):
递归perms.append(c+perm)
返回集(递归\u perms)
num_a_perms=列表(排列(num_a))
num_b_perms=列表(排列(num_b))
def编织(数量1,数量2):
新字符串=“”
对于范围内的i(len(min([num_1,num_2],key=len)):
新字符串+=num_1[i]+num_2[i]
新字符串+=max(num_1,num_2,key=len)[len(num_1):]
编织的\u nums.append(新\u字符串)
对于范围内的i(len(num_a_perms)):
对于范围内的k(len(num_b_perms)):
织物(数量a\u perms[i],数量b\u perms[k])
编织(num_b_perms[k],num_a_perms[i])
印刷品(编织物)
然而,我的程序返回
['2475', '4257', '2574', '5247', '7425', '4752', '7524', '5742']
输入
27和54
num_b=输入(“输入第二项:”)
编织的_nums=[]
def编织(数量1,数量2):
新字符串=“”
对于范围内的i(最小值(len(num_1),len(num_2)):
新字符串+=num_1[i]+num_2[i]
新字符串+=max(num_1,num_2,key=len)[min(len(num_1),len(num_2)):]
编织的字符串追加(int(新字符串))
编织(数量a,数量b)
编织(数量b,数量a)
编织(数量a[:-1],数量b[:-1])
编织(数量b[:-1],数量a[:-1])
打印(最大值(列表(贴图(整数、编织整数)))
此解决方案有效另一种解决方案-仅限于两种输入:
- 从开头开始
first:r
zip(r,s)
- 从末尾开始
first:r
zip(r[::-1],s[:-1])
- 从开头开始
first:s
zip(s,r)
- 从末尾开始
first:s
zip(s[::-1],r[:-1])
对于长度不等的字符串,请使用
itertools.zip\u longest(*combo,fillvalue='')
而不是zip
def f(r,s):
combos = ((r,s),
(r[::-1],s[::-1]),
(s,r),
(s[::-1],r[::-1]))
for combo in combos:
yield ''.join(c for x,y in itertools.zip_longest(*combo,fillvalue='') for c in (x,y))
我不明白为什么你得到的结果是错误的。当你在不同的地方浏览程序或印刷品时,你能看到哪里出了问题吗?您是否使用已知的输入测试了这两个函数并验证了它们是否正常工作?如果您现在使用IDE,那么现在正是学习其调试功能的好时机—例如单步执行、设置断点和检查值。或者你可以花一点时间熟悉内置的。此外,在程序的关键点打印内容可以帮助您跟踪正在发生或未发生的事情。我应该只得到4个数字,2574,5247,7425和4752作为最终列表
def f(r,s):
combos = ((r,s),
(r[::-1],s[::-1]),
(s,r),
(s[::-1],r[::-1]))
for combo in combos:
yield ''.join(c for x,y in itertools.zip_longest(*combo,fillvalue='') for c in (x,y))
>>> for thing in f('27','543'):
print(thing)
25743
73245
52473
37425