2017-03-05 106 views
1

我已經在我的電腦類被設定的任務,我要開發生成和驗證一個GTIN-8條形碼的Python程序。然而,我的老師很窮,他也沒有任何線索,所以在課堂上尋求幫助並不是一個真正有效的選擇。另外,在設置這個賦值之前,我的類沒有Python經驗,而且我目前是Python初學者的定義。總之,這裏是我到目前爲止的代碼:的Python:生成和驗證條形碼

def mainmenu(): 
    print("1. Generate a barcode") 
    print("2. Validate a barcode") 
    print("3. Quit") #prints out 3 options for the user to select 
    while True: #loops over and over again 
     try: #handles exceptions 
      selection=int(input("Enter choice: ")) #tells user to enter a choice 
      if selection==1: 
       generate() #calls the function 
       break #terminates the loop 
      elif selection==2: 
       validate() 
       break 
      elif selection==3: 
       break 
      else: 
       print("Invalid choice. Enter 1-3") 
       mainmenu() 
     except ValueError: #if user enters a string, it will loop back 
        print("Invalid choice. Enter 1-3") 
    exit 

def generate(): 
    print("You have chosen to generate a barcode") 
    D1 = int(input("Please enter the first digit")) 
    D2 = int(input("Please enter the second digit")) 
    D3 = int(input("Please enter the third digit")) 
    D4 = int(input("Please enter the fourth digit")) 
    D5 = int(input("Please enter the fifth digit")) 
    D6 = int(input("Please enter the sixth digit")) 
    D7 = int(input("Please enter the seventh digit")) 
    timestogether = int('D1') * 3 
    print (timestogether) 
    anykey=input("Enter anything to return to main menu") 
    mainmenu() 


def validate(): 
    print("You have chosen to validate a barcode") 
    anykey=input("Enter anything to return to main menu") 
    mainmenu() 

# recalls the main menu 
mainmenu() 

到目前爲止,我已經開發,詢問他們是否要產生或驗證條形碼用戶的菜單。但是,我不確定接下來要做什麼。如果用戶想要生成條形碼,程序必須要求用戶輸入一個七位號碼,那麼它必須由3或者乘以七個數字級別比1,那麼就必須添加的結果一起得到的總和,然後它必須從最接近的相等或更高的10倍中減去總和。最後,結果將是第8位數字(校驗位),因此程序應該輸出最終的條形碼。

如果用戶要驗證條形碼,程序應該要求用戶輸入一個八位代碼。然後它應該重複與上述三個和一個的乘法過程。那麼它應該增加全部計算出的數字了,如果結果是10的倍數,條形碼是有效的,它應該輸出信息給用戶稱GTIN-8是有效的。但是,如果它不是10的倍數,則條形碼無效,應該打印出錯誤。

無論如何,感謝您抽出時間來閱讀這一點,任何幫助將不勝感激。

回答

0

這裏是解決你的generatevalidate功能:

def generate(arg=''): 
    GTIN = arg 
    if arg == '': 
     GTIN=(input("Enter a 7 digit GTIN number: ")) 
    if(len(GTIN)==7): 
     G1=int(GTIN[0]) 
     G2=int(GTIN[1]) 
     G3=int(GTIN[2]) 
     G4=int(GTIN[3]) 
     G5=int(GTIN[4]) 
     G6=int(GTIN[5]) 
     G7=int(GTIN[6]) 
     GTINT=int(G1*3+G2+G3*3+G4+G5*3+G6+G7*3) 
     roundup=round(GTINT, -1) 
     GTIN8 = int(roundup - GTINT) % 10 
     if arg == '': 
      print(arg) 
      print("Your full GTIN-8 code is: "+str(GTIN)+str(GTIN8)) 
     return GTIN8 
    else: 
     print("Nope") 

def validate(): 
    GTIN=(input("Enter an 8 digit GTIN number: ")) 
    GTIN8 = generate(GTIN[0:7]) 
    if str(GTIN8) == GTIN[7]: 
     print("Your code is valid") 
    else: 
     print("Your code is invalid") 

validate功能只需使用generate功能如果生成的8號匹配傳入8號創建的第8號,然後檢查。

2

除了雙刃大砍刀的答案,你的主菜單中用戶輸入應該是在while循環:

def mainmenu(): 
    while True: #loops over and over again 
     print("1. Generate a barcode") 
     print("2. Validate a barcode") 
     print("3. Quit") # prints out 3 options for the user to select 
     selection=int(input("Enter choice: ")) #tells user to enter a choice 
     if selection==1: 
      generate() #calls the function 
     elif selection==2: 
      validate() 
     elif selection==3: 
      break 
     else: 
      print("Invalid choice. Enter 1-3") 

這樣,當生成和驗證函數返回時,它每次都會重新顯示主菜單。而且你不會遇到遞歸調用你自己的函數的問題。

我也勸你不要把剛纔複製/粘貼代碼,你找到關於網上。你不會從中學到任何東西。確保你瞭解提供給你的答案以及他們的工作方式。讓事情工作與理解爲什麼工作不一樣。