2016-11-28 193 views
0

這是我的GTIN-8號發電機隨機數生成器和驗證

barcode = [] 
inputChoice = 0 
inputChoice = 1 
checkNumber = 0 
placeHolder = 0 

def generate(): 
    generate = 0 
    for i in str(Userinput): 
     barcode.append(int(i)) 
    print(barcode) 
    for i in range (0,6,2): 
     generate += barcode[i] *3 
     print('Generate is now ',generate) 
    print(generate) 

def checkNumber(): 
    for i in str(Userinput): 
     checkNumber += int(i) 
     placeHolder += int(i) 
    checkNumber = round(checkNumber, -1) 
    checkNumber = (checkNumber - placeHolder) % 10 
    return(checkNumber) 

def check(): 
    jk = 0 

def main(): 
    inputChoice=0 
    while inputChoice !=9 and inputChoice !=1 and inputChoice!=2: 
     inputChoice=int(input("chose 1 to get GTIN,2 to check,9 to exit\n")) 
     Userinput = (input("input the barcode \n")) 
    if inputChoice==1 : 
     if len(Userinput) !=7: 
      print("make sure you inputted 7 inegers") 
    if inputChoice == 2: 
     if len(Userinput) !=8: 
      print("Make sure you input 8 integers") 
    else: 
      generate(Userinput) 
    return(Userinput) 

Userinput = main() 
generate() 
checkNumber() 

我已經做了函數調用的支票號碼,生成和主要但是當我運行一個代碼,它給了我這個錯誤代碼:

TypeError: generate() takes 0 positional arguments but 1 was given

我不清楚爲什麼是這樣的情況下,JK = 0有,因爲我還沒有完成該功能,我只是用它作爲一個佔位符。

+0

在'main'函數的'else'塊中,您將'Userinput'作爲參數調用'generate'。你的函數被聲明爲不帶任何參數。 – JCVanHamme

+0

我沒有檢查每一件事情,但至少你在'main()'函數的最後'else'中調用'generate(Userinput)'。 –

+0

那麼我需要做什麼來糾正這 – aadoma123

回答

1

加入* ARGS後工作正常,甚至比我們的

UnboundLocalError: local variable 'checkNumber' referenced before assignment 

所以checkNumber()

def generate(*args): #<<<< edit 
    generate = 0 
    for i in str(Userinput): 
     barcode.append(int(i)) 
    print(barcode) 
    for i in range (0,6,2): 
     generate += barcode[i] *3 
     print('Generate is now ',generate) 
    print(generate) 

def checkNumber(checkNumber=0, placeHolder=0): #<<<< edit 
    for i in str(Userinput): 
     checkNumber += int(i) 
     placeHolder += int(i) 
    checkNumber = round(checkNumber, -1) 
    checkNumber = (checkNumber - placeHolder) % 10 
    return(checkNumber) 

的標誌,其作品finaly與1515155155151條形碼導致添加默認ARGS:

chose 1 to get GTIN,2 to check,9 to exit 
2 
input the barcode 
1515155155151 
Make sure you input 8 integers 
[1, 5, 1, 5, 1, 5, 5, 1, 5, 5, 1, 5, 1] 
Generate is now 3 
Generate is now 6 
Generate is now 9 
9 
+0

愚蠢的問題,但什麼是參數無關我只是GOOGLE和它的參數 – aadoma123

+0

@ aadoma123「參數」又名爲您的功能輸入 – Lost

+1

@ aadoma123我想你應該看看http ://www.learnpython.org/en/Multiple_Function_Arguments –

0

好的,你要求反饋意見,所以在這裏我們去...

點#1:當你不需要它們時不使用全局變量。提示:你可以編寫巨大的(10 + klocs)程序,而不需要一個全局變量(談論在執行期間修改或重新分配的全局變量 - 僞常量等)。實際上,這從編寫純函數開始 - 函數需要參數,返回結果,並且同一組參數總是會產生相同的結果

點#2:尊重語言通常的編碼約定(參見Python的pep8

要點三:學習語言的成語 - 在你的榜樣,

  • 使用str.format()
  • 使用列表解析或發電機表達式代替for循環下才有的某種意義上說,
  • 一個main()功能是真的一個main功能,並通過if __name__ == "__main__":檢查守衛)

這裏是你的代碼可能是什麼樣子,一旦這些點是固定的例子:

def generate(source): 
    barcode = [int(c) for c in source] 
    result = sum(barcode[i] * 3 for i in range(0, 6, 2)) 
    return result, barcode 

def check_number(source): 
    placeholder = checksum = sum(int(i) for i in source) 
    checksum = round(checksum, -1) 
    checksum = (checksum - placeholder) % 10 
    return checksum 

def check(what): 
    jk = 0 


def main(): 
    choice = 0 
    while True: 
     choice = input("chose 1 to get GTIN, 2 to check, 9 to exit\n").strip() 
     try: 
      choice = int(choice) 
      if choice not in (1, 2, 9): 
       raise ValueError 
     except ValueError: 
      print("Invalid value '{}'".format(choice)) 
      continue 

     if choice == 9: 
      return 

     while True: 
      source = input("input the barcode \n").strip() 
      # source should contain only digits 
      try: 
       int(source) 
      except ValueError: 
       print("Make sure you entered only integers") 
       continue 

      if choice == 1 and len(source) != 7: 
       print("Make sure you entered 7 integers") 
       continue 
      elif choice == 2 and len(source) != 8: 
       print("Make sure you entered 8 integers") 
       continue 
      else: 
       # ok, valid input 
       break 

     if choice == 1: 
      result, barcode = generate(source) 
      print("barcode : {}.".format(barcode)) 
      print("result : {}".format(result)) 

     elif choice == 2: 
      raise NotImplementedError("check is not yet implemented") 

if __name__ == "__main__": 
    main() 
+0

非常感謝你的幫助,現在當我運行代碼時出現這個錯誤,File「C:/ Users/... /Desktop/sure.py「,第59行,在 main() 文件」C:/ Users /.../ Desktop/sure。py「,第19行,主 choice = input(」選擇1獲取GTIN,2檢查,9退出\ n「)strip() AttributeError:'int'對象沒有屬性'strip' – aadoma123

+0

即時通訊使用Python 2.7.12,如果有幫助 – aadoma123