Seite 1 von 1

IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 11:29
von Joranes
Hallo zusammen,
Ich hoffe die Frage passt hier rein ansonsten Entschuldigung. Momentan nutze ich folgende App : https://play.google.com/store/apps/deta ... c.pydroid3 um unterwegs Python zu üben und zu programmieren, die app läuft meist auch ohne Probleme nur habe ich jetzt wo ich mich mit OOP beschäftigte folge Fehlermeldung.:

Code: Alles auswählen

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
    start(fakepyfile,mainpyfile)
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
    exec(open(mainpyfile).read(),  __main__.__dict__)
  File "<string>", line 6, in <module>
IndexError: list index out of range

[Program finished]
Ausführen sollte er folgendes Programm :

Code: Alles auswählen

 
class Roboter:

	def __init__ (self, name, baujahr):
		self.name = name
		self.baujahr = baujahr
		
	def SagHallo(self):
#		print("Hallo, mein Name ist " + self.name)
		pass
	
	def SetzeNamen(self, name):
		self.name = name
		
	def HoleNamen(self):
        return self.name
       
	def SetzeBaujahr(self, baujahr):
		self.baujahr = baujahr
		
	def HoleBaujahr (self)
		return self.baujahr
		
if __name__ == "__main__":
	x = Roboter ("Bob", 2000)
	y = Roboter ("Bill", 1992)
	for rob in [x, y]:
        rob.SageHallo()
        print("Ich bin " + rob.HoleName () + " und bin " + rob.HoleBaujahr () + " erschaffen worden! ")
Und das ist die Datei die meinen Code nicht akzeptiert :

Code: Alles auswählen

# Earlier it was named "hackrun" because it is full of hacky code.
# Some dudes didn't get it tho, so we had to rename it. Hopefully they are happy now.
import os
import sys
is_pydroid_2 = sys.version_info.major == 2
mainpyfile = sys.argv[1]
del sys.argv[0]
fakepyfile = os.getenv("ANDROID_ORIGFNAME",mainpyfile)
sys.path[0] = os.path.dirname(fakepyfile)
sys.argv[0] = fakepyfile

def start(fakepyfile,mainpyfile):
	if(is_pydroid_2):
		import __main__
		tmp=__main__.__builtins__
		__main__.__dict__.clear()
		__main__.__dict__.update({"__name__"    : "__main__",
					  "__file__"    : fakepyfile,
					  "__builtins__": tmp,
					 })
		execfile(mainpyfile,  __main__.__dict__)
	else:
		import __main__
		tmp=__main__.__builtins__
		__main__.__dict__.clear()
		__main__.__dict__.update({"__name__"    : "__main__",
					  "__file__"    : fakepyfile,
					  "__builtins__": tmp,
					 })
		exec(open(mainpyfile).read(),  __main__.__dict__)
start(fakepyfile,mainpyfile)
Am PC läuft das Programm durch ohne Fehler, wollte jetzt fragen ob jemand weiß wo ich einen Fehler habe oder wie ich denn Fehler beheben kann ? . Bin selbst noch ein Laie was Python angeht und mit meinem Latein am Ende , Wenn jemand sonst eine Alternative IDE für Android Handys hat würde ich mich auch über Vorschläge freuen.

MFG

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 13:39
von Sirius3
Das Problem ist, dass in Deinem Skript in Zeile 6 gar kein Indexzugriff erfolgt. Was führst Du also aus?
Die Einrückungen sind kaputt, weil Du Tabs mit Leerzeichen vermischst. Eingerückt wird immer mit 4 Leerzeichen pro Ebene.
Dann sind 90% der Methoden unsinnig, weil man in Python Attribute direkt setzt, statt sie über Setter-Methoden zu setzen. Methodennamen werden wie Variablen klein_mit_unterstrich geschrieben.

Code: Alles auswählen

class Roboter:
    def __init__ (self, name, baujahr):
        self.name = name
        self.baujahr = baujahr
        
    def sag_hallo(self):
        print("Hallo, mein Name ist {}".format(self.name))

def main():
    bob = Roboter("Bob", 2000)
    bill = Roboter("Bill", 1992)
    for rob in [bob, bill]:
        rob.sag_hallo()
        print("Ich bin {} und bin {} erschaffen worden!".format(rob.name, rob.baujahr))

if __name__ == "__main__":
    main()

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 14:47
von sparrow
Der Indexfehler scheint in dem Script zu sein "die seinen Code nicht akzeptiert". Da wird nämlich in Zeile 6 versucht das erste Kommandozeilenargument zu lesen. Das scheint aber nicht da zu sein.

@Joranes es scheint also nicht an deinem Code zu liegen, sondern das Script bekommt kein Script übergeben, das es ausführen soll. Die Umgebung ist aber so exotisch, ich halte es für unwahrscheinlich, dass dir hier jemand helfen kann.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 14:54
von Sirius3
@sparrow: in der Fehlermeldung ist das gezeigte Skript aber der Aufruf aus Zeile 30. iiec_run.py wird sich ja wohl nicht selbst ausführen wollen??

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 15:10
von __blackjack__
Ergänzend: Abkürzungen sind doof weil oft und auch hier verwirrend: `rob` ist ja auch ein Vorname und es ist klarer wenn man das `robot` nennt.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 15:37
von Joranes
Vor ab danke für die Hilfe ich werde es beim nächsten mal besser machen :),
@Sirius3:
Das mit dem Einrücken liegt Wahrscheinlich am Kopieren vom Code aus der App heraus, Das mit den 90% Unsinnigen Methoden liegt daran weil ich Datenkapslung verwenden wollte damit man wenn man die Daten nicht aus der interaktiven Shell heraus ändern kann. Das so was bei einer so einfach Anwendung natürlich noch keinen Sinn ergibt ist mir klar wurde mir nur eben so erklärt das man auf so was achten soll wenn man sich mit OOP beschäftigt.

@Sparrow:
Ja habe schon befürchtet das die Umgebung zu Exotisch ist nur leider gibt es nicht viele Umgebungen für Android, der Entwickler antwortet nicht auf meine anfrage und um so was selbst zu Programmieren fehlt mir noch das nötige wissen. :/

@ __blackjack__
Danke für denn Tipp.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 15:40
von __deets__
Das man auf sowas achten soll steht nur in OOP-Abhandlungen, die entweder nicht in Python geschrieben sind, oder von Leuten, die eigentlich kein Python koennen. Python geht da (nur ein bisschen, aber durchaus entscheidend) anders vor. Getter und Setter vor allem macht man *NICHT*. Die sind keine Kruecke in Sprachen wie Java oder C++, die keinen anderen Weg kennen, Attribut-Zugriffe umzulenken. Kann Python aber (und zB C# auch) - und darum macht man das da nicht. Und spart sich kiloweise sinnlosen Boilerplate-Code.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 15:47
von Sirius3
Du hast geschrieben, dass das ganz schonmal funktioniert hat. An der OOP kann es nicht liegen, also was hast Du zu vorher noch geändert?

Dass man damit Daten aus der interaktiven Shell heraus nicht ändern kann, ist Quatsch. Das hat nichts mit Datenkapselung zu tun. Und wer immer Dir das erklärt hat, kann kein Python. Durch die Setter-Methoden machst Du das Attribut ja öffentlich, brauchst dafür aber keine Methode, weil man das Attribut auch direkt ändern oder abfragen kann. Und für nicht-öffentliche Attribute braucht man auch keine Setter-Methode.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 16:03
von Joranes
Geändert habe ich nichts, habe den Selben Code am PC und auf dem Handy Probiert am PC Funktioniert es beim Handy eben nicht. Deswegen habe ich überhaupt die frage hier gestellt.
und mein wissen habe ich aus diesem Tutorial: https://www.python-kurs.eu/python3_klassen.php

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 16:04
von __deets__
Oh je. Das ist hier bekannt, und durchaus beruechtigt. Leider.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 16:10
von __deets__
Gerade nochmal auf die von dir verlinkte Seite geschaut. Ohjemine. Da werden immer noch Destruktoren behandelt, als ob die ein Feature waeren, dass man benutzen sollte. Und natuerlich voellig OHNE auf deren doch sehr speziellen Eigenheiten in Python einzugehen. Leider wirklich nicht gut, und nicht besser geworden... der Herr betreibt SEO-Marketing. Das scheint er zu koennen, so viele Leute wie da landen.

Re: IDE auf Android Handy

Verfasst: Samstag 7. März 2020, 16:23
von __blackjack__
@Joranes: Tabs enstehen eigentlich nicht durch's kopieren von Text. Die müssen da vorher schon drin gewesen sein.

Die Datei die Deinen Code nicht akzeptiert sieht übrigends grauenvoll aus. Das hat offenbar auch kein Python-Programmierer geschrieben. Und auch sonst: in `start()` steht der fast identische Code zweimal. Das würde man auch in anderen Programmiersprachen so nicht machen. Sauber(er) sähe das wohl eher so aus:

Code: Alles auswählen

# Earlier it was named "hackrun" because it is full of hacky code.
#
# Some dudes didn't get it tho, so we had to rename it. Hopefully they are happy
# now.
import os
import sys

import __main__


def start():
    main_py_filename = sys.argv[1]
    del sys.argv[1]
    fake_py_filename = os.getenv("ANDROID_ORIGFNAME", main_py_filename)
    sys.path[0] = os.path.dirname(fake_py_filename)
    sys.argv[0] = fake_py_filename

    builtins = __main__.__builtins__
    __main__.__dict__ = {
        "__name__": "__main__",
        "__file__": fake_py_filename,
        "__builtins__": builtins,
    }
    if sys.version_info.major == 2:
        execfile(main_py_filename, __main__.__dict__)
    else:
        with open(main_py_filename, encoding="utf-8") as main_py_file:
            source = main_py_file.read()
        exec(source, __main__.__dict__)


start()
Wobei ich hier auf jeden Fall noch dokumentieren würde warum es in Ordnung ist das erste Element von `sys.path` zu *ersetzen*. Selbsterklärend ist das nicht, denn man überschreibt damit ja einen Eintrag der vielleicht wichtig ist.

Re: IDE auf Android Handy

Verfasst: Sonntag 8. März 2020, 00:13
von Joranes
@__deets__
Gut zuwissen danke für den Hinweis, werde jetzt erstmal mit der Deutschen Documentation weiter lernen.
@__blackjack__
Habe die App nicht selber Programiert sondern so aus dem Store heruntergeladen, werde die app erstmal auf eis legen und später angucken wenn ich auch mehr von Python verstehe.