2016-06-05 11 views
0

Ich bin ein Anfänger in der Codierung und versuche, diesen GTIN-8-Code auf Python zu schreiben, aber es sagt ungültige Syntax. Bitte hilf mir. Vielen Dank. Übrigens wäre es großartig, wenn Sie mir Ratschläge geben könnten, um den Code effizienter zu machen und andere konstruktive Kritik zu üben. Vielen Dank.Mein GTIN-8-Code funktioniert nicht

DigitNumber = input ("Enter 7 different digit: ") 
length=len(DigitNumber) 
while length != 7: 
     print("Please type 7 digit codes.") 
     DN= input ("Enter 7 different digit: ") 
if(length==7): 
    GTIN1=int(DigitNumber[0]) 
    GTIN2=int(DigitNumber[1]) 
    GTIN3=int(DigitNumber[2]) 
    GTIN4=int(DigitNumber[3]) 
    GTIN5=int(DigitNumber[4]) 
    GTIN6=int(DigitNumber[5]) 
    GTIN7=int(DigitNumber[6]) 
TOTALGTIN=int(GTIN1*3+GTIN2+GTIN3*3+GTIN4+GTIN5*3+GTIN6+GTIN7*3) 
roundingup=round(TOTALGTIN, -1) 
GTIN8 = int(roundingup - TOTALGTIN) % 10 
print("The full valid 8-Digit GTIN-8 code is: "+str(DigitNumber)+str(GTIN8) 

yes = set(['yes','y', 'ye']) 
no = set(['no','n']) 

choice = input("Would you like to validate your 8-digit GTIN-8code?") 
if choice in yes: 
    Validate = input("Enter your 8 digit GTIN-8 number: ") 
    GTIN1=int(DigitNumber[0]) 
    GTIN2=int(DigitNumber[1]) 
    GTIN3=int(DigitNumber[2]) 
    GTIN4=int(DigitNumber[3]) 
    GTIN5=int(DigitNumber[4]) 
    GTIN6=int(DigitNumber[5]) 
    GTIN7=int(DigitNumber[6]) 
    GTIN8=int(DigitNumber[7]) 
    Validifying=int(GTIN1*3+GTIN2+GTIN3*3+GTIN4+GTIN5*3+GTIN6+GTIN7*3+GTIN8) 
    Check=Validifying%10 
    if(Validifying/10.).is_integer(): 
    print("Your code is valid")  
    else: 
    print("Your 8 digit GTIN code is invalid.") 
elif choice in no: 
    print ("Ok, thank you.") 
    exit(1) 
else: 
    sys.stdout.write("Please respond with 'yes' or 'no'") 
+0

Ist das die vollständige Fehlermeldung? Gibt es keinen weiteren Hinweis? z.B. die Codezeile? – etalon11

+0

@ etalon11 Yh, es sagt immer ungültige Syntax mit dem roten Hervorhebungsteil auf ja. Der obere Teil auf seine eigene Arbeit und der untere Teil auf eigene Art arbeiten, um Ihren 8-stelligen GTIN-8-Code einzugeben. Aber irgendwie, wenn ich sie zusammenfüge, erscheint ungültige Syntax mit roter Markierung auf ja. – ANoNYM

+0

In der letzten Zeile? – etalon11

Antwort

0

GS1-Codes sind in verschiedenen Längen, von GTIN-8 (8-stellig) zu SSCC (2 digit Anwendungs-ID + 18 Stellen). Hier ist eine einfache, allgemeine Python Formel, die für jede Länge GS1 Kennung funktioniert:

cd = lambda x: -sum(int(v) * [3,1][i%2] for i, v in enumerate(str(x)[::-1])) % 10 

Erläuterung:

  1. Convert Eingang String, so Eingang kann numerisch oder String sein - nur ein Convenience-Faktor.
  2. Kehren Sie die Zeichenfolge um. Dies ist eine einfachere Möglichkeit, das 3x/1x-Gewichtungsmuster mit der Eingabe auszurichten.
  3. Der Gewichtungsfaktor wird basierend auf der ungeraden und geraden Eingabezeichenposition durch Berechnen von i mod 2 ausgewählt. Das letzte Zeichen in der Eingabezeichenfolge (i = 0 nach dem Umkehren der Zeichenfolge) wird 3x.
  4. Berechnen Sie die negative gewichtete Summe mod 10. Entspricht dem (10 - (sum mod 10)) mod 10 Ansatz, den Sie bekommen würden, wenn Sie die GS1 manuelle Berechnung genau befolgen, aber das ist hässlich.

Testfälle

## GTIN-8 
>>> cd(1234567) 
0 
>>> cd(9505000) 
3 

## GTIN-12 
>>> cd(71941050001) 
6 
>>> cd('05042833241') 
2 

## GTIN-13 
>>> cd(900223631103) 
6 
>>> cd(5) 
0 

## GTIN-14 
>>> cd(1038447886180) 
4 
>>> cd(10) 
7 

## SSCC (20 digits incl. application identifier) 
>>> cd('0000718908562723189') 
6 
>>> cd('0037612345000001009') 
1