Seite 1 von 1

Probleme bei meinem ersten Programm in Python

Verfasst: Sonntag 17. Januar 2016, 13:18
von MrWasabi
Wie schon gesagt habe ich ein Problem mit meinem ersten Projet Hallo.py. Das Programm macht eingentlich nicht wirklich was außer dich etwas zu fragen, aber es soll, falls falsche Antworten gegebnen werden, erneut fragen. Mein Problem ließe sich einfach durch einen Goto Befehl lösen, da es den aber in Python nicht gibt komme ich nicht weiter.

Danke schonmal im Voraus

Code: Alles auswählen

#!/usr/bin/env python 
# -*- coding: utf-8 -*-
import time 

d = "Das ist schön"
print ("Heyho schön dich zu sehen")
meinName = input("Wie ist dein Name? ")
try:
	x = int(input("Auf einer Skala von 1 bis 10 - Wie gehts dir " + meinName +"? "))
except ValueError:
	# Kommentar: Hier soll das programm nach einer neuen Antwort fragen solange der angegebene Wert kein int wert ist
	time.sleep(3)
	

if (x >= 8 and x < 11):
	print (d)
elif (x >= 5 and x < 11):
	print ("naja immer noch besser als nichts") 
elif (x < 5 and x > 0):
	print ("lass dich nicht unterkriegen!") 
else:
	while x < 1 or x > 10:
		try:
			x = int(input("von einer skala von 1 bis 10... also nochmal "))
		except ValueError:
			# Kommentar: Hier das selbe wie oben
			time.sleep(3)
		if (x >= 8 and x < 11):
			print (d)
			break
		elif (x >= 5 and x < 11):
			print ("naja immer noch besser als nichts") 
			break
		elif (x < 5 and x > 0):
			print ("lass dich nicht unterkriegen!") 
			break
	pass
time.sleep(10)

Re: Probleme bei meinem ersten Programm in Python

Verfasst: Sonntag 17. Januar 2016, 13:28
von Sirius3
@MrWasabi: while-Schleifen kennst Du doch schon. Statt aber alles zu kopieren, solltest Du die Schleife vor den ganzen ifs setzen, so dass dort schon garantiert ist, dass x im gewünschten Bereich liegt.

Re: Probleme bei meinem ersten Programm in Python

Verfasst: Sonntag 17. Januar 2016, 14:01
von MrWasabi
aber es gibt doch keine while schleife die abfrägt ob der angebene Wert ein integer ist, oder?

Re: Probleme bei meinem ersten Programm in Python

Verfasst: Sonntag 17. Januar 2016, 14:12
von BlackJack
@MrWasabi: Code und Daten *nicht* zu wiederholen ist so wichtig das es einen eigenen Namen hat: Das DRY-Prinzip → *D*on't *R*epeat *Y*ourself.

Bei `print()` solltest Du kein Leerzeichen zwischen dem Funktionsnamen und der öffnenden Klammer machen. Das machst Du doch bei den anderen Funktionen auch nicht.

Bei den Bedingungen bei ``if`` und ``elif`` gehören keine Klammern hin. Ausserdem könnte man hier die Ausdrücke vereinfachen in dem man Operatorverkettung verwendet. Zum Beispiel ``8 <= x < 11`` statt ``8 >= x and x < 11``.

`d` und `x` sind schlechte Namen weil sie dem Leser nicht verraten was der Wert der daran gebunden wird, im Programm bedeutet. Aber genau das will ein Leser ja wissen um den Code zu verstehen, also auch die Stellen an denen ein Name verwendet wird, ohne erst suchen zu müssen wo er an welchen Wert gebunden wurde.

`meinName` sollte als `mein_name` geschrieben werden. Siehe den Style Guide for Python Code.

``pass`` macht in einem Zweig in dem Code steht, keinen Sinn.

Zur letzten Frage: Man schreibt in solchen Fällen eine ”Endlosschleife” (``while True:``) die solange durchlaufen wird bis man in der Schleife das Ergebnis hat was man braucht und sie dann abbricht. Entweder ``break`` oder im Falle einer Funktion manchmal auch mit ``return``.