C50 学分-Python

问题描述 投票:0回答:1

请注意,我是一个非常困惑的初学者,但我很喜欢这门课程并且渴望学习。 下面是我的代码,我想了解一些事情:

  1. 为什么如果我定义 main ,我会收到多个错误,例如:“名称'card'未定义”,而如果我不定义 main ,一切都会顺利进行?

  2. 我复制了 split_to_digits 函数,据我所知,我假设它返回一个列表,所以我试图循环遍历列表“everyotherdig”来对数字求和,但如果我尝试打印总和,它会显示“内置函数 sum” ”

  3. 我肯定犯过的任何其他错误,如果您愿意向我解释,我将非常感激。


        # get user input 
     
        while True:

          try:
           
            card = int(input("Credit card number:"))''
           
            if card > 0:''
               break
            except ValueError:
             print("INVALID")
    
         #Convert card back into a string
      
       card = str(card)
    
       if len(card) not in (13,15,16):
          
         print("INVALID")
    
       #Store valid prefixes into a tuple
    
       prefixes = ["4","34","37","50","51","52","53","54","55"]
    
       #Check if user input is valid
    
       x = card.startswith(tuple(prefixes))
    
       if x == False:
       
          print("INVALID")
    
       def split_to_digits(card):
    
           return [int(i) for i in str(card)]


       #Store every other digit into a list
    
       everyotherdig = split_to_digits(card[-2::-2])
    
       allotherdig = split_to_digits(card[-1::-2])


       #Loop through string to apply Luhn's algorith
    
       for i in everyotherdig:
          
         if everyotherdig[i] > 5:
             
            sum = split_to_digits(everyotherdig[i]) * 2
          
         else:
             
            sum1 = everyotherdig[i] *2


    print(f"{sum}")


我成功地获取了用户输入并获取了我需要的卡号。 现在我需要应用Luhn算法来计算卡号是否有效。 为此,我需要将每个其他数字乘以 2,从数字的倒数第二个数字开始,然后将这些产品的数字加在一起。 将总和与未乘以 2 的数字之和相加。

python cs50 credit-card
1个回答
0
投票

为什么如果我定义 main ,我会收到多个错误,例如:“名称'card'未定义”

这听起来像是一个常规的全局局部变量错误。在Python中,除非你说一个变量是全局的,否则当你设置一个变量时,Python会假设它是局部的,并且不在函数中定义它会导致“未定义”问题。要将函数声明为全局函数,您可以使用

  global variableName

在函数内部。

© www.soinside.com 2019 - 2024. All rights reserved.