为什么我的程序不能正常工作? (为什么它停在中间)

时间:2015-03-12 09:21:27

标签: python function if-statement for-loop while-loop

所以我的主张是:

  

斯洛文尼亚邮报经常会收到一封带有难以理解的邮政编码的信件,因为人们写这样的方式使得一些数字难以阅读。

     

特别经常更换

     
      
  • 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)

2 个答案:

答案 0 :(得分:1)

只要您将单个字符映射到别名,就可以将其视为获取别名列表的笛卡儿积

http://repl.it/dgM/7

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)