Ja oder nein Fragen programmieren.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Traubensaftx34
User
Beiträge: 5
Registriert: Freitag 16. September 2022, 21:42

Hallo Leute, Ich versuche schon seit ein paar Stunden herauszufinden wie ich eine ja oder nein frage stellen kann. Ich versuche ein einfaches Frage Modell zu programmieren hier ein Beispiel.

Ich habe eine Frage gestellt die beantwortet wurde danach möchte ich frage möchtest du fortfahren? Ja oder Nein?

Bei if ja soll die nächste Frage erscheinen. Bei elsfi nein soll auf Wiedersehen kommen. Bei Else bitte gültige Antwort eingeben. Allerdings bekomme ich es nicht hin das ja oder nein mit den if oder Else zu verbinden. Habt ihr eine Lösung dafür?

Ich habe erst vor kurzem angefangen Python zu lernen und versuche vieles ohne nachschlagen zu schreiben allerdings komme ich einfach nicht auf die Lösung. Schonmal danke im Voraus :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte den tatsächlichen Code zeigen, in den dafür wichtigen Code Tags - das ist der </>-Knopf im vollständigen Editor. Vorschaufunktion benutzen.

Und ohne nachschlagen kann man nicht programmieren. Natürlich schlägt man später andere Sachen nach als zu Beginn, aber warum denkst du, nachschlagen wäre schlecht?
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

Wenn Du später kein Anfänger mehr bist, dann wirst Du immer noch Fehler machen – aber eben andere. Und nachschlagen wirst Du auch, um Dich in neue Themen einzuarbeiten. Also keine andere Situation als jetzt.

Wenn Du Hilfe bei Fehlern haben möchtest, dann beschreibe die Fehler nicht nur, sondern zeige auch den Code. Das ist wichtig, denn sonst lässt Du andere raten, von denen Du möchtest, dass sie Dir helfen.

Die Chance Hilfe zu erhalten steigt, je einfacher Du es machst Dir helfen zu lassen.
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Schau doch einfach mal in die Doku zu Python.

https://docs.python.org/3/tutorial/controlflow.html
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Traubensaftx34
User
Beiträge: 5
Registriert: Freitag 16. September 2022, 21:42

Ich habe es gestern nur beschrieben weil ich nicht Zuhause war. Ich habe auch kein Problem damit Sachen nachzuschlagen, wollte nur sagen das ich mir die Sachen ein bis zwei mal ansehe um selbst zu probieren. Damit ich selbst auf die Lösung komme. Kann mir das dann besser Merken. Ich habe Zwischen den code geschrieben was ich möchte bzw versuche allerdings schaffe ich es nie. Das J oder N zu einer If or else frage umzuwandeln. Hier mein Code bis jetzt:

print("Herzlich Willkommen in Henning`s Gehaltsrechner! ")
print(" ")

stundenlohn = input("Bitte Stundenlohn eintragen: ")
hours = 8 * float(stundenlohn)

print("Wenn dein Stundenlohn " + str(stundenlohn) + "€ beträgt dann verdienst du " + str(hours) + "€ pro Tag.")
print(" ")
print("Möchtest du deinen Verdienst für mehrere Tage wissen? ")
print(" ")

Hier soll die (J/N) abfrage. also auf den :("Möchtest du deinen Verdienst für mehrere Tage wissen? ") bezogen.

Bei Ja soll es nach: days = input("Gebe die Anzahl der Tage ein: ") weiter gehen.

Bei Nein: Auf wiedersehen. Das prorgram soll danach mit tastendruck beendet werden.

für else: Bitte gültige antwort angeben.

days = input("Gebe die Anzahl der Tage ein: ")
weekdays = 8 * float(stundenlohn) * int(days)

print("Bei " + str(days) + " Arbeitstagen und einem Stundenlohn von " + str(stundenlohn) + "€ beträgt dein Brutto lohn " + str(weekdays) + "€ ." )
print(" ")
print("Möchtest du dein Aktuelles Jahresgehalt wissen? ")
print(" ")

Hier nochmal das selbe wie oben nur für:("Möchtest du dein Aktuelles Jahresgehalt wissen? ")


year = 8 * float(stundenlohn) * 365
print("Bei einem Stundenlohn von " + str(stundenlohn) + "€ beträgt dein Brutto Jahresgehalt " + str(year) + "€ .")

print("Auf Wiedersehen")

input("Drücke eine Beliebige taste zum Beenden")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich hatte doch erwähnt, dass du Code Tags benutzen musst. Warum hats du das nicht gemacht?
Traubensaftx34
User
Beiträge: 5
Registriert: Freitag 16. September 2022, 21:42

__deets__ hat geschrieben: Samstag 17. September 2022, 13:17 Ich hatte doch erwähnt, dass du Code Tags benutzen musst. Warum hats du das nicht gemacht?

Sorry ich hatte deine nachricht nicht gelsen das war als antwort auf den ersten gemeint. Ich bearbeite den text gleich.

Ich habe das Problem gelöst stehe aber schon vor dem Nächsten.

ich habe jetzt die buchstaben in zahlen gewandelt jetzt funktioniert alles. Mein problem jetzt ist nur das ich nicht weiß wie ich das continue bei else setzen kann damit der loop sich wiederholt und wieder bei der Ja oder Nein frage landet

Code: Alles auswählen

	print("Herzlich Willkommen in Henning`s Gehaltsrechner! ")
	print(" ")

	stundenlohn = input("Bitte Stundenlohn eintragen: ")
	hours = 8 * float(stundenlohn)

	print("Wenn dein Stundenlohn " + str(stundenlohn) + "€ beträgt dann verdienst du " + str(hours) + "€ pro Tag.")
	print(" ")
	choice = input("Möchtest du deinen Verdienst für mehrere Tage wissen? (J/N) ")
	print(" ")

	val = choice

	try:
   		 int_val = ord(val)
			except Exception as e:
    				print('Error:', e)

	if ord(val) == 74:
    			tage = input("Gebe die Anzahl der Tage ein: ")

	elif ord(val) == 78:
  		  input("Auf Wiedersehen")
    			quit()

	else:
    		input("bitte gültige Antwort geben")


	weekdays = 8 * float(stundenlohn) * int(tage)

	print("Bei " + str(tage) + " Arbeitstagen und einem Stundenlohn von " + str(stundenlohn) + "€ beträgt dein Brutto lohn "+ str(weekdays) + "€ ."  )
	print(" ")
	print("Möchtest du dein Aktuelles Jahresgehalt wissen? ")
	print(" ")
	input("Drück Enter zum Fortfahren")
	print(" ")
	year = 8 * float(stundenlohn) * 365
	print("Bei einem Stundenlohn von " + str(stundenlohn) + "€ beträgt dein Brutto Jahresgehalt " + str(year) + "€ .")

	print("Auf Wiedersehen")

	input("Drücke eine Beliebige taste zum Beenden")
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Traubensaftx34: Man sollte keine Tabs und Leerzeichen mischen, jetzt sieht das falsch eingerückt aus. Konvention sind vier Leerzeichen pro Ebene, und keine Tabs.

Ein Leerzeichen auf einer Zeile auszugeben ist nicht wirklich sinnvoll, das sieht ja keiner. Man kann für eine Leerzeile einfach `print()` ohne Argument(e) aufrufen.

Gewöhne Dir am besten gleich sinnvolle Namen an. Lies mal die Zeile wo `hours` ausgegeben wird laut vor. Das klingt falsch oder? Man verdient keine Stunden pro Tag. Bei `hours` erwartet der Leser eine Anzahl von Stunden oder eine Liste mit Stundenangaben, aber keinen Geldbetrag. Und `year` steht auch nicht für ein Jahr, also beispielsweise 2022, sondern ebenfalls für einen Geldbetrag.

Warum ``val = choice``? Wenn man einen Wert an einen Namen binden möchte, macht es keinen Sinn den vorher an einen anderen Namen zu binden, der dann überhaupt nicht verwendet wird. Wobei `val` kein guter Name ist. Zum einen weil es eine kryptische Abkürzung ist (oder ein Vorname), zum anderen war `choice` wesentlich passender als Beschreibung was der Wert bedeutet als ein nichtssagendes „Wert“.

Warum `ord()` und dann der Vergleich mit einer kryptischen Zahl? Die meisten Leute haben die ASCII oder gar die Unicode-Codepoint-Tabelle nicht im Kopf und müssen erst einmal nachschlagen was das bedeuten soll.

Die Ausnahmebehandlung ist viel zu breit angelegt. Man behandelt nur Ausnahmen die man auch erwartet und nicht einfach *alle*.

`int_val` wird danach auch gar nicht mehr verwendet, dafür wird die Umwandlung danach noch zweimal gemacht. Das ist also unnötige Arbeit. Aber wie gesagt: Die Umwandlung in eine Zahl ist eh keine gute Idee.

`quit()` gibt es eigentlich gar nicht. Die Funktion ist für die interaktive Python-Shell gedacht, nicht für Programme. Du solltest auch gar nicht erst anfangen solche Notausgänge, oder auch ``continue`` zu verwenden, um Dich um einen sauberen Programmablauf zu drücken. Wenn eine Funktion zu kompliziert wird, weil da zu viele ``if``s und Schleifen verschachtelt sind, teil die in kleinere, übersichtlichere Funktionen auf.

Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.

Am Programmende sollte der Benutzer nicht noch mal die Eingabetaste drücken müssen um das Programm tatsächlich zu beenden. So etwas nervt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Traubensaftx34
User
Beiträge: 5
Registriert: Freitag 16. September 2022, 21:42

__blackjack__ hat geschrieben: Samstag 17. September 2022, 13:56 @Traubensaftx34: Man sollte keine Tabs und Leerzeichen mischen, jetzt sieht das falsch eingerückt aus. Konvention sind vier Leerzeichen pro Ebene, und keine Tabs.

val = choice war aus einem vorherigen versuch.

Warum `ord()` und dann der Vergleich mit einer kryptischen Zahl? Die meisten Leute haben die ASCII oder gar die Unicode-Codepoint-Tabelle nicht im Kopf und müssen erst einmal nachschlagen was das bedeuten soll. = weil das die einzige lösung ist die ich online gesehen habe die ich verstanden habe und umsetzen konnte.

`int_val` war in der formel zur umwandlung von buchstaben mit drin. Es wurde aber nicht aufgeschlüßelt worauf sich das bezieht.

`quit()` gibt es eigentlich gar nicht. Die Funktion ist für die interaktive Python-Shell gedacht, nicht für Programme. Du solltest auch gar nicht erst anfangen solche Notausgänge, oder auch ``continue`` zu verwenden, um Dich um einen sauberen Programmablauf zu drücken.

ich versuche mich auch nicht davor zu drücken ich versuche nur anleitungen zu benutzen die ich finde um dahin zu kommen wie ich mir das vorstelle. und quit() und continue sind zwei der sachen. Ich bin auch immer noch auf der suche nach der möglichkeit einen loop bei falscher antwort, neu zu starten.

Ich nehme deine Tipps gerne an allerdings möchte ich auch erwähnen das ich das jetzt wirklich erst seit 3 tagen machen. :) Das ich alle begriffe oder variablen richtig benennen kann muss ich noch lernen. Keinen direkten Snsprechpartner für fragen zu haben ist schwierig weil online gibt es 10.000 anleitungen aber alle werden anders beschrieben oder ausgeführt.
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Traubensaftx34: Du musst eine Schleife nicht neu starten, das passiert von alleine am Schleifenende das wieder zum Anfang gesprungen wird. Du musst die Schleife *verlassen* wenn sie *nicht* wiederholt werden soll. Dafür gibt es ``break``.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten