Home > Back-end >  Printing both outcomes of if statements
Printing both outcomes of if statements

Time:04-01

I am a complete beginner in python and was trying to write a simple programme for deciding if you were eligible for a loan or not but regardless of my inputs both of the outputs are printed, I think it is an issue with my if statements?

response1=input('Do you have a high income?  ').lower()
if response1== 'yes':
    high_income=True
elif response1== 'no':
    high_income=False
response2=input('Do you have good credit?  ').lower()
if response2=='yes':
    good_credit=True
elif response2=='no':
    good_credit=False

if high_income or good_credit:False
print ('Sorry, you are not eligable for a loan!')

if high_income and good_credit:True
print('Congratulations you are eligable for a loan!')

CodePudding user response:

When you put code immediately after :, it's treated as the body of the if statement. So your code is equivalent to:

if high_income or good_credit:
    False

print ('Sorry, you are not eligable for a loan!')

if high_income and good_credit:
    True

print('Congratulations you are eligable for a loan!')

As you can see, the print() statements are not controlled by the if conditions, so they're both printed unconditionally. The True and False lines don't actually do anything, but any expression is a valid statement.

What you want is:

if high_income and good_credit:
    print('Congratulations you are eligable for a loan!')
else:
    print('Sorry, you are not eligable for a loan!')

Note that I've also used else: rather than writing another if whose condition is the opposite of the first. This is less error-prone, since it can be confusing to invert complex conditions.

CodePudding user response:

Here's the syntax you wanted:

if not high_income or not good_credit:
    print ('Sorry, you are not eligable for a loan!')

if high_income and good_credit:
    print('Congratulations you are eligable for a loan!')

Of course, in this case the second if could be replaced by an else:, but this shows you the syntax.

Here's another hint. This:

if response1== 'yes':
    high_income=True
elif response1== 'no':
    high_income=False

can be replaced by:

high_income = response1 == 'yes'

As it is, your code will explode if the user answers anything other than "yes" or "no" (modulo case), because high_income will not be defined.

CodePudding user response:

Your code should look like this:

if not (high_income and good_credit):
    print('not eligible')
else:
    print('eligible')

Whenever code is in a block, it needs to be indented four spaces from the surrounding code. In addition, since your high_income and good_credit variables are booleans, you can simply use them without comparing them to True or False. And since there are only two options, whether they get the loan or not, you can use an if-else statement and remove the second condition.

CodePudding user response:

Python is an Object Oriented Language and we need to treat it as such whenever it's possible. Therefore, I believe it's important to provide a complete answer than focusing only on a simple indentation mistake.

First, we need to decompose the problem into smaller problems, that can be easier to solve.

In practice, your program asks a series of questions and given the answers, it provides a final answer.

So, let's create a Question object.

class Question:
    def __init__(self, question: str, score: int = 0):
        self.question = question.lower()
        self.score = score
    
    def ask(self):
        response = input(self.question)
        return response == 'yes'
    
    def get_score(self):
        return self.score if self.ask() else -self.score

This object not only asks the user a question, but also it gives a score according to the answer, which is very useful in our case.

Then we need to create an object that evaluates a series of the object Question and give a final result.

class Questionnaire:
    def __init__(self, threshold: int):
        self.threshold = threshold
        self.questions = []
    
    def add_question(self, question: LoanQuestion):
        self.questions.append(question)
    
    def run_questionnaire(self):
        total_score = sum([q.get_score() for q in self.questions])
        if total_score >= self.threshold:
            print('Congratulations you are eligable for a loan!')
        else:
            print('Sorry, you are not eligable for a loan!')

What's the result?

question_1 = Question('Do you have a high income?', score=5)
question_2 = Question('Do you have good credit?', score=5)
question_3 = Question('Do you like pineapple pizza?', score=0)

questionnaire = Questionnaire(threshold=10)

questionnaire.add_question(question_1)
questionnaire.add_question(question_2)
questionnaire.add_question(question_3)

questionnaire.run_questionnaire()

CodePudding user response:

You can use this. Print Congratulations only when both high income and high credit are true, otherwise print Sorry, not eligible.

response1=input('Do you have a high income?  ').lower()
if response1== 'yes':
    high_income=True
elif response1== 'no':
    high_income=False
response2=input('Do you have good credit?  ').lower()
if response2=='yes':
    good_credit=True
elif response2=='no':
    good_credit=False

if high_income and good_credit:
    print('Congratulations you are eligable for a loan!')
else:
    print ('Sorry, you are not eligable for a loan!')
  • Related