Seite 1 von 1
mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 14:06
von Champ8888
Habe ein Problem
Ich möchte ein programm in ein anderes importieren aber das 2. programm wird nur 1 mal abgefragt
1. Programm:
import random
import Unit1
while True:
question_and_answers = [(Unit1.d, Unit1.e)]
question, answer = random.choice(question_and_answers)
b = random.randint(1,2)
if b == 1:
print("")
print(question)
c = input("")
if c == answer:
print("richtig")
else:
print("falsch, richtig wäre:")
print(answer)
if b == 2:
print("")
print(answer)
c = input("")
if c == question:
print("richtig")
else:
print("falsch, richtig wäre:")
print(question)
2.Programm:
import random
zufall = random.randint(1,76)
if zufall == 1:
e = "hallo"
d = "tschüss"
if zufall == 2:
e = "hier"
d = "weg"
Ich möchte dass zufall jedes mal anders ist. Aber im moment wird nur 1 mal am Anfang die Zufallszahl gezogen
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 14:15
von __deets__
Bitte benutze die Code-Tags hier im Forum um deinen Code zu formatieren. Der ist sonst wenigstens schwer verstaendlich, meistens aber sogar falsch, weil die Einruekungstiefe bei Python wichtig ist.
Und zu deinem Problem: importieren ist nicht dazu gedacht, Code auszufuehren. Du musst deine gewuenschte Funktionalitaet in eine Funktion stecken (darum heisst die so), und die dann vom anderen Modul aufrufen. So, wie du das auch mit den Funktionen aus dem random-Modul machst.
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 14:34
von Champ8888
Vielen dank für deine Hilfe
Auch das mit dem Code-Tags
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 16:42
von Champ8888
Hbe es jetzt noch mal mit einer deffinition probiert, aber es geht irgendwie nicht, er sagt das e bzw d nich deffiniert ist
1. Programm
import random
from Unit1 import *
while True:
Abfrage()
question_and_answers = [(e, d)]
question, answer = random.choice(question_and_answers)
b = random.randint(1,2)
if b == 1:
print("")
print(question)
c = input("")
if c == answer:
print("richtig")
else:
print("falsch, richtig wäre:")
print(answer)
if b == 2:
print("")
print(answer)
c = input("")
if c == question:
print("richtig")
else:
print("falsch, richtig wäre:")
print(question)
2.Programm
import random
def Abfrage():
zufall = random.randint(1,76)
if zufall == 1:
e = "hallo"
d = "tschüss"
if zufall == 2:
e = "hier"
d = "weg"
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:00
von __deets__
Uuuuuuuuuund wieder: Codebox benutzen. Schaust du dir gar nicht an, wie deine eigenen Postings aussehen? Man kann da auch auf Vorschau druecken, und auch nachtraeglich bearbeiten, falls man das vergessen hat.
So jedenfalls kann ich nichts erkennen, und dementsprechend auch nichts dazu sagen :K
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:05
von Champ8888
Eigendlich habe ich die auch benutzt, es sieht auch richtig aus.
Aber in der Vorschau sieht es dann wieder anders aus :K
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:07
von __deets__
Naja also fuer mich funktioniert das, du wirst etwas rumprobieren muessen, bis es klappt
Code: Alles auswählen
import threading
import struct
import json
import numpy as np
import nanomsg
from Foundation import NSAutoreleasePool
from .cv import MAT_INFO
def create_mat(data):
rows, cols, type_ = struct.unpack("<III", data[:12])
mi = MAT_INFO[type_]
a = np.frombuffer(data[12:], dtype=mi.type)
res = a.reshape((rows, cols, -1))
if res.shape[-1] == 1:
res = res.reshape(res.shape[:2])
return res
def create_json(data):
return json.loads(data)
CONVERTERS = {
"cv::Mat": create_mat,
"json": create_json,
}
class Connector():
def __init__(self, main_thread_callback, uri, bind=True):
self._socket = nanomsg.Socket(nanomsg.PAIR)
if bind:
self._socket.bind(uri)
else:
self._socket.connect(uri)
self._main_thread_callback = main_thread_callback
self._running = True
self._t = threading.Thread(target=self._run)
self._t.daemon = True
self._t.start()
def _run(self):
pool = NSAutoreleasePool.alloc().init()
counter = 0
while self._running:
msg = self._socket.recv()
header_len = struct.unpack("<I", msg[:4])[0]
header = json.loads(msg[4:4+header_len])
data_len = struct.unpack("<I", msg[4 + header_len:8 + header_len])[0]
data = msg[8 + header_len:8 + header_len + data_len]
res = CONVERTERS[header["type"]](data)
self._main_thread_callback((header, res))
counter += 1
if counter == 1000:
del pool
pool = NSAutoreleasePool.alloc().init()
counter = 0
def stop(self):
self._running = False
self._t.join()
def toggle_transmitting(self):
self._socket.send(json.dumps({ "command": "toggle-transmitting" }))
def get_config(self):
self._socket.send(json.dumps({ "command": "get-config" }))
def set_override(self, command, parameter=None):
d = dict(command=command, parameter=parameter)
self._socket.send(json.dumps(d))
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:12
von Champ8888
Ok hat geklappt
Code: Alles auswählen
1. Programm
import random
from Unit1 import *
while True:
Abfrage()
question_and_answers = [(e, d)]
question, answer = random.choice(question_and_answers)
b = random.randint(1,2)
if b == 1:
print("")
print(question)
c = input("")
if c == answer:
print("richtig")
else:
print("falsch, richtig wäre:")
print(answer)
if b == 2:
print("")
print(answer)
c = input("")
if c == question:
print("richtig")
else:
print("falsch, richtig wäre:")
print(question)
2.Programm
import random
def Abfrage():
zufall = random.randint(1,76)
if zufall == 1:
e = "hallo"
d = "tschüss"
if zufall == 2:
e = "hier"
d = "weg"
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:30
von __deets__
Hmjaaaneee. Da sind ja trotzdem alle Einrueckungen kaputt. Hast du den Code einfach von der Webseite kopiert? Und du solltest deinen Editor auch so einstellen, das er Spaces statt Tabs produziert.
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:32
von Champ8888
Code: Alles auswählen
1. Programm
import random
from Unit1 import *
while True:
Abfrage()
question_and_answers = [(e, d)]
question, answer = random.choice(question_and_answers)
b = random.randint(1,2)
if b == 1:
print("")
print(question)
c = input("")
if c == answer:
print("richtig")
else:
print("falsch, richtig wäre:")
print(answer)
if b == 2:
print("")
print(answer)
c = input("")
if c == question:
print("richtig")
else:
print("falsch, richtig wäre:")
print(question)
2.Programm
import random
def Abfrage():
zufall = random.randint(1,76)
if zufall == 1:
e = "hallo"
d = "tschüss"
if zufall == 2:
e = "hier"
d = "weg"
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:40
von __deets__
Ein paar Anmerkungen:
- keine Sternchenimporte. Dadurch muellst du dir den Namensraum voll, und weisst nicht mehr, woher etwas kommt.
- bitte befolge PEP8 zur Namenskonvention von Bezeichnern in Python. "Abfrage" ist ein Name bei dem jeder erfahrene Python-Entwickler annimmt, dass es sich dabei um eine Klasse handelt. Nicht eine Funktion.
- Sinn und Zweck einer Funktion ist die Kapselung von einer bestimmten Funtionalitaet. Eingaben erreichen sie ueber Parameter, Ausgaben taetigt sie durch Rueckgabewerte. Namen, die sie innerhalb des Funktionskoerpers anlegt, erscheinen (mit gutem Grund!) nicht einfach magisch in anderen Programmteilen. Lass deine Funktion also die Werte zurueckgeben, die sie bestimmt hat.
Code: Alles auswählen
def tuwas():
a = ...
b = ...
return a, b
def machwas():
c, d = tuwas()
- auch wenn ich das gerade selbst gemacht habe um nahe an deinem Beispiel zu bleiben: einbuchstabige Variablennamen sind ausser in sehr seltenen Ausnahmen eine schlechte Idee. Code wird mehr gelesen als geschrieben, Klarheit ist darum das oberste Gebot.
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:47
von Champ8888
Wenn ich das richtig verstanden habe soll das so funktionieren oder?
Code: Alles auswählen
def Abfrage():
zufall = random.randint(1,2)
if zufall == 1:
e = "hallo"
d = "tschüss"
if zufall == 2:
e = "hier"
d = "weg"
return e, d
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:49
von __deets__
Statt zu fragen ob etwas geht, ausprobieren ob's tut. Geht schneller fuer alle Beteiligten.
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 17:51
von Champ8888
Hab ich aber es kommt folgende fehlermeldung
UnboundLocalError: local variable 'e' referenced before assignment
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 18:04
von __deets__
Dann haettest du das doch auch gleich schreiben koennen, oder? Auch das spart anderer Leute Zeit bei der Betrachtung deines Codes, und verschafft dir dadurch bessere (oder ueberhaupt) Antworten.
Und anhand des gezeigten Codes (immer noch schlechte Variablennamen, immer noch schlechter Funktionsname) sowie der Definition von randint kann ich mir das nicht vorstellen. Der Fehler kommt doch garantiert aus deinem Hauptprogramm. Um das zu beurteilen braucht man den *gesamten* Stacktrace des Fehlers, nicht nur das bisschen das du gezeigt hast.
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 18:10
von Champ8888
Die komplette Meldung:
Traceback (most recent call last):
File "C:\Users\User\Desktop\Python\Englisch.py", line 7, in <module>
Abfrage()
File "C:\Users\User\Desktop\Python\Unit1.py", line 289, in Abfrage
return e, d
UnboundLocalError: local variable 'e' referenced before assignment
Und das Hauptprogramm:
Code: Alles auswählen
import random
from Unit1 import *
while True:
Abfrage()
question_and_answers = [(e, d)]
question, answer = random.choice(question_and_answers)
b = random.randint(1,2)
if b == 1:
print("")
print(question)
c = input("")
if c == answer:
print("richtig")
else:
print("falsch, richtig wäre:")
print(answer)
if b == 2:
print("")
print(answer)
c = input("")
if c == question:
print("richtig")
else:
print("falsch, richtig wäre:")
print(question)
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 18:15
von __deets__
Glaube ich nicht. Fuer mich funktioniert deine "Abfrage". Du hast sie aber in dein Hautprogramm falsch eingebaut, denn da benutzt du die Rueckgabewerte nicht, obwohl ich dir das ja beispielhaft gezeigt habe. Und *dort* wird auch eine Fehlermeldung zu unbound variablen kommen.
Vielleicht hast du Unit1.py (auch schlecht benannt) nicht gespeichert oder so, aber der Code, den du hier gepostet hast, der funktioniert fuer mich. Das Problem liegt also irgendwo bei dir.
Da dein Modul Unit1 eh voellig trivial ist, wuerde ich vorschlagen du packst die Funktion gleich in dein Hauptprogramm (Als Funktion! Nicht einfach den Code reinroedeln!), das macht dir das Leben etwas leichter.
Re: mehrfache Abfrage eines anderen Programms
Verfasst: Freitag 13. Oktober 2017, 18:20
von Champ8888
Ok danke für die Hilfe