Warum Funktioniert mein Python Programm nicht, obwohl es fehlerfrei ist?

Hallo,

ich möchte so ein Wahl spiel in Python machen, wo das Programm dir Antworten vorschlägt und du sie dann eingeben musst usw. ...

Das Problem aber ist das das Programm nicht ausgeführt wird, obwohl es Fehlerfrei ist. Es kommt übrigens auch keine Fehlermeldung.

das Programm wird einfach gekillt, nachdem ich bei Laserschneider die 1 eingebe.(Die 1 steht ja auch für den Laserschneider)

Übrigens: was ep1wam1 und so weiter bedeutet, steht ganz am Anfang des Codex.

Vielen Dank im voraus!

FormulaSun12

Der Codex:

# ep = Episode
# wam = wahlmöglichkeiten
# wa = Wahl
# er = erneut
# sf = sicherheitsnachfrage


from time import sleep


episode1 = True
episode2 = False


def ep1wam1():
        ep1wam1 = int(input ("Laserschneider; Jet Pack; Untererde-Loch-graber-Maschiene; Einfach an der Tür Klopfen (1=Laserschneider)"))


# Begrüßung


name = input ("Name?") # Frägt nach Namen
print ("Wilkommen", name, ",")
print ("Beantworte die Fragen mit den angegebenen Antworten. Die angegebenen Antworten sind in Klammern")
sleep (1.0)
input ("Drücken sie eine Taste um fortzufahren!")
print ("Spiel Ladet, bitte warten...")
sleep (3.0)


# Episodenauswahl


episode = int(input ("Episodenauswahl, bitte wählen sie einen Episod! (1);(2)"))


# Wenn Episode 1 wurde ausgewählt und episode1 ist True dann:


if episode1 == True and episode == 1:
    print ("EPISODE 1")
    sleep (1.5)
    print ("20. JUNI 2022")
    sleep (1.5)
    print ("DU STEHST VOR EINEM RIESEGNEN, GUT BEWACHTEN GELDSPEICHER WO DU EINBRECHEN WILLST!")
    sleep (1.5)
    print()
    print ("WÄHLE EINEN DIESER SACHEN UND PROBIERE REINZUKOMMEN! ABER PASS AUF! DAS GEBÄUDE WIR SEHR STRENG ÜBERWACHT! VIEL GLÜCK!")
    print ()
    sleep (1.5)
    ep1wam1()



    # Wenn der Laserschneider ausgewählt wurde:
    if ep1wam1 == 1:
        print ("Die Maschine schneidet einen großen Loch in die Wand.")
        sleep(1.5)
        print ("Das hätte prima funktioniert wenn das ausgeschneidete Teil nicht auf dich draufgefallen wäre :/")
        sleep(1.5)
        print ("FAIL!")
        ep1wam1wa1er = int(input ("Erneut versuchen? (1 für ja);(2 für nein)"))


        if ep1wam1wa1er == 1:
            ep1wam1()
            
        elif ep1wam1wa1er == 2:
            ep1wam1wa1sf = int (input ("Das Spiel hört hier auf. Bist du sicher das du verlassen möchtest? Das Spiel Speichert NICHT! (1=ja);(2=nein)"))


            if ep1wam1wa1sf == 1:
                ep1wam1()
                
            elif ep1wam1wa1sf == 2:
                quit()




# Wenn Episode 2 noch nicht freigeschalten ist dann:


elif episode2 == False and episode == 2:
    print ("Diese Episode ist noch gesperrt! Schliese erst die Anderen ab!")

programmieren, Python, Python 3
Python nur bestimmte dateien in zip archiv speichern?

Hallo Leute,

es geht um folgendes. Eine Funktion (siehe unten) soll ein Zip Archiv erstellen. Dieses soll alle Dateien aus dem verzeichnis /main/content/data beinhalten. Danach wird das ZIP verschlüsselt. Das Ver-, bzw. entschlüsseln funktioniert wunderbar. Nur finde ich, wenn ich das Zip Archiv dann wieder entschlüssele plötzlich nicht die Dateien aus /main/content/data - sondern ebenfalls die Ordner main, content und data. Also die werden mit in das Archiv gepackt. Das sollen Sie aber nicht. Und ich kann meinen Fehler beim besten Willen nicht finden...

Währe nett, wenn mir mal kurz jemand helfen könnte!

Danke im Voraus!

Hier mein Code:

def createEncryptedZIP(compress = zipfile.ZIP_DEFLATED):
    global zip_path
    global zip_name
    global original_path
    
    folder ='main\\content\\data'
    zip_name = simpledialog.askstring(title="Enter Filename", prompt="Enter file name for the new filecontainer")
    zip_path=os.path.join(os.path.dirname(__file__), 'main\\content\\secdrives\\')+zip_name+".secdrive"
    original_path=zip_path
    with zipfile.ZipFile(zip_path, 'w', compress) as target:
        for (root, dirs, files) in os.walk(folder):
            for file in files:
                add = os.path.join(root, file)
                target.write(add)
    to_encrypt = open(zip_path, "rb").read()
    size = len(to_encrypt)
    key = open(keyfile, "rb").read()
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(zip_path, "wb") as encrypted_out:
        encrypted_out.write(encrypted)
    filelist = glob.glob(os.path.join('main\content\data', "*"))
    for f in filelist:
        os.remove(f)
    print(showinfo("New filecontainer created successfully", "You created a new filecontainer:\n\n"+zip_path))
    label_local.configure(text="Local File: "+zip_path)

Datei wieder entschlüsseln:

def decrypt_direct():
    file = open(zip_path, "rb").read()
    key = open(keyfile, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(zip_path, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    os.rename(original_path, original_path+".zip")
    with zipfile.ZipFile(zip_path+".zip",'r') as source:
        source.extractall(decrpytion_path)
    subprocess.call(["subst y: " +'"'+os.path.join(os.path.dirname(__file__), 'main\\content\\data')+'"'], shell=True)
    print(showinfo("Decryption Successfull", "Decryption of \n\n "+zip_path+" \n\nSuccessfull!"))


Ganz am Anfang vom File:

decrpytion_path='main\\content\\data'
Python, Python 3
Python - tkinter text eingabe in variable?

Hallo,

ich habe folgendes programmiert:

import tkinter as tk
import os


root = tk.Tk()
root.geometry("400x240")


def encrypt(filename):
    to_encrypt = open(filename, "rb").read()
    size = len(to_encrypt)
    key = os.urandom(size)
    with open(filename + ".lqk", "wb") as key_out:
        key_out.write(key)
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(filename, "wb") as encrypted_out:
        encrypted_out.write(encrypted)  
    filename = textExample.get(1.0, tk.END+"-1c")
    encrypt(filename)




def decrypt(filename, key):
    file = open(filename, "rb").read()
    key = open(key, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(filename, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    fileTest = filename + ".lqk"
    try:
        os.remove(fileTest)
    except OSError as e:
        print(e)
    else:
        print("Datei erfolgreich gelöscht!")
    filename = textExample.get(1.0, tk.END+"-1c")
    decrypt(filename, filename + ".lqk")
    
    


textExample=tk.Text(root, height=10)
textExample.pack()
btnEncrypt=tk.Button(root, height=1, width=10, text="Encrypt", 
                    command=encrypt)
btnDecrypt=tk.Button(root, height=1, width=10, text="Decrypt", 
                    command=decrypt)


btnEncrypt.pack()
btnDecrypt.pack()


root.mainloop()

Nur leider funktioniert dies nicht. In der Debugging Console bekomme ich folgende Fehlermeldung:

Bei der Encrypt Funktion:

PS C:\Users\elias\Desktop\Python>  c:; cd 'c:\Users\elias\Desktop\Python'; & 'C:\Users\elias\AppData\Local\Programs\Python\Python310\python.exe' 'c:\Users\elias\.vscode\extensions\ms-python.python-2021.12.1559732655\pythonFiles\lib\python\debugpy\launcher' '52518' '--' 'c:\Users\elias\Desktop\Python\main.py'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: encrypt() missing 1 required positional argument: 'filename'


Decrypt Funktion:

Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: decrypt() missing 2 required positional arguments: 'filename' and 'key'      


Wie kann ich das Problem jetzt lösen?

Danke im Vorraus!

VG!

programmieren, Python, Python 3, Tkinter
Speicherung von Variablen in Python, Expertenfrage?

Eine Frage zu dem Übergeben, bzw. Verknüpfen von Variablen.

Gibt es in Python etwas sowas wie Pointer, die nicht für den Nutzer verfügbar sind sondern nur innertechnisch existieren?

Das Problem: ich habe eine Objekt1 wo eine Position einer von einem anderen Objekt2, aber gleiche Klasse, übergeben wird (nur im __init__) und diese Variable in dem Obejekt1 gespeichert wird. Ich zeichne dann aus den beiden Objekten einen Punkt anhand der gespeicherten Positions-Vektoren. Nun das Problem: wenn ich die Variable des Objekt2 "ändere", "ändert" sich auch der Wert des Objekt1 obwohl ich den übergebenen Positionswert NIE mehr aktualisiert habe, somit überschneiden sich die beiden Punkte...

Nun das kuriose: wenn ich bei der Übergabe der Positionsvariable vom Objekt2 zu Objekt1 bei der SPeicherung nicht self.pos = pos SONDERN self.pos = pos+pygame.math.Vector2(0,0) sage, ändert sich dafür der Positionswert des Objekt1 NICHT MEHR... Genau das will ich ja.

Nun meine Theorie warum das so sein könnte... Wen ich self.pos = pos sage speichere ich die Speicheradresse von der Variable des Objekt2, ich referiere quasi darauf. Immer wenn er die Variable im Objekt1 braucht geht er zur Speicheradresse und zieht die Variable aus dem RAM raus. Wenn ich aber self.pos = pos+pygame.math.Vector2(0,0) sage, erzwinge ich durch +pygame.math.Vector2(0,0), dass er die Variabel speichert und nicht nur die Speicheradresse...

Ist meine Thorie richtig? Wenn ja, gibt es noch andere Wege nicht nur die Speicheradresse sondern den Variablen Wert zu speichern?

Danke an jeden der sich das durchgelesen hat xD

LG

Computer, Technik, programmieren, Informatik, Python, Technologie, Python 3
Wie kann ich Punkt 3 und Punkt 4 in einer Funktion in Python implementieren?

In der Aufgabe steht:

Schreiben Sie ein Programm mit den folgenden Funktionen:

  • umfangKreis(radius)

Berechnen des Umfangs eines Kreises.

  • flaecheKreis(radius)

Berechnen des Flächeninhalts eines Kreises.

  • umfangKreis(radius)

Berechnen der Summe aller Umfänge einer Menge von Kreisen.

  • flaecheKreis(radius)

Berechnen der Summe aller Flächeninhalte einer Menge von Kreisen.

Rufen Sie in den Funktionen für eine Menge von Kreisen die bereits implementierten Methoden für das Berechnen des Umfangs und der Fläche der einzelnen Kreise auf. Auf diesem Weg sparen Sie sich die abermalige Implementierung der benötigten Formeln. Kopieren Sie das erstellte Programm mit den Funktionen in einem neuen Ordner. Testen Sie alle Funktionen an geeigneten Testbeispielen in einem separaten Programm. Beachten Sie hierzu den Hinweis für den Suchpfad von Python.

Ich habe das Ganze jetzt erstmal so gelöst, dass ich zwei Programme in einem Ordner gespeichert habe, also einmal definition.py, wo ich die die Formeln für Umfang und Flächeninhalt eines Kreises definiere, und einmal main.py, wohin ich für Punkt 3 und 4 hin exportieren möchte. Allerdings verstehe ich nicht so ganz, was mit der Menge von Kreisen gemeint ist. Wie könnte ich hier weiter fortfahren?

Computer, Schule, Mathematik, Technik, IT, programmieren, Kreis, Gleichungen, Informatik, Python, Technologie, Universität, kreisberechnung, Python 3
bestimmte Excel Inputs mit Python auswählen und in eine andere Excel-Datei einfügen?

Hallo zusammen,

ich würde gerne etwas Neues mit Python ausprobieren. Es geht um eine Excel-Datei, aus der ich bestimmte Einträge in eine andere Excel-Datei einfügen möchte. Wie ihr sehen könnt, möchte ich die Einträge, die einen Farbnamen enthalten, in eine andere Datei in Klammern einfügen und den Farbnamen übersetzt davor schreiben. Haben Sie eine Idee, wie ich das machen kann? Ich wäre Ihnen für jede Antwort dankbar.

import openpyxl
from openpyxl import Workbook, load_workbook
book = openpyxl.load_workbook('datei.xlsx')

result = 1
valuesK = []
i = 1

while result <= 101;
	pages = 'Sheet' + str(i)
	sheet = book.get_sheet_by_name(Sheet1)
	vK = sheet['G1': 'G2259']

	for row in vK:
		for cell in row:
			if blue in cell:
			valuesK.append('Blau (' + cell.value + ')')
			elif red in cell:
				valuesK.append('Rot (' + cell.value + ')')
			elif grey in cell:
				valuesK.append('Grau (' + cell.value + ')')
			elif black in cell:
				valuesK.append('Schwarz (' + cell.value + ')')
			elif white in cell:
				valuesK.append('Weiß (' + cell.value + ')')
			elif offwhite in cell:
				valuesK.append('Elfenbein (' + cell.value + ')')
			elif brown in cell:
				valuesK.append('Braun (' + cell.value + ')')
			elif beige in cell:
				valuesK.append('Beige (' + cell.value + ')')
			elif pink in cell:
				valuesK.append('Pink (' + cell.value + ')')
			elif yellow in cell:
				valuesK.append('Gelb (' + cell.value + ')')
			elif orange in cell:
				valuesK.append('Orange (' + cell.value + ')')
			elif green in cell:
				valuesK.append('Grün (' + cell.value + ')')
			elif turquoise in cell:
				valuesK.append('Türkis (' + cell.value + ')')
			elif purple in cell:
				valuesK.append('Violett (' + cell.value + ')')
			elif gold in cell:
				valuesK.append('Gold (' + cell.value + ')')
			elif silver in cell:
				valuesK.append('Orange (' + cell.value + ')')
			else:
				valuesK.append('Multicolour (' + cell.value + ')')



	i += 1
	result +=1

	wb = Workbook()
	ws = wb.active

	filename='dosya'

	i = 0
	for i in valuesK:
		j += 1
		ws['A' + str(j)] = i
		int(j)

wb.save('datei2.xlsx')
Computer, Microsoft Excel, programmieren, Code, Informatik, Programmiersprache, Python, Softwareentwicklung, Python 3, Data Science
PyQt5 WebEngine mehrere WebViews mit jeweils unterschiedlichen Proxys in einem Fenster funktioniert nur bei den ersten beiden Proxys?

Hallo liebe Community,

Ich wollte mit PyQt eine Oberfläche Implementieren, die mehre Websites mit unterschiedlichen Proxys pro Laufzeit aufruft, und anzeigt.

Das soll dann ungefähr so aussehen:

, nur, dass beim 2. Fenster eine andere Proxyaddresse stehen sollte. Hier ist mein Code:

import json
import random
import threading
import time
from typing import *
import requests

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import requests, re
from PyQt5.QtWebEngineWidgets import *
import PyQt5.QtNetwork
import PyQt5.QtWidgets

def refresh_browser():
    time.sleep(10)
    host, port, ct = random.choice(proxylist)
    print(host, port, ct)
    PyQt5.QtNetwork.QNetworkProxy.setApplicationProxy(
        PyQt5.QtNetwork.QNetworkProxy(PyQt5.QtNetwork.QNetworkProxy.Socks5Proxy, host, port))
    window.refresh.click()


proxylist = [(a, b, c) for a, b, c in json.load(open("proxies.txt")) if c == "DE"]
available_proxiy_protocols = {"socks5":PyQt5.QtNetwork.QNetworkProxy.Socks5Proxy, "http":PyQt5.QtNetwork.QNetworkProxy.HttpProxy}
class Browser(QMainWindow):
    def __init__(self, url, proxylist: List):
        super(Browser, self).__init__()
        self.window = QWidget()
        self.layout = QVBoxLayout()
        self.horizontal = QHBoxLayout()
        self.browsers = []
        self.c = 0

        
        self.current_url = url

        self.button = QPushButton()
        self.button.clicked.connect(lambda: self.navigate(self.current_url))

        self.refresh = PyQt5.QtWidgets.QPushButton()
        self.refresh.clicked.connect(lambda: self.refr(self.current_url))


        for proxy in proxylist:
  
    
                #HIER MUSS ETWAS GEÄNDERT WERDEN
                self.browser = QWebEngineView()
    
                self.layout.addLayout(self.horizontal)
                self.layout.addWidget(self.browser)
                self.browser.setUrl(QUrl(self.current_url))
                self.browsers.append(self.browser)
    
            self.window.setLayout(self.layout)

        self.window.show()
    
    def navigate(self, url): self.browser.setUrl(QUrl(url))
    def refr(self, url):
        for br in self.browsers:
            br.setUrl(QUrl(url))
host, port, ct = random.choice(proxylist)
print(host, port, ct)
#PyQt5.QtNetwork.QNetworkProxy.setApplicationProxy(PyQt5.QtNetwork.QNetworkProxy(PyQt5.QtNetwork.QNetworkProxy.Socks5Proxy, host, port))
app = QApplication([])


proxys = [("104.255.170.63", 60757), ("103.241.227.114", 6667)]
ip = "https://httpbin.org/ip"
PyQt5.QtNetwork.QNetworkProxy.setApplicationProxy(PyQt5.QtNetwork.QNetworkProxy(PyQt5.QtNetwork.QNetworkProxy.Socks5Proxy, proxys[0][0], proxys[0][1]))
print(proxys)
window = Browser(ip, proxys)


app.exec()

Kann mir jemand helfen, uns mir sagen, wie ich nach jederm Browserfenster, das erstellt wird, einen anderen Proxy setzen kann?

Vielen Dank Im Voraus

LG Lukas Zander

Bild zum Beitrag
Python 3
Python Socket Programmierung Error?
#Server
import socket
ip_input = input("Gib deine IP an: ")
ip_input = str(ip_input)
IP_SERVER = ip_input
DISCONNECT_MESSAGE = "!DISCONNECT"
def start():
  server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  server.bind( (IP_SERVER, 5050) )
  print("Server gestartet")
  server.listen()
  conn, addr = server.accept()
  print(f"Client with IP {conn} connected")
  while True:
    msg = server.recv(1024)
    msg.decode("utf-8")
    print(f"Message: {msg}")
    if msg == DISCONNECT_MESSAGE:
      server.close()
      conn.close()
if __name__ == "__main__":
  start()
#Client
import socket
def start():
  server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  server.connect( ("192.168.1.100", 5050) )
  while True:
    msg = str(input("Your Message: "))
    msg = msg.encode()
    server.send(msg)
    answer = server.recv(1024)
    answer = answer.decode("utf-8")
    print(f"Antwort: {answer}")
if __name__ == "__main__":
  start()
#Error

Gib deine IP an: 192.168.1.100

Server gestartet

Client with IP <socket.socket fd=372, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.1.100', 5050), raddr=('192.168.1.100', 60324)> connected

Traceback (most recent call last):

 File "c:\Users\User\OneDrive\Python\Server_2.py", line 26, in <module>

  start()

 File "c:\Users\User\OneDrive\Python\Server_2.py", line 17, in start

  msg = server.recv(1024)

OSError: [WinError 10057] Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde

Computer, Netzwerk, programmieren, Informatik, Python, Python 3
Python "in" in einer IF-verzweigen funktioniert nicht?

Hallo zusammen,

ich möchte per Tastendruck den Link zu einem Screenshot z.B. https://i.imgur.com/qk5TpU0.png
aus meiner Zwischenablage in ein Google Spreadshead hochladen. Diese sollen natürlich untereinander erscheinen und nicht doppelt. Hier funktioniert aber nicht der "in" Operator.

Bild vom Spreadshead: https://i.imgur.com/gOxxDeN.png

Der Code: "
import keyboard
from tkinter import Tk
import gspread
from oauth2client.service_account import ServiceAccountCredentials

# use creds to create a client to interact with the Google Drive API
scope = ["https://spreadsheets.google.com/feeds", 'https://www.googleapis.com/auth/spreadsheets',
         "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)

# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("test für api").sheet1


def check_value_existence():
    row = 2  # Reihe
    col = 2  # Spalte
    value = sheet.cell(col, row).value
    clipboard = Tk().clipboard_get()
    if "imgur" in value:
        while True:
            col = col + 1
            value = sheet.cell(col, row).value
            if "imgur" in value:
                break
        print("found", col)
        col = col - 1
        if value != clipboard:
            sheet.update_cell(2, 2, clipboard)


while True:
    if keyboard.read_key() == "p":
        print("You pressed p")
        check_value_existence()
"
Computer, programmieren, Code, Informatik, Python, Python 3
Python3: For-Schleife überspringt Element der Liste?

Hallo!

Ich wollte letztens in Python (3.7.4) mit einer for-Schleife durch eine Liste gehen, um jedes Element unter einer bestimmten Bedingung aus der Liste zu löschen.

Eine stark vereinfachte Version könnte so aussehen:

l = [1,2,3,4,5]

for i in l:

____print(i)

____if i == 2: l.remove(i)

____if i == 3: l.remove(i)

print(l)

Hier möchte ich also alle Zweien und Dreien löschen. Das ganze geht natürlich effektiver, übersichtlicher und schöner, aber meine Bedingungen waren ja auch etwas komplizierter und hier geht es nur ums Prinzip.

Die Ausgabe sollte dann meinen Erwartungen entsprechend so aussehen:

1

2

3

4

5

[1,4,5]

Tatsächlich sieht sie dann aber so aus:

1

2

4

5

[1,3,4,5]

In der for-Schleife ist niemals i == 3. Das ist darauf zurückzuführen, dass durch das Löschen der 2 alle Elemente in der Liste einen Platz nach links rutschen, wobei die for-Schleife um das nächste Element durchzugehen einen Schritt weiter nach rechts geht. Dabei werden all jene Elemente übersprungen, die hinter einem zu löschenden Element kommen. Das kann man sich so zwar erklären, ist aber nicht intuitiv.

Und eingebettet in mein Programm hat die Fehlersuche ewig gedauert, wer rechnet schon damit, dass die for-Schleife ein Listenelement überspringt?

Ich wollte euch hier nur diesen interessanten Fund zeigen und euch auch nach eurer Meinung dazu fragen :)

Der beste Lösungsansatz wäre doch die list-Comprehension, oder?

Was sagt ihr dazu?

Viele Grüße! :D

Computer, programmieren, Python 3

Meistgelesene Beiträge zum Thema Python 3