raw_input, int() und mehr

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
menace
User
Beiträge: 16
Registriert: Dienstag 9. November 2010, 08:53

Hi leute,

ich bin neu hier und bin auf diese Seite gestossen, da ich auf keine angenehme lösung komme.
Ich möchte ein raw_input programm erstellen, was:

- mir eine unbestimmte Menge an Zahlen als raw_input eingeben lässt
- den raw_input in einen String packen
- aus dem string die Daten: minimum, maximum und durchschnitt rausliest

was ich bereits habe ist der Vorschlag von einer Dateneingabe für eine bestimmte Menge an Zahlen:

Code: Alles auswählen

a = int(raw_input('Bitte eine Zahl eingeben: '))
und die umwandlung einer bestimmten Menge in einen String:

Code: Alles auswählen

string=[a, b, c, d, e, ...]
min und max ist dann nur noch ein klacks und Durchschnitt habe ich so gelöst:

Code: Alles auswählen

mean = sum(string)%len(string)
print 'Durchschnitt: ', mean
Wo ich nicht weiterkomme:
Wie mache ich die Eingabe vom Raw_input damit ich nicht unzählige zeilen schreiben muss und wie kann ich verhindern, dass das Programm abstürzt wenn ich einen Blank anstatt einer Zahl eingebe?

Vielen Dank im Voraus,
Greez menace
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

1. du legst da kein String sondern eine Liste an.
2. nutze eine while-schleife mit raw_input anweisungen
3. mit try: ... except ValueError:.. kannst du eine falsche Umwandlung abfangen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
menace
User
Beiträge: 16
Registriert: Dienstag 9. November 2010, 08:53

wie genau sollte die while schleife aussehen?
bin noch ziemlich neu im ganzen python universum
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

So könnte das ganze zB aussehen

Code: Alles auswählen

if __name__ == "__main__":
    list_ = []
    while True:
        answer = raw_input("Zahl: ")
        if answer == "e":
            break
        
        try:
            list_.append(int(answer))
        except ValueError:
            print("Ung\xfcltige Eingabe!")

    result = sum(list_) / len(list_)
    print("Durschnitt: {0}".format(result))
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
menace
User
Beiträge: 16
Registriert: Dienstag 9. November 2010, 08:53

Funktioniert perfekt!
danke vielmals!

noch eine kleine Anschlussfrage:
gibt es noch eine andere möglichkeit das minimum und das maximum aus der liste zu lesen ausser dem offensichtlichem

Code: Alles auswählen

min = min(list_)
print 'Minimum: ', min
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Sicher, aber wozu ?
zB könntest du jedes Element durchgehen und mit den anderen Vergleichen oder die Liste sortieren lassen und dann das erste oder letzte element ausgeben.

Aber das ist im Prinzip unfug, dafür gibt es ja schließlich diese build-in Funktion.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
menace
User
Beiträge: 16
Registriert: Dienstag 9. November 2010, 08:53

ja das mit dem sortieren wäre ne gute möglichkeit. weil ich brauche eigentlich immer nur das 2. grösse element aus der gesamten liste.
wie könnt ich das machen mit dem sort?

list_.sort()

würds mir schonmal sortieren und ich bräucht ja die originale liste nicht mehr. wie lese ich da jedoch ein bestimmtes element raus? (das 2. höchste und das kleinste)

gruss menace

* EDIT: Hat sich erledigt mittels

Code: Alles auswählen

print list_[0]
print list_[-1]
Danke euch nochmal vielmals! Ich hoffe meine stumpfsinnige arbeit erleichtert sich so etwas :D
Zuletzt geändert von menace am Dienstag 9. November 2010, 10:29, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

list_.sort()
lowest, second_to_highest = list_[0], list_[-2]
$GRUNDLAGEN_GEFASEL
Antworten