Mini Rechenprogramm mit Python schreiben

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
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

Hallo zusammen,

entschuldigt meine Unwissenheit. Ich hab meine erste Programmierungsvorlesung gehabt und soll ein Miniprogramm schreiben.

Die Aufgabenstellung:
Schreiben Sie je ein Python-Programm, das drei ganze Zahlen x, y und z von der Konsole einliest und Folgendes berechnet und auf der Konsole ausgibt:
Die Anzahl der verschiedenen Werte. zB. x=4, y=2, z = 4 --> Ergebnis = 2

x = input ()
y = input ()
z = input ()

if x ==y ==z:
Ergebnis = 1
print (Ergebnis)
elif x == y != z or x == z != y or y == z != x:
Ergebnis = 2
print (Ergebnis)
else x != y != z
Ergebnis = 3
print (Ergebnis)

Geht das in die richtige Richtung?


Würde mich freuen, wenn mir jemand helfen kann.

Mit freundlichen Grüßen
StareDog
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

normalerweise würde man das mit einem Set machen, das ist wesentlich einfacher als da, was du machst. Set gehört zu den Grunddatentypen von Python. Hatte ihr das in der Vorlesung schon?

Gruß, noisefloor
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@StareDog: laut Aufgabenstellung sollst Du ganze Zahlen verwenden (da wären dann i, j, k üblicher als x, y, z, meinetwegen noch a, b, c).

Dann wäre noch ganz nett, den Nutzer wissen zu lassen, was er denn eingibt.

Die Syntax von »else« ist falsch und beim »elif« braucht man nicht das zu prüfen, was durch die erste Bedingung sowieso schon gegeben ist. Ist eine Zeile in allen if/elif/else-Blöcken enthalten, kann man sie auch effizienter nach den Blöcken schreiben.
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

noisefloor hat geschrieben:Hallo,

normalerweise würde man das mit einem Set machen, das ist wesentlich einfacher als da, was du machst. Set gehört zu den Grunddatentypen von Python. Hatte ihr das in der Vorlesung schon?

Gruß, noisefloor
Danke für die Antwort!

Nein,set sagt mir (noch) nichts. Kannst du mir sagen wie das denn mit set gehen/aussehen würde?

Gruß StareDog
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@StareDog: Du solltest die Aufgabe mit den Mitteln lösen, die Du schon kennst.

Code: Alles auswählen

print("Ergebnis = {}".format(
    len(set(input("{} = ".format(n)) for n in "xyz"))
))
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

Sirius3 hat geschrieben:@StareDog: laut Aufgabenstellung sollst Du ganze Zahlen verwenden (da wären dann i, j, k üblicher als x, y, z, meinetwegen noch a, b, c).

Dann wäre noch ganz nett, den Nutzer wissen zu lassen, was er denn eingibt.

Die Syntax von »else« ist falsch und beim »elif« braucht man nicht das zu prüfen, was durch die erste Bedingung sowieso schon gegeben ist. Ist eine Zeile in allen if/elif/else-Blöcken enthalten, kann man sie auch effizienter nach den Blöcken schreiben.
Danke für die Nachricht Sirius.

So sieht es mittlerweile aus.

x = input ("x")
y = input ("y")
z = input ("z")

if x ==y ==z:
Ergebnis = 1
elif x == y != z or x == z != y or y == z != x:
Ergebnis = 2
else:
Ergebnis = 3

print (Ergebnis

print (Ergebnis) habe ich jetzt hinten angestellt, weil diese zeile sich wiederholt, wie du meintest.

warum muss ich elif nicht prüfen? die Bedingungen sind doch durch die erste Bedingung noch nicht gegeben? kannst du erklären was du meinst?

wenn ich x==y==z und x!=y!=z prüfe, könnte ich theoretisch elif weglassen, da wenn diese 2 Bedingungen falls ungültig ja nur noch den elif fall zulassen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ein Set reduziert eine Sequenz darauf, dass jedes Element genau 1x vorkommt. Allg. Beispiel:

Code: Alles auswählen

>>> a = set([1, 2, 3])
>>> len(a)
3
>>> b = set([2, 4, 2])
>>> len(b)
2
>>> b
{2, 4}
>>> c = '12341234'
>>> set(c)
{'3', '1', '2', '4'}
>>>
Aber wie Sirius3 schon sagt: wenn du set() nicht kennst, dann ist das keine Lösung für dich.

Plan B: hatten ihr schon Listen und den `in` Operator?

Gruß, noisefloor
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

Sirius3 hat geschrieben:@StareDog: Du solltest die Aufgabe mit den Mitteln lösen, die Du schon kennst.

Code: Alles auswählen

print("Ergebnis = {}".format(
    len(set(input("{} = ".format(n)) for n in "xyz"))
))
ja das stimmt. trotzdem danke!
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

noisefloor hat geschrieben:Hallo,

ein Set reduziert eine Sequenz darauf, dass jedes Element genau 1x vorkommt. Allg. Beispiel:

Code: Alles auswählen

>>> a = set([1, 2, 3])
>>> len(a)
3
>>> b = set([2, 4, 2])
>>> len(b)
2
>>> b
{2, 4}
>>> c = '12341234'
>>> set(c)
{'3', '1', '2', '4'}
>>>
Aber wie Sirius3 schon sagt: wenn du set() nicht kennst, dann ist das keine Lösung für dich.

Plan B: hatten ihr schon Listen und den `in` Operator?

Gruß, noisefloor
ne wir hatten bis jetzt fast noch gar nichts in der vorlesung. input(), print(), float() das waren so ziemlich alle befehle. ich habe vor letzter woche noch nie selbst programmiert. dauert noch ein wenig bis ich diese sachen verstehe :)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ok - dann musst du doch den Ansatz über "if... elif ... else ..." wählen.

Gruß, noisefloor
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@StareDog: Du vergleichst immer noch Strings und keine Ganzzahlen. Was ich mit dem elif meinte ist, dass wenn der Fall `x == y == z` bereits durch das if ausgeschlossen ist, dann folgt aus x == y zwangsläufig y != z. Aus x != y != z folgt aber nicht x != z.
Antworten