[英]how to properly write multiple if statements
试图压缩 if 语句并想知道是否有写这个的正确原因。 这也是我的第一篇文章,也是编程的新手
mark1 = int(input("Enter mark 1: "))
if mark1 < 0 or mark1 > 100:
help()
mark1 = input(1)
mark2 = int(input("Enter mark 2: "))
if mark2 < 0 or mark2 > 100:
help()
mark2 = int(input("Enter mark 2: "))
mark3 = int(input("Enter mark 3: "))
if mark3 < 0 or mark3 > 100:
help()
mark3 = int(input("Enter mark 3: "))
mark4 = int(input("Enter mark 4: "))
if mark4 < 0 or mark4 > 100:
help()
mark4 = int(input("Enter mark 4: "))
mark5 = int(input("Enter mark 5: "))
if mark5 < 0 or mark5 > 100:
help()
mark5 = int(input("Enter mark 5: "))
首先,您应该查看获取标记的逻辑:在您的情况下,它会提示一次,如果输入的标记超出范围,则会再次提示。 但是,如果在第二次询问时输入了无效值,它只会接受该值。 相反,您应该使用while
循环,以便它一直询问直到返回有效值。 您可能还想考虑输入的数字不是integer 的情况。您可以通过尝试将其转换为int()
然后捕获生成的ValueError
来做到这一点。
现在,重复的代码可以包装在 function 中,然后您只需调用该 function:
def get_mark(prompt):
while True:
m = input(prompt)
try:
m = int(m)
except ValueError:
print("Please enter an integer")
continue # skip the rest of the loop and prompt for input again
if 0 <= m <= 100: # If it's a valid mark, we return it
return m
help() # If we haven't returned so far, it was an invalid mark so we call help()
然后做
mark1 = get_mark("Enter mark 1: ")
mark2 = get_mark("Enter mark 2: ")
...
要添加到@Pranav Hosangadi 的答案,重复的任务应该循环运行。 如果您发现自己命名了许多变量,如marks0
、 marks1
等,您可能应该有一个名为marks
的列表,并以marks[0]
、 marks[1]
等方式访问它:
marks = []
for i in range(5):
while True:
mark = int(input(f"Enter mark {i + 1}: "))
if 0 <= mark <= 100:
break
marks.append(mark)
如果使用 Pranav 的 function 来替换内部while
循环,则可以使用列表理解:
marks = [get_mark(f'Enter mark {i + 1}: ') for i in range(5)]
听起来您可以将值存储到数字列表中; 您可以使用 try/except 结构来捕获它。
由于您想处理用户提供的输入不是数字(或在您指定的范围内)的情况; 我假设您想将其处理为“忽略”,显示您的帮助函数的语法并继续查询,直到他们填写了您最初请求的适当数量的项目?
def help():
print('please enter a number between 0 & 100')
numOfElements = 5
mark = []
elementNumber=0
while elementNumber < numOfElements:
try:
value=int(input("Enter mark " + str(elementNumber+1) + ":"))
if(0<value<100):
mark.append(value)
elementNumber+=1
else:
help()
except ValueError:
help()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.