如何在此程序中实现范围函数



我正在制作一个程序,让学生在每个学年结束时预测自己的进步。

表1:大学规定的进步结果。各级信贷额度第一个数字是通过第二位是"延时"第三位是失败

我已经在我的程序中实现了这一点。然而,我被要求在程序中实现一个范围函数,所以如果有人输入了0、20、40、60、80100和120以外的值,他们应该会得到一个错误,说"不在范围内",并再次要求他们再次输入数字。

打印("欢迎使用威斯敏斯特大学成绩计算器"(

while True:
passCR = input("Enter your pass credits")
if passCR.isdigit():
passCR = int(passCR)
break
else:
print("Not an integer Value!try again")
while True:
deferCR = input("Enter your defer credits")
if deferCR.isdigit():
deferCR = int(deferCR)
break
else:
print("Not an integer Value!try again")
while True:
failCR = input("Enter your fail credits")
if failCR.isdigit():
failCR = int(failCR)
break
else:
print("Not an integer Value!try again")
def input_valid_number(which="pass"):
while True:
n = input("enter your {} credits: ".format(which))
try:
n = int(n)
if 0 <= n <= 120 and (n % 20) == 0:
return n
except:
pass
while True:
passCR = input_valid_number("pass")
deferCR = input_valid_number("defer")
failCR = input_valid_number("fail")
if sum([passCR, deferCR, failCR]) == 120:
break
print("Your Total Credits do not add up to 120. Please try again!")
if passCR == 120 and deferCR == 0 and failCR== 0:    #1
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("progress")   
elif passCR == 100 and deferCR == 20 and failCR== 0: #2
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("progress - module trailer")
elif passCR == 100 and deferCR == 0 and failCR== 20: #3
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("progress - module trailer")
elif passCR == 80 and deferCR == 40 and failCR== 0: #4
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 80 and deferCR == 20 and failCR== 20: #5
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 80 and deferCR == 0 and failCR== 40: #6
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 60 and deferCR == 60 and failCR== 0: #7
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 60 and deferCR == 40 and failCR== 20: #8
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 60 and deferCR == 20 and failCR== 40: #9
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 60 and deferCR == 0 and failCR== 60: #10
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 40 and deferCR == 80 and failCR== 0: #11
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 40 and deferCR == 60 and failCR== 20: #12
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 40 and deferCR == 40 and failCR== 40: #13
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 40 and deferCR == 20 and failCR== 60: #14
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 40 and deferCR == 0 and failCR== 80: #15
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Exclude")
elif passCR == 20 and deferCR == 100 and failCR== 0: #16
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 20 and deferCR == 80 and failCR== 20: #17
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 20 and deferCR == 60 and failCR== 40: #18
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 20 and deferCR == 40 and failCR== 60: #19
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 20 and deferCR == 20 and failCR== 80: #20
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Exclude")
elif passCR == 20 and deferCR == 0 and failCR== 100: #21
print("Exclude",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 0 and deferCR == 120 and failCR== 0: #22
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 0 and deferCR == 100 and failCR== 20: #23
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 0 and deferCR == 80 and failCR== 40: #24
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 0 and deferCR == 60 and failCR== 60: #25
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Do not progress - module trailer")
elif passCR == 0 and deferCR == 40 and failCR== 80: #26
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Exclude")
elif passCR == 0 and deferCR == 20 and failCR== 100: #27
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Exclude")
elif passCR == 0 and deferCR == 0 and failCR== 120: #28
print("Your pass, defer and fail credits are",passCR, deferCR, failCR)
print ("Exclude")

1-如何实现只允许用户输入0,20,40,80100120的范围函数?

2-程序还应该让用户知道,如果通过、推迟和失败的总和不是120,那么他们应该得到一条消息"完全不正确"。然后重新运行相同的问题。

附言:为了更清晰的图像,我在下面附上了我的程序的图像。

https://i.stack.imgur.com/ikSlq.jpghttps://i.stack.imgur.com/Kdw8N.jpg

对于第1部分,一个简单的func可以测试输入值是否存在于两个结束值之间,并且是20的倍数。"mod"函数适用于多部分

def input_valid_number(which="pass"):
while True:
n = input("Enter your {} credits: ".format(which)).strip()
if n.isdigit():
n = int(n)
if 0 <= n <= 120 and (n % 20) == 0:
return n
else:
print("Invalid Selection. Please enter 0, 20, 40, 60, 80, 100, or 120!")
else:
print("Not an Integer Value. Please try again!")

对于第2部分,下面的内容应该能起到作用。。。

while True:
passCR = input_valid_number("pass")
deferCR = input_valid_number("defer")
failCR = input_valid_number("fail")
if sum([passCR, deferCR, failCR]) == 120:
break
print("Your Total Credits do not add up to 120. Please try again!")

做同样的westminster uni任务,但我这么晚了,只检查通行证的学分数量会更有效,因为无论其他数字如何,通行证学分都是决定性的。例如,所有通过信用100的组合都将其结果作为"进度模块尾部">

最新更新