[英]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.