返回none而不是我的字符串

时间:2016-10-21 05:31:25

标签: python

尝试让它循环5次以获得邮政编码,制作5个不同的字符串" ::: ||"的东西。它目前打印为|无6 |没有人认为假设是5个不同的陈述(" ::: ||")任何想法?

zipcode=input("What is your 5 digit zipcode?") #gives the zipcode
#x,z,c,d,e=zipcode.split()  #splits the zipcode into 5 sections   IGNORE

def correctiondigit(zipcode):     #LAST BLOCK OF 6 BLOCK BARCODE
    zipcode.split()
    total=     int(zipcode[0])+int(zipcode[1])+int(zipcode[2])+int(zipcode[3])+int(zipcode[4])
    if total % 10!=0:
        total=10-total%10
    return total

#return(correctiondigit(zipcode))            IGNORE

def barcode(a):
    if a==0:
        return("||:::")
    elif a==1:
        return(":::||")
    elif a==2:
        return("::|:|")
    elif a==3:
        return("::||:")
    elif a==4:
        return(":|::|")
    elif a==5:
        return(":|:|:")
    elif a==6:
        return(":||::")
    elif a==7:
        return("|:::|")
    elif a==8:
        return("|::|:")
    elif a==9:
       return("|:|::")


def makebar(x):
    zipcode.split()
    for i in zipcode:
        barcode(x)

print("|",makebar(zipcode),correctiondigit(zipcode),"|") #prints barcode in not barcode form...

3 个答案:

答案 0 :(得分:1)

您的代码有几处错误。我看到的第一个是makebar,其中zipcode.split()没有将结果保存在任何地方。因此for i in zipcode:遍历邮政编码中的每个字符而不是每个“单词”。邮政编码中甚至没有任何字词;只是一个没有空格的字符串,所以split()将无法完成任何事情。其次,您正在迭代zipcode而不使用迭代值,每次循环时都会发送整个传递的x(这是对全局变量zipcode的引用)。接下来,您无法累积这些barcode次调用的结果。最后,makebar没有return语句,因此隐式返回None

def makebar(x):
    return ''.join(map(barcode, x))

这只在makebar。您的代码可能有其他错误,会产生回溯或其他不需要的结果。您必须非常仔细地查看您的代码,并查看您一直在使用的任何教学材料。

答案 1 :(得分:0)

  1. 首先,在你的func定义中:
    def makebar(x): zipcode.split() for i in zipcode: barcode(x)

    zipcode.split()只返回一个列表,没有改变zipcode本身 for i in zip code:,每个我都是一个str(一个字符),而不是你想要的字符。

  2. def barcode(a):中 因为你通过了str,所以它不适合你设定的​​任何条件。
    最终你得到了无(自动返回值)。

  3. 我建议您将barcode(x)更改为yield barcode(int(i)),将最后一个语句更改为print("|",*makebar(zipcode),correctiondigit(zipcode),"|")(请注意*表示法)

答案 2 :(得分:0)

希望这与你想要达到的目标很接近 我不确定您的校验位计算的性质,但我认为它应该有一种方法说它不正确,我使用了“X”。

zipcode=input("What is your 5 digit zipcode?") #gives the zipcode
try:
    num = int(zipcode)
except:
    print("Invalid Zipcode - requires numeric input only")  #Test for numeric input
    quit()
if len(zipcode) != 5:                                       # test input length
    print("Invalid Zipcode - requires 5 numerics")
    quit()

def correctiondigit(zipcode):     #LAST BLOCK OF 6 BLOCK BARCODE
    total = sum(int(i) for i in zipcode)                    #Calculate total
    if total % 10!=0:
        total=10-total%10
    else:
        total = "X"                                         #Check digit incorrect
    return total

def barcode(a):
    if a==0:
        return("||:::")
    elif a==1:
        return(":::||")
    elif a==2:
        return("::|:|")
    elif a==3:
        return("::||:")
    elif a==4:
        return(":|::|")
    elif a==5:
        return(":|:|:")
    elif a==6:
        return(":||::")
    elif a==7:
        return("|:::|")
    elif a==8:
        return("|::|:")
    elif a==9:
       return("|:|::")


def makebar(x):                                             #Build barcode representation
    bar=[]                                                  #Using a list
    for i in zipcode:
        bar.append(barcode(int(i)))
    return bar

print("|",makebar(zipcode),correctiondigit(zipcode),"|")

输出:

What is your 5 digit zipcode?12345
| [':::||', '::|:|', '::||:', ':|::|', ':|:|:'] 5 |
What is your 5 digit zipcode?13131
| [':::||', '::||:', ':::||', '::||:', ':::||'] 1 |
What is your 5 digit zipcode?22222
| ['::|:|', '::|:|', '::|:|', '::|:|', '::|:|'] X |