尝试让它循环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...
答案 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)
首先,在你的func定义中:
def makebar(x):
zipcode.split()
for i in zipcode:
barcode(x)
zipcode.split()只返回一个列表,没有改变zipcode本身
for i in zip code:
,每个我都是一个str(一个字符),而不是你想要的字符。
在def barcode(a):
中
因为你通过了str,所以它不适合你设定的任何条件。
最终你得到了无(自动返回值)。
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 |