Hi,

um Python zu programmieren brauchst du keine IDE und ich würde statt dessen es erstmal in einem Editor wie notepad++, notepad oder sonst einem anderen machen. Wenn deine Abgabe schon heute Abend ist.

Solltest du jedoch dennoch unbedingt eine IDE verwenden möchten empfehle ich vorrübegehend die IDLE von Python selber zu verwenden.

Helfen direkt kann ich dir bei diesem Problem nicht da ich noch nie Geany verwendet habe.

Funktioniert denn python selber? Also wenn du ein Programm über die Konsole startest?

Regards,

LifeArtist

...zur Antwort
Python "Schere-Stein-Papier" funktioniert nicht, man kann nicht gewinnen?

Ich bin nun so gut wie fertig mit meinem Spiel, aber man kann nicht gewinnen. Ich habe es auch mit "try except" versucht, aber hat auch nicht funktioniert. Woran kann das liegen?

Ich weiß man könnte das schöner/besser machen, aber mir passt es so:)

Code:

#Imports
import time
import random
random.seed()

	#Headline
print("*************************"); time.sleep(0.5)
print("*Schere - Stein - Papier*"); time.sleep(0.5)
print("*************************"); time.sleep(0.5)

true = True

while true == True:

	print("-------------------------------") #Abtrennung
	#Input
	print("Wählen Sie eine Figur: ")
	spielerwahl = input().lower()
	print("")
	
	computerwahl = ["schere", "stein", "papier"]

	#Output
	print("Sie wählten: ", spielerwahl)
	pc = random.choice(computerwahl)
	print("Der Computer wählte: ", pc)
	print("")

	#Verzweigungen
	if spielerwahl == pc:
		print("*********Unentschieden!*********")
		
	#Spielerwahl = Schere
	elif spielerwahl == "schere" or spielerwahl == "Schere" and pc == "stein":
		print("***********Verloren!***********")
		
	elif spielerwahl == "schere" or spielerwahl == "Schere" and pc == "papier":
		print("***********Gewonnen!***********")
	
	#Spielerwahl = Stein
	elif spielerwahl == "stein" or spielerwahl == "Stein" and pc == "papier":
		print("***********Verloren!***********")
		
	elif spielerwahl == "stein" or spielerwahl == "Stein" and pc == "schere":
		print("***********Gewonnen!***********")
	
	#Spielerwahl = Papier
	elif spielerwahl == "papier" or spielerwahl == "Papier" and pc == "schere":
		print("***********Verloren!***********")
		
	elif spielerwahl == "papier" or spielerwahl == "Papier" and pc == "stein":
		print("***********Gewonnen!***********")
		
	#Fehlermeldung
	else:
		print("*********Nicht möglich!*********")
	
	#Abtrennung
	print("-------------------------------")
	print(""); time.sleep(1.5)
...zur Frage

Hi,

ich würde or's immer Klammern meines Wissens nach bindet hier das and stärker und somit würde dort

spielerwahl == "papier" or (spielerwahl == "Papier" and pc == "schere")

stehen.

Zu:

(spielerwahl == "papier" or spielerwahl == "Papier") and pc == "schere"
Ich weiß man könnte das schöner/besser machen, aber mir passt es so:)

Kannst dann hier aufhören zu lesen ;P

Ich würde aber die vielen IF's vermeiden und lieber eine Liste von Tupeln von Regeln aufstellen. z.B alle Tupel kombinationen die Gewinnen oder so. Dann kannst du eine Abfrage machen:

if (spielerwahl, pc) in gewinner_liste: pass

Dadurch ersparst du dir auch die vielen prints. Desweiteren hast du dir gut überlegt die Eingabe direkt in lower case zu lesen. Damit kannst du dir aber auch schon die

spielerwahl == "Papier" # und andere dementsprechenden Abfragen

Abfragen sparen.

Regards,

LifeArtist

...zur Antwort

Hi,

mir ist auch nichts in tkinter der Art bekannt. Stattdessen würde ich zu pyqt ausweichen. Dort gibt es ein Widget welches eine Website darstellen kann. Ich hatte hier eine ähnliche Frage mal beantwortet und auch ein Beispiel dazu. https://www.gutefrage.net/frage/python-webseite-in-einer-gui-anzeigen

Ich würde mich aber echt Fragen was es für ein Sinn macht, eine Website anzeigen zu lassen. Die werden wahrscheinlich nichts anderes machen als alle x Sekunden die gleiche Anfrage zu schicken wie du sie schicken wolltest.

Wenn es dir um viel Design Freiheit geht, dann solltest du von tkinter fern bleiben. Dann solltest du dir so etwas wie z.B QT (pyqt) anschauen.

Regards,

LifeArtist

...zur Antwort
YouTube Counter für eigene Webseite mit Python - Abonnenten werden nicht aktualisiert. Wie kann ich das Problem lösen?

Ich würde gern einen YouTube-Counter für mein Programm machen und wollte da halt die Top 10 YouTuber einbauen. Aber es soll, wenn ein YouTube-Kanal den anderen überholt automatisch geändert werden und dafür dachte ich, das ich das was du mir geschickt hast, verwenden kann. Aber so wie es aussieht, funktioniert es trotzdem nicht.

import tkinter as tk
import urllib.request
import json
import time

YouTube API KEY


YouTube Daten gesamt auslesen

pew_data = urllib.requesthttps://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=PewDiePie&key=key=key=key=" + key).read()
budentv_data = urllib.request.urlopen( https://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=Node&key=key=" + key).read()
tseries_data = urllib.request.urlopenhttps://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=TSeries&key=key=" + key).read()

Subscriber/Subs auslesen

pew_subs = json.loads(pew_data)["items"][0]["statistics"]["subscriberCount"]
budentv_subs = json.loads(budentv_data)["items"][0]["statistics"]["subscriberCount"]
tseries_subs = json.loads(tseries_data)["items"][0]["statistics"]["subscriberCount"]

Sortierung

def custom_sort(t):
  return t[1] L = [("PewDiePie", pew_subs), ("BudenTv", budentv_subs), ("T-Series", tseries_subs)]

L.sort(key=lambda x: x[1], reverse=True)

Tkinter Gui
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
  
Ergebnis wird angezeigt,

labels = {}


Mein Problem ist, dass, wenn ich das Skript laufen lasse, die Abonnenten nicht aktualisiert werden. Wie kann ich das Problem lösen?

...zur Frage

Hi,

Ich habe dir das als Kommentar geschrieben gehabt und deswegen hier nochmal als Antwort:

Also wenn du eine Echtzeit Anwendung haben möchtest, musst das das ein klein wenig anders machen. Du möchtest nicht jedesmal deine 10 Labels neu generieren nur weil es sein könnte, dass sich die Subscriber geändert haben. Da würde ich lieber allgemein 10 Labels haben welche die 10 Plätze repräsentieren.

Zusätzlich musst du immer wieder "pollen" (also die Daten neu Abgreifen) in einem gewissen Abstand. Das kannst du mit der after Methode in tkinter machen. http://effbot.org/tkinterbook/widget.htm (So habe ich das früher immer gemacht). Damit kannst du auch das GUI updaten.

Die Funktion die du mit after aufrufst müsste dann immer wieder die Daten pollen. In dieser musst du sie auch wieder neu sortieren. Wenn du dann die neue Sortierung hast, musst du nur noch jedem Label von den Text zuweisen wie deine neue Reihenfolge der sortierten Liste ist.

Um das möglichst dynamisch zu machen würde ich dann eine For-Loop über die L liste mit Hilfe der enumerate() Funktion machen.

for index, (item, count) in enumerate(L):
  pass

Dann wäre der Index der Rank des Youtube Accounts. Möglicherweise musst du L nochmal reversen aber das weiß ich jetzt nicht.

Regards,

LifeArtist

...zur Antwort

Guten Abend,

das scheint an den Normals zu liegen. Kurz: Die beschreiben, wie sich das Licht auf einer Ebene zu verhalten hat. (Meine Interpretation)

Falls du Zeit und Lust hast: https://en.wikipedia.org/wiki/Normal\_mapping

Um in deinem Fall dein Problem zu lösen, musst du die Normals umdrehen. Da selektierst du die Faces welche dir falsch erscheinen und shift+rechtsklick -> Face Normals -> Reverse.
Du kannst auch mit den anderen Einstellungen dort drin rumspielen wenn du alle Faces selektierst, kannst du es schaffen, dass es schneller geht. Propagate oder wo so... Bin gerade ein wenig beschäftigt sonst hätte ich dir noch eine genauere Anleitung geschrieben.

Regards,

LifeArtist

...zur Antwort

Guten Abend,

habe es leider erst heute gelesen. Ich würde das ganze erstmal in eine Vektorgrafik umwandeln damit du es so hochskalieren kannst wie du es möchtest (unterschied siehe Bild 1).

Wenn du dann die richtige größe gefunden hast, kannst du es als PDF speichern oder eine PDF aus dem erstellten Bild erstellen.
Öffnest du nun die PDF, kannst du auf den datei -> drucken gehen und Poster auswählen. (Bild 2)

Jetzt musst du nur noch die richtigen einstellungen finden. Diese findest du am besten heraus wenn du vorher einmal in eine PDF druckst, um zu sehen wie das zerstückelte Poster aussieht.

Ein Problem welches beim direkten Poster drucken auftaucht ist, dass Acrobat es randlos drucken möchte. Da der Drucker aber selber noch Sicherheitsränder mit druckt verschwindet ein Teil des Bildes. Deswegen ist es sinnvoll eine Überlappung anzugeben (siehe Bild 2)

Joa so hast du dann halt ein Poster in der größe deiner Wahl mit unbegrenzter Auflösung außer natürlich die Druckerauflösung ;)

Fallst du es immer noch brauchst kannst du mir ja noch mal eine PM/Kommentar schreiben.

Falls du es alleine machen möchtest, kannst du dir die Testversionen der Programme:

  • Adobe Illustrator (Für die Vektor umwandlung)
  • Adobe Acrobat (Für die Erstellung und drucken der PDF)

herunterladen.

Fröhliches drucken,

LifeArtist

...zur Antwort

Also ich würde als erstes mit das Objekt angucken und überlegen welche Teile ich seperat modellieren könnte. Das würde dann eventuell so wie auf dem 1. Bild aussehen. Wobei es eben auch drauf ankommt wie du jetzt modellieren möchtest.

Hard Surface würd halt jedes detail gemoddelt und später gebaked etc etc. jedenfalls kannst du dann wenn du die kleinen rechtecke nicht sepperat sondern zusammen mit dem turm machen möchtest könntest du den Turm aufteilen in 2 Teile da du sonst durch die rechtecke geometrie im unteren Turm erstellst die du da nicht wirklich brauchst.

Ansonsten ja einfach dann los modellieren. Und noch etwas: es bietet sich auch an solltest du die kleinen Teile auf der Turret nicht anders wiederverwenden, dann kannst du auch die Geometry welche man nicht sieht löschen, das reduziert die triangles und auch signifikant die game performance bzw render speed.

Joa Regards

...zur Antwort

Okay da du sicherlich nicht eine perferkte gui brauchst kannst du bei tkinter bleiben. Ansonsten kannst du dir mal qt angucken für python ist mächtiger als tkinter.

Die frage ist wofür brauchst du eine GUI überhaupt die meisten tools fürs hacken z.b bundled in kali benutzen nur die console was auch vollkommen ausreicht.

Gut naja also ich bin jetzt kein experte auf dem gebiet aber wenn du dich für exploits etc. begeisterst dann solltest du doch einfach mal damit einsteigen? Zum Beispiel könntest du einfach ein kleines bruteforce programm schreiben welches irgendein deiner server etc. durchprüft.

Oder einfach ein packet sniffer ( wie wireshark) mit python. Da könntest du dann auch tkinter benutzen um diese anzuzeigen.

Dann würde ich mich auch noch mit socket programmierung auseinander setzen da du das sicherlich brauchst.

Mehr fällt mir jetzt auch erstmal nicht ein.

Regards

...zur Antwort

Also Gerste94's www.dielottozahlende.net Webseite funktioniert hervorragend dafür. Für webscraping benutzt man am besten requests und beautifulsoup:

from bs4 import BeautifulSoup
import requests


response = requests.get("http://www.dielottozahlende.net/")
soup = BeautifulSoup(response.content, "html.parser")
ziehung = soup.find("div", {"class", "lottozahlen-ziehung"}) numbers = ziehung.findAll("li")
for index, number in enumerate(numbers): print("{0}. Zahl: {1}".format(index+1, number.text))

Regards,

Life

...zur Antwort

Hier das sollte funktionieren. Ich habe zwar nicht so viel ahnung von turtle sodass es durchaus sein kann, dass es eine einfachere Methode gibt aber mit hilfe von mathe ging es es eben auch.

Man zeichnet zuerst einen Halbkreis und geht dann zum anderen über und rechnet quasi dann einfach nur rückwärts.

import turtle
import math as m

def paintSection(degree, radiusOuter, radiusInner, offset): phi = 0.0 alpha = 1 # um den sektor dann zu schließen müssen wir die erste berechnete # koordinate speichern firstCord = None # der offset legt den start winkel fests sectionDegree = 0 + offset # bevor wir starten müssen wir turtle erstmal das malen verbieten turtle.up()
while sectionDegree <= degree + offset: # wir rechnen sectionDegree in radiants um phi = sectionDegree * (m.pi/180.0) # berechnung der einzelnen koordinaten x = radiusOuter * m.cos(phi) y = radiusOuter * m.sin(phi) # move turtle zur richtigen position turtle.setpos(x, y) if not turtle.isdown(): firstCord = (x, y) turtle.begin_fill() turtle.down()
# erhöhe den winkel sectionDegree += alpha
while sectionDegree >= offset: # wir rechnen sectionDegree in radiants um phi = sectionDegree * (m.pi/180.0) # berechnung der einzelnen koordinaten x = radiusInner * m.cos(phi) y = radiusInner * m.sin(phi) # move turtle zur richtigen position turtle.setpos(x, y) # verringere den winkel sectionDegree -= alpha
# nun können wir den sektor schließen turtle.setpos(*firstCord) # turtle.end_fill()

offset = 0 # der offset muss nicht unbedingt sein section = 360/6 for n in range(3): paintSection(section, 50, 15, offset) offset+=section*2 # da wir eine section überspringen wollen, nehmen wir sie *2

Kann man vllt noch kürzen, sollte aber schon mal ein Anfang sein.

Möchtest du das Symbol nicht in der Mitte haben, musst du noch den Mittelpunkt zu den jeweiligen Koordinaten dazu rechnen.

Regards,

Life

...zur Antwort

Warum nicht einfach:

a = "Das ist ein veränderbarer Text, der auch noch umformatiert werden soll, wenn hier etwas anderes steht!"
b = "'''{0}'''{1}".format(a[0], a[1:])

Ouput:

"'''D'''as ist ein veränderbarer Text, der auch noch umformatiert werden soll, wenn hier etwas anderes steht!"

So würde ich das machen.

...zur Antwort

Moin,

habe gerade nicht viel Zeit aber ich würde das ganze ein wenig umschreiben. Python hängt am Ende automatisch \n's ran. d.h du bräuchtest das nur am Anfang wenn du eine Zeile frei haben möchtest. Des weiteren kannst du deine If's verkürzen in dem du:

eval verwendest (wandelt strings als command um also so als würdest du es in die IDLE schreiben.) Hier muss dann nur aufgepasst werden das es wirklich eine Rechnung ist.

rechnung = input("Bitte gebe deine Rechnung ein: ")
while rechnung != "beenden":
    print(eval(rechnung))
    rechnung = input("Bitte gebe deine Rechnung ein: ")

ein dictionary mit den operations methoden

import operator as op
operations = {"+":op.add,
                      "/":op.floordiv,
                      "*":op.mul,
                      "-":op.sub}

rechnung = input("Bitte gebe deine Rechnung ein: ")

while rechnung != "beenden":
    parts = rechnung.split(" ") #teilt den string in eine Liste auf; teilt wo space
    num1 = int(parts[0])
    num2 = int(parts[2])
    oper = parts[1]

    print(operations[oper](num1, num2))
    rechnung = input("Bitte gebe deine Rechnung ein: ")


Ansonsten kannst du dir natürlich nur die Logik mit der While Schleife als hilfe nehmen.

...zur Antwort

Einfach in eine while schleife packen:

z.B

output3 = input()
while True:
    #abfrage1
    break;
    #abfrage2
    break;
    #abfrage3
    output3 = input()


Wobei du das break in deine Abfragen hinein schreiben musst. Außer eben in die, wenn die Zahl zu groß ist. Denn das break veranlasst, dass aus der Schleife rausgegangen wird.

...zur Antwort

Versuche es mal mit 

pack_forget()

http://effbot.org/tkinterbook/pack.htm

Sichtbar kannst du es dann wieder mit pack() oder einem anderen manager machen. (place, grid ...)

Kleines unsauberes Beispiel (python 3):

import tkinter

isHided = False
def test():
print("I am working")

def hide():
global isHided
isHided = not isHided
if isHided:
root.hideButton.pack_forget()
else:
root.hideButton.pack()
root = tkinter.Tk()
root.button = tkinter.Button(root, text = "Press me", command = hide)
root.button.pack()
root.hideButton = tkinter.Button(root, text = "Hide me", command = test)
root.hideButton.pack()

root.mainloop()
...zur Antwort

Also bei mir funktioniert das so:

  1. TreeView in z.B treeview benennen :)
  2. Test Items hinzufuegen (normalerweise würde hier ein beispiel stehen aber das wird durch den immer wieder so gut funktionierenden texteditor von gutefrage leider unterbunden)
  3. Neues Event für den DoubleClick wie du schon richtig gemacht hast.
  4. Und dann diesen wunderschönen formatierten platzsparenden code verwenden.



        private void treeview_MouseDoubleClick(object sender, MouseButtonEventArgs e)

{
(this.treeview.SelectedItem as TreeViewItem).Background = Brushes.Black;
}

Das wars auch schon. Bei fragen einfach kommentieren :)

...zur Antwort

Mh also mit Tönen in Python habe ich noch nichts gemacht aber du könntest hier mal gucken: https://wiki.python.org/moin/Audio/ ob du dort etwas findest.

Guck dir dort mal unteranderem nsound oder simpleaudio an ; ich glaube sowas suchst du: http://simpleaudio.readthedocs.io/en/latest/tutorial.html#using-numpy sieht jedenfalls gut aus 8-)

...zur Antwort

Guten Abend,

es gibt durchaus unterschiedliche möglichkeiten wie andere Nutzer schon beschrieben haben. Ich benutze ausschließlich 'format' dazu, da ich es als sehr "mächtig" empfinde aber es auch sehr gut lesen kann. (Eigene Meinung)

print("{0} {1}".format("irgendwas", "irgendwas"))

Du kannst auch die Zahlen weglassen solange du nichts kompliziertes machst.

z.B

a = [1,2,3]
print("{0[0]} {0[1]} {0[2]}".format(a))

Hier findest du mehr informationen darüber https://docs.python.org/3.1/library/string.html (7.1.3. Format String Syntax)

Regards



...zur Antwort

Ich denke mal das einfachste wäre

a = "meinstring"
a[::-1]

Hier findest du das ganze nochmal erklärt:

https://docs.python.org/2.3/whatsnew/section-slices.html

...zur Antwort

Meintest du das du das wie ein Auswahlmenü bei Wer Wird Millionär ?

Das ist jetzt natürlich nur ein Ansatz und sicher nicht perfekt:

richtigeAntwort = "b"


print("-Quiz-")
print("Wie alt sind Sie?")
print("a: Weiß ich nicht")
print("b: 10")
print("c: 30")

antwort = input(":")

if antwort == richtigeAntwort:
print("Korrekt!")
else:
print("Falsch")

Im Grunde gibst du die Antworten vor und überprüfst die Eingabe mithilfe von Verzweigungen. 

Du könntest dann die Fragen und Antworten auch noch in eine Datei schreiben und sie dann mit Python auslesen.

Regards

...zur Antwort