【问题标题】:User input list,then adding the numbers to calculate ISBN check digit用户输入列表,然后将数字相加计算ISBN校验位
【发布时间】:2018-10-14 17:28:41
【问题描述】:
print("""Hi, and welcome to \"GENERATE A CHECK DIGIT \" """)

num1 =input("Enter a 12 digit ISBN number and I will output your check digit:  ")
oddTotal=int(num1[0])+int(num1[2])+int(num1[4])+int(num1[6])+int(num1[8])+int(num1[10])
evenTotal=int(num1[1])+int(num1[3])+int(num1[5])+int(num1[7])+int(num1[9])+int(num1[11])
Total=oddTotal+(evenTotal*3)
checkDigit=10-(Total%10)

print("For the given ISBN: "  + str(num1)+ " The Check digit should be: " + str(checkDigit))
print("Complete ISBN 13 CODE = " +str(num1)+str(checkDigit))

我的问题:我在每个列表项之前都添加了“int”,但发现这有点乏味。我尝试将它放在主括号之前的开头,但它没有用。

有没有办法改进这段代码。

【问题讨论】:

    标签: python string input


    【解决方案1】:

    您可以将summap 和字符串切片一起使用:

    num1 = input("Enter a 12 digit ISBN number and I will output your check digit:  ")
    oddTotal = sum(map(int, num1[::2]))
    evenTotal = sum(map(int, num1[1::2]))
    

    字符串切片的语法类似于列表切片,即格式为start:end:step

    【讨论】:

      【解决方案2】:

      您可以使用列表推导将字符串 num1 的所有元素转换为整数,然后使用列表切片来计算两个总和:

      num1 = input("Enter a 12 digit ISBN number and I will output your check digit:  ")
      nums = [int(num) for num in num1]
      oddTotal = sum(nums[::2])
      evenTotal= sum(nums[1::2])
      

      【讨论】:

      • 我已经尝试过了,它确实有效。它肯定看起来更整洁。谢谢您能否分享一些时间并准确解释以下几行中发生的事情 nums = [int(num) for num in num1]oddTotal = sum(nums[::2]) ( :: 表示什么和“ 2") evenTotal= sum(nums[1::2]) (这里也一样)
      • 第二行是所谓的列表推导,它只是for 循环的简写,例如here。对于列表切片语法([::2]),可以在 StackOverflow 上的这个问题的答案中找到很好的解释:stackoverflow.com/questions/509211/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多