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
mehrfache Abfrage eines anderen Programms
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.
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.
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"
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)
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"
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
So jedenfalls kann ich nichts erkennen, und dementsprechend auch nichts dazu sagen :K
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))
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"
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"
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.
- 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.
- 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()
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
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.
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.
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:
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)
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.
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.