简体   繁体   中英

how to properly write multiple if statements

trying to condense if statements and want to know if there is a proper why of writing this. Also this is my first post as well as being new to programming

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: "))

First, you should review the logic to get marks: in your case, it prompts once, and if the entered mark is outside the range, it prompts again. However, if an invalid value is entered at the second time of asking, it simply accepts that value. Instead, you should use a while loop so that it keeps asking until a valid value is returned. You also probably want to account for the case where the entered number is not an integer. You can do this by trying to cast it to an int() and then catching the resulting ValueError .

Now, repeated code can be wrapped in a function, and then you just call that 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()

Then, do

mark1 = get_mark("Enter mark 1: ")
mark2 = get_mark("Enter mark 2: ")
...

To add to @Pranav Hosangadi's answer , repeated tasks should be run in a loop. If you find yourself naming many variables like marks0 , marks1 , etc, you should probably have a list called marks and access it as marks[0] , marks[1] , etc:

marks = []
for i in range(5):
    while True:
        mark = int(input(f"Enter mark {i + 1}: "))
        if 0 <= mark <= 100:
            break
    marks.append(mark)

If you use Pranav's function to replace the inner while loop, you can use a list comprehension:

marks = [get_mark(f'Enter mark {i + 1}: ') for i in range(5)]

sounds like you can store the values to a list of numbers; and you can use the try/except structure to catch that.

Since you want to handle the case where a user provides an input that is not a number(or within the range you have specified); I presume that you want to handle this as "ignore," show your help function's syntax and keep querying until they have filled in the appropriate number of items you originally requested?

 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()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM