将输入转换为用于求和的列表



问题是:

编写一个python函数is_valid,用于检查如果输入是有效的学生id号。有效的学生身份证在1000-6999之间他们的数字应该是可整除的到7。如果id号有效,则返回True,否则返回错误。

此代码返回一个未定义的错误。我尝试了很多方法来修复然而,我认为这个问题没有任何效果。

def is_valid():
ID=input ("Enter ID number:")
if ID in range(1000,6999):
ID= [[i for i in ID]for ID in input().split()]
sum [ID]
if sum [ID]%2==0:
print (True)
else:
False

我第一眼就看到缩进不正确,你把输入中的数字作为字符串,然后把它与一个范围匹配,而不把它转换成int。还有很多错误,所以我只是为你写了一个新代码。试试看。

# is_valid function taking ID as an argument
def is_valid(ID):
#checking the range after changing it to int()
if int(ID) in range(1000, 7000):
#adding all the digits in a string
digits = list(ID)
#adding the digits after mapping them to int()
sum_of_digits = sum(list(map(int, digits)))
if sum_of_digits%7==0:
#returning true if the sum is divisible by 7
return True
return False
print(is_valid(input()))

首先,错误不是未定义的。您得到NameError: name 'ID' is not defined.是因为缩进不正确。您的程序不知道变量ID,因为if-块在函数之外。

那么,1000-6999的正确范围是range(1000,7000)

input返回字符串,而range(x)是包含整数的范围生成器。

因此,您必须将ID解析为int,以检查它是否在该范围内。

input().split()请求新的输入。不明白为什么会在这里。

如果你想手动输入每个ID,这将是一个正确的答案:

def is_valid():
ID = input("Enter ID number: ")
if int(ID) in range(1000,7000):
digits = [int(i) for i in ID]
if sum(digits) % 7 == 0:
return True
return False
print(is_valid())

您的代码有很多问题。首先,代码的格式不正确,缩进没有遵循代码的级别。所有代码都应该从函数声明缩进。

第二,Input返回一个字符串,而不是整数,所以你不能像这里那样将其与一个整数范围进行比较。此外,该范围不包括第二个数字,所以你必须将其更改为7000:

if ID in range(1000,6999):

您可以使用map函数返回各个数字。

DIGITS = []
# append each digit to list
for digit in map(int, ID):
DIGITS.append(digit)

最后,你可以检查数字的总和,看看它们是否可以被7个整除

# Check if sum of digits is divisible by seven
if sum(DIGITS) % 7 == 0:
print(True)
# Not divisible by 7
else:
print(False)

这是完整的代码:

def is_valid():
# Obtain ID Number
ID = input("Enter ID number:")
if int(ID) in range(1000, 7000):
# List for individual digit in input
DIGITS = []
# append each digit to list
for digit in map(int, ID):
DIGITS.append(digit)
# Check if sum of digits is divisible by seven
if sum(DIGITS) % 7 == 0:
print(True)
# Not divisible by 7
else:
print(False)
# Not between 1000 inclusive and 7000 exclusive
else:
print(False)
is_valid()

最新更新