Just started learning python, so I’m very thankful for anyone who can help.

Anyways the task is to define a function that takes a list of numbers and returns 3 values – how many positive numbers, negative numbers and zeroes there are in the list.

The main program I need to use a loop that gets the user to input however many numbers he wants (must be between 3 and 6, and this has to be checked). these numbers that the user inputs are to be added to a list. Then I have to call a function that uses the list as the argument and then print the results that the function returns.

using a loop is obligatory.

```
def three(z):
np = 0
nn = 0
zeroes = 0
for y in z:
if x<0:
nn+=1
if x>0:
np+=1
if x==0:
zeroes+=1
print('there are ', np, ' positive numbers\nthere are ', nn, ' negative numbers\nthere are ', zeroes, ' zeros')
return (np, nn, zeroes)
num_list = []
a = 0
n = eval(input('input a number (bigger than 3, smaller than 6): '))
while n>3 and n<6:
if a < n:
x = eval(input('input a number: '))
num_list.append(x)
a+= 1
else:
break
three(num_list)
```

I made a loop and a function, but I’m pretty sure I messed up at the loop or somewhere else because it looks like I’m using a lot of variables and it looks more complicated then it should probably be.

### >Solution :

First, you should avoid using `eval`

to get the numerical value of the user input. Ignatius Reilly left a good link to explain why in a comment. Instead, just cast the string input to int using `int(input(...))`

instead.

Second, the issue is that you are comparing `x`

to zero. `x`

is not defined in your function, so it looks outside the function scope and then pulls what you defined as `x`

there, which is the last user input from `x = eval(input(...))`

. So a user that inputs `-1, 2, 0, 4`

will return (4, 0, 0) because it just compares 4 to 0 four times rather than each individual input. You made a simple mistake here and should’ve used `y`

in your `if`

statements.