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!')