所以我的主张是:
斯洛文尼亚邮报经常会收到一封带有难以理解的邮政编码的信件,因为人们写这样的方式使得一些数字难以阅读。
特别经常更换
- 3到8之间,
- MED 1,4,7和5
- 介于6
之间铭文子程序变量(k),在屏幕上采用四位数的邮政编码K列出所有可能的邮政编码,可以通过这些交换数字获得。在屏幕上的变体(1035)上显示以下邮政编码,不一定违反清单:1035,1036,1085,1086,4035,4036,4085,4086,7035,7036,7085,7086th
蟒蛇:
def versions (k):
def Variante(x):
a=['3', '8'] #prva tabela
b=['1', '4', '7'] #druga tabela
c=['5', '6'] #treta tabela
v=[] #mozne variante
x=[x]
for s in x:
if s==a[1] or s==a[0]: #ce je stevilka(s) u prvih tabeli
v.append(a)
elif s==b[0] or s==[1] or s==[2]:#ce je stevilka(s) u drugi tabeli
v.append(b)
elif s==c[0] or c==[1]:#ce je stevilka(s) u treti tbabeli
v.append(c)
else:#ce stevilka(s) ni u nobeni skupini
v.append(x)
d=0
while d<len(v[0]):
e=0
print ("ratal")
while e<len(v[1]):
f=0
while f<len(v[2]):
g=0
while g<len(v[3]):
print(v[0][d], v[1][e], v[2][f], v[3][g])
g=g+1
f=f+1
e=e+1
d=d+1
x=input("vnesi postno stevilko: ")
Variante(x)
答案 0 :(得分:1)
只要您将单个字符映射到别名,就可以将其视为获取别名列表的笛卡儿积
from itertools import product
def Variante(zip_code):
replace_tables = [
['3', '8'], #prva tabela
['1', '4', '7'], #druga tabela
['5', '6'], #treta tabela
]
# Convert to list of individual aliases
aliased_chars = []
for char in zip_code:
aliased = False
for table in replace_tables:
if char in table:
# Convert to possible aliases to this char
aliased_chars.append(table)
aliased = True
break
if not aliased:
# Otherwise convert to list for itertools.product
aliased_chars.append([char])
# Get the cartesian product of lists
return ["".join(l) for l in product(*aliased_chars)]
# x=input("vnesi postno stevilko: ")
print(Variante("1035"))
答案 1 :(得分:0)
你的问题是你搞砸了索引。因此,例如,您有s==[1]
而不是s==b[1]
,c==[1]
代替s==c[1]
。
s in b
之类的操作,而不是单独检查每个值。并且您可以使用for
直接遍历列表的元素,而不是while
循环索引。您的代码的更惯用的版本是:
for s in x:
if s in a:
v.append(a)
elif s in b:
v.append(b)
elif s in c:
v.append(c)
else:
v.append(x)
for vd in v[0]:
print("ratal")
for ve in v[1]:
for vf in v[2]:
for vg in v[3]:
print(vd, vem vf, vg)