# It seems like there is a problem running Pythonista 3 def in iOS12.1 public beta2 browsing

• posted
0

The problem is when I code on my Mac, the codes can run. However, when I use the same code script in the pythonista 3, it can not run, which said that something takes n positional arguments, but n+1 were given.
I don not know whether this is the bug in pythonista3 or not?

``````def QFY(x,a,b,c):
y=a*x**2+b*x+c
print('the y is',y)

def QFX(y,a,b,c):
delta=b**2-4*a*(c-y)
if delta<0:
print('the function does not exist.')
if delta==0:
x=-b/2
print('the x is',x)
else:
x1=x=(-b+(delta**(1/2)))/(2*a)
x2=x=(-b-(delta**(1/2)))/(2*a)
print('x1 is',x1)
print('x2 is',x2)

def QFA(x,y,b,c):
if x==0:
print('the function is a line:')
else:
a=(y-b*x-c)/x**2
print('the a is',a)

def QFB(x,y,a,c):
if x==0:
print('the function is a line:')
else:
b=(y-a*x**2-c)/x
print('the b is',b)

def QFC(x,y,a,b):
c=y-a*x**2-b*x
print('the c is',c)
``````

When I ran this code in pythonista3, I received the following sentences:

q.QFY(1,2,3,4)
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: QFY() takes 4 positional arguments but 5 were given

• posted
0

@BarryZ you have to write

``````def QFY(self,x,a,b,c):
``````

• posted
0

@cvp Thanks! It works! I am a beginner of python. Could you tell me why there must be self? When I code on my Mac, it could run without self, but when I code in pythonista3 on my phone, it must run with writing self.why? Look forward to your replying.

• posted
0

@BarryZ I never could better explain than a lot of web sites you can find with Google « python self »...

• posted
0

@BarryZ Are you sure that you're running exactly the same code on your Mac and in Pythonista, especially the part that you type into the Python console? There is an important difference between `q = Quadratic_Functions_4_1` and `q = Quadratic_Functions_4_1()` (note the parentheses at the end).

Also, it looks like you might not need to use a class here at all. Your current code would work just fine if you move the functions out of the class, then you can use `QFY(1, 2, 3, 4)` directly (without `q` before it).

• posted
0

@dgelessus Thanks for your suggestions. yeah, I am sure. On my Mac, I use python 3.7.x to code. I don’t know why.

• posted
0

@cvp Thanks!

• posted
0

@BarryZ If you write so, it works... Perhaps your Python on Mac has this @staticmethod parameter as default?

``````class Quadratic_Functions_4_1:
@staticmethod
def QFY(x,a,b,c):
y=a*x**2+b*x+c
print('the y is',y)
``````

• posted
0

@cvp There is no @staticmethod.

On my Mac:

def QFY(x,a,b,c):
y=ax2+bx+c
print('the y is',y)

Run on my Mac:

Q.QFY(1,4,8,10)
the y is 22

• posted
0

@BarryZ I understand, what I wanted to say is that the Python you use on your Mac perhaps defines the class methods as static by default...

• posted
0

@cvp Besides, when I code like this:
def qfx(self,y,a,b,c):
delta=b2-4a(c-y)
if delta==0:
x=-b/2a
print('the x is',x)
if delta<0:
print('there is no solution for x.')
else:
x1=x=(-b+delta
(1/2))/(2a)
x2=x=(-b-delta**(1/2))/(2*a)
print('x1 is',x1)
print('x2 is',x2)

When I run it on my Mac and pythonista3:

q.qfx(1,4,8,10)
there is no solution for x.

It works.

Or when I code like this:
def qfx(y,a,b,c):
delta=b2-4a(c-y)
if delta==0:
x=-b/2a
print('the x is',x)
if delta<0:
print('there is no solution for x.')
else:
x1=x=(-b+delta
(1/2))/(2a)
x2=x=(-b-delta**(1/2))/(2*a)
print('x1 is',x1)
print('x2 is',x2)

When I run it on my Mac and pythonista3:

q.qfx(1,4,8,10)
there is no solution for x

It works.

• posted
0

@BarryZ That's normal. if you use an instance of the class (with parentheses), you need to have the word "self". But without parentheses, you use it as a class, thus no "self" needed.
I think I can't help you more, I'm not a Python specialist but in this forum I'm sure other guys could help you.

• posted
0

@cvp Thanks! You have already helped me a lot! I will search it on the internet to figure it out.

• posted
0

@BarryZ Perhaps does your Python interpreter recognize that these methods do not use any variables of the class it-self, nor the instance (self) thus could automatically consider the method as static...

• posted
0

This post is deleted!

• posted
0

The difference is that in one case you are instantiating an object.

``````q=quadratic_function()
``````

In the other case, you are referring to the class:

``````q=quadratic_function
``````

These are two completely different things. The first creates an instance, and binds the instance to the first argument, thus requires `self` as first argument. The second does not, so does not need a `self`.

• posted
0

@JonB Yes, I know but that doesn't explain the difference between Pythonista and his Mac

• posted
0

my guess is copy paste error -- the original probably did not have the parens.

what version of python are you running on the mac?
are you using the console, or executing a file?
are you using jupyter or IPython or some other nonstandard interpreter?

The only other thought... since your class does not inherit from object, on 2.x this will be an "old style class", so might behave a little differently. But I think even old style classes would have bound instances to their methods.

Internal error.

Oops! Looks like something went wrong!