Cynder
Cynder

Reputation: 21

Adding sums in a loop while also using the def function

I am working on a function that sums up the amount of positive and negative numbers a user inputs. It has to be in a loop and has to have two functions(on for pos, one for neg) to return True or False. I have tried everything and am so lost and don't even know where to start anymore. This is what I have so far:

pos = 0
neg = 0 
num = int(input("Please enter a positive or negative number. Or 0 to quit"))

while num > -100 or num < 100:
    num = int(input("Please enter a positive or negative number. Or 0 to quit"))

if num > 100 or num < -100:
    print("Please only enter integers between -100 to 100")
    num = int(input("Please enter a positive or negative number. Or 0 to quit"))

elif num == 0:
    print("Here is your summary: ")
    print("You entered: ", pos, "positives number(s) and", neg, "negative number(s)")
    

def if_positive(pos):
    if num > 0: 
        pos = pos + 1

def if_negative(neg):
    if num < 0:
        neg = neg + 1

if_positive(pos)
if_negative(neg)

Every time I try something, I get one part correct and then the other wrong. Python for Everybody hasn't helped at all and I've done hours of research and nothing helps. Please help me. Every time I post a question on here it gets removed! I have no idea what I'm doing wrong, I am just trying to ask a simple question :( So I will try for the third time!

Upvotes: 1

Views: 226

Answers (2)

paxton4416
paxton4416

Reputation: 565

If I had to guess, I'd say your questions are being removed because they sound like school assignments, and people tend to sour a little at the idea of people going to StackOverflow to have others do their homework for them. That said, it seems to me like you've put in a good-faith effort based on what you've already written, and there's nothing wrong with asking for help when you don't understand something after trying to figure it out yourself.

Try this:

def is_positive(number):
    """
    This could be shortened to simply:
    `return number > 0`
    """
    if number > 0:
        return True
    else:
        return False


def is_negative(number):
    """
    Similarly, this could be shortened to:
    `return number < 0`
    """
    if number < 0:
        return True
    else:
        return False


n_positive = 0
n_negative = 0

while True:
    num_entered = int(input("Please enter a positive or negative number. Or 0 to quit"))
    if not -100 < num_entered < 100:
        print("Please only enter integers between -100 to 100")
    elif is_positive(num_entered):
        # this is a shortcut for `n_positive = n_positive + 1`
        n_positive += 1    
    elif is_negative(num_entered):
        n_negative += 1
    else:
        break
        
print("Here is your summary:")
# this is equivalent to what you had in your question, but uses "f-strings", 
# which were implemented in Python 3.6 and are super convenient
print(f"You entered {n_positive} positive number(s) and {n_negative} negative number(s)")

A few extra notes you might find helpful:

  • if not -100 < num_entered < 100: is equivalent to if num > 100 or num < -100:, but just a cleaner way of writing it
  • while True is an idiom in Python that essentially means "keep looping forever until I break out of it or exit the program." From the code you had written, it seems like you want to keep allowing the user to input numbers until they enter "0 to quit". That's the condition upon which you want to break out of the loop.
  • "def" itself isn't a function -- def is a keyword that defines a function, which is a snippet of code that performs a single task that can be re-used later. You said your two functions needed to return True or False. In Python, the return keyword causes a function to exit and "return" the value specified.
    • This is why you're able to use those pre-defined functions directly in the the if and elif statements later. You can think of the way "if" works as taking the code between if and : and evaluating it. If it evaluates to True, then the block of code inside (i.e., indented under) the if statement is executed and any elif or else statements you may or may not have after that are skipped. Or, if it evaluates to False, then Python "moves on," and if you have an elif statement after the if, it repeats the same process there. Finally, if neither or if or elif blocks evaluate to True and you have an else block, that code is run.

      This is a very long way of saying that in your case, the logical flow is: "if the number isn't between -100 and 100, remind the user of the acceptable range of values. Otherwise, if the number is_positive, add 1 to the running count of positive numbers entered. Or, if the number is_negative, add 1 to the count of negative numbers. Otherwise, the only remaining possibility is that the number is 0, so the user is finished entering numbers and we should break out of the loop and show them their summary.

Hope this helps! Feel free to comment with any other questions you have.

Upvotes: 1

Sivaram Rasathurai
Sivaram Rasathurai

Reputation: 6363

Lets do it as follow Lets have while loop then if the num is zero just break it otherwise check the conditions I have added two lists but if you just count how many numbers positive and negative then you don't need lists you can use integer count variables


postive_numbers =[]
negative_numbers =[]
while True:
    num = int(input("Please enter a positive or negative number. Or 0 to quit\n Enter the number: "))
    if num>100 or num < -100:
        print("Please only enter integers between -100 to 100")
        continue
    if num == 0:
        print("Here is your summary:\n ")
        print("You entered: \npositives number(s) {} \nnegative number(s){} ".format(len(postive_numbers),len(negative_numbers)))
        break
    elif num< 0:
        negative_numbers.append(num)
        
    else:
        postive_numbers.append(num)
        

Upvotes: 1

Related Questions