Brauche Hilfe mit kleinem "Zahleneingabe-Script"

Code-Stücke können hier veröffentlicht werden.
Antworten
djeasily
User
Beiträge: 1
Registriert: Sonntag 27. Oktober 2013, 13:06

####Liebe Alle

Ich habe gerade dieses kleine Programm hier geschrieben und soweit funktioniert alles bestens.

Was ich jetzt noch tun möchte ist --> sobald jemand eine Zahl eingibt (raw_input), die er bereits einmal eingegeben hat, möchte ich, dass das Programm beendet wird, respektive möchte ich dann mit print etwas schreiben wie : "print Sie haben diese Zahl bereits einmal eingegeben. Sie können jede Zahl nur einmal eingeben". Danach sollte das Programm abgebrochen werden.

Kann mir jemand sagen, wie ich das machen kann? (habe ja eine Zahlenliste erstellt unten..eigentlich müsste ich ja nur überprüfen, ob der raw input schon in dieser zahlenliste ist oder nicht und falls ja, dann das Programm abbrechen. Weiss aber leider echt nicht wie.) ####

Code: Alles auswählen

print 'Please enter a number (from 1 to 9):'

value = 1
counter = 0
zahlenliste = []


while value < 50:
	
	input=int(raw_input())
	
	if input <1 :
		print 'error'
		print 'Please enter a number (from 1 to 9):'
		input = int(raw_input())
	elif input >10:
		print 'error'
		print 'Please enter a number (from 1 to 9):'
		input = int(raw_input())
	
	else:
		
		result = input * value
		value = result
		counter = counter +1
		zahlenliste.append(input)
        print 'Please enter a number (from 1 to 9):'
                
   
	
print 'You have reached a value over 50.'
print '\n''Anzahl der getaetigten Eingaben'
print counter
print 'Welches war die kleinste Zahl, die du eingegeben hast?'
print min(zahlenliste)
print 'Welches war die groesste Zahl, die du eingegeben hast?'
print max(zahlenliste)
Zuletzt geändert von Anonymous am Sonntag 27. Oktober 2013, 13:28, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@djeasily: Mit dem ``in``-Operator kann man testen ob ein Wert in einer Liste, beziehungsweise allgemein in einem iterierbaren Objekt, enthalten ist.

Der Code ist schlecht organisiert, da sind viel zu viele Wiederholungen enthalten. Der Text was eingegeben werden soll und das ``raw_input()`` dazu sollte man nur *einmal* an der passenden Stelle im Quelltext stehen haben. Und zwar am Anfang der ``while``-Schleife.

Den Test auf den Eingabebereich kann man zu einer Bedingung zusammenfassen wenn man als Reaktion sowieso das gleiche in beiden Fällen macht. Man kann in Python Vergleichsoperatoren verketten, also in diesem Fall ``if not (0 <= input < 10):``. Wobei `input` kein guter Name ist, da er mit der eingebauten `input()`-Funktion kollidiert.

`result` ist eine überflüssige Zwischenvariable.

`counter` ist unnötig weil das immer den gleichen Wert hat wie die Länge der `zahlenliste` und den Wert kann man auch mit der `len()`-Funktion ermitteln. Bei redundanten Informationen besteht immer die Gefahr, dass man einen Fehler macht und die Werte nicht mehr übereinstimmen.

Konkrete Datentypen sollten nicht in Namen stehen. Das macht es schwieriger den Datentyp zu ändern. Denn dann muss man entweder überall den Namen ändern, oder man hat falsche und damit irreführende Namen im Quelltext. Wenn es sich nicht um so wenige mögliche Werte handelt wäre zum Beispiel eine Menge (`set`) effizienter als eine Liste weil der ``in``-Operator dort schneller ist.

Der Name `zahlenliste` ist auch ein wenig zu generisch, der sagt nichts darüber aus was die Zahlen im Kontext des Programms *bedeuten*. Genau das will man ja aber eigentlich wissen wenn man Quelltext liest. So etwas wie `bereits_bekannte_zahlen` wäre passender. Man sollte sich auch auf eine (natürliche) Sprache bei der Benennung festlegen. Vorzugsweise Englisch, weil der Rest der Programmiersprache, und der Standardbibliothek, und auch den Modulen von Drittanbietern in Englisch verfasst sind. Selbst in den Ausgaben für den Benutzer mischst Du Deutsch und Englisch.
Antworten