mein erstes Programm und direkt fehler, die ich nicht kenne

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
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

Also ich hab jetzt mein erstes Programm fertig, es läuft aber nicht und ich weis nicht wieso:

Code: Alles auswählen

import sys
tage=("dienstag","mittwoch","donnerstag","freitag","samstag","sonntag","montag")
schalt=0
montag=0
dienstag=0
mittwoch=0
donnerstag=0
freitag=0
samstag=0
sonntag=0
x=0

while x<50:  #Kleine Schleife um den Bildschirm zu saeubern.
      
        print"\n"
        x=x+1
      
# Kleines Eingabemenu

print "\t\t\t***Gregorianischer Kalender***\n"
print "\t\t\t******************************\n\n"
print "\t\t\t\t***Auswahl***\n\n"
print "\tWas möchten Sie machen\n\n"
print "\t\t<1> Berechnen des häufigsten Tages nach Eingabe einer Zahl\n"
print "\t\t<2> Berechnen des Wochentages nach Eingabe eines Datums\n\n"
print "\t Eingabe > "


eingabe=input()
if eingabe != 1 and eingabe != 2: # Kleine Eingabekontrolle
    
      print "\n\n\t\tSie haben eine falsche Eingabe getätigt. Programm wird beendet.\n\n";
      sys.exit
    

if eingabe==1:
	routine() # Aufrufen der Subroutine fuer den Menupunkt 1
if eingabe==2:
	haupt()   # Aufrufen der Subroutine fuer den Menupunkt 2

def bubble(list):
	for x1 in range(7):
		for y1 in range(7):
			if list[x1]<list[y1]:
				tempi=list[x1]
				list[x1]=list[y1]
				list[y1]=tempi
	return list
             


def routine():          #Routine die den häufuigsten Wochentag berechnet
             print "Zu welchem Tag im  Monat moechten sie den haeufigsten Wochentag wissen?\n\n"
             day=input()
             jahr=1
             month=0
             print day,"\n"
             for zahl in range(13):
		     if zahl <1:
			     zahl=1
		
	      month=month+1
              print day, month, jahr, "\n"

                          berechne()
                          if bla==0:
				  dienstag=dienstag+1
			          print "Di\n"
                          if bla==1:
				  mittwoch=mittwoch+1
				  print "Mi\n"
                          if bla==2:
				  donnerstag=donnerstag+1
				  print "Do\n"
                          if bla==3:
				  freitag=freitag+1
				  print "Fr\n"
                          if bla==4:
				  samstag=samstag+1
				  print "sa\n"
                          if bla==5:
				  sonntag=sonntag+1
				  print "SO\n"
                          if bla==6:
				  montag=montag+1
				  print "mo\n"

                  

             zahlen=[montag , dienstag , mittwoch,  donnerstag , freitag , samstag,  sonntag]
             richtig=bubble(zahlen)
             print zahlen[0],zahlen[1],zahlen[2],zahlen[3],zahlen[4],zahlen[5],zahlen[6]
             if richtig[6] == montag:
		     print "Der häufigste Tag war ein Montag\n"
             elif richtig[6] == dienstag:
		     print "Der häufigste Tag war ein Dienstag\n"
             elif (richtig[6] == mittwoch:
		    print "Der häufigste Tag war ein Mittwoch\n"
             elif richtig[6] == donnerstag:
		    print "Der häufigste Tag was ein Donnerstag\n"
             elif richtig[6] == freitag:
		    print "Der häufigste Tag war ein Freitag\n"
             elif richtig[6] == samstag:
		    print "Der häufigste Tag war ein Samstag\n"
             elif richtig[6] == sonntag:
		    print "Der häufigste Tag war ein Sonntag\n"
             sys.exit
            

def haupt():
           print "\n\n\t\tJahr[1..x] > " # Eingabe des Jahres mit kleiner Eingabekontrolle
           jahr=input()
           if jahr < 1:
               
                 print "\n\n\t\tDas Jahr $jahr gibt es nicht. Programm wird beendet.\n\n"
                 sys.exit
               
           print"\n\n"

           print "\t\tMonat[1..12] > " # Eingabe des Monats mit kleiner Eingabekontrolle
           month=input()
           if month < 1 or month > 12:
               
	                 print "\n\n\t\tDer Monat $month existiert nicht. Programm wird beendet.\n\n";
	                 sys.exit;
               
           print "\n\n"

           if month == 1 or month ==3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
               
		         monats_tage="1..31"
               
           elif month == 4 or month ==  6 or month ==  9 or month == 11):
               
		         monats_tage="1..30"
               
           elif month == 2 and ((jahr % 4 !=0) or (jahr % 100 == 0 and jahr % 400 != 0)):
               
		        monats_tage="1..28"
         
           elif month == 2:
               
		         monats_tage="1..29"
               

           print "\t\tTag[$monats_tage] > " # Eingabe des Tages,mit Anzeige der moeglichen Eingaben
           day=input()
           if day < 1 or day >31: # Kleine Eingabekontrolle
               {
                  print "\n\n\t\tSie haben eine falsche Eingabe getätigt. Programm wird beendet.\n\n"
                     sys.exit
               }
           elif month == 2 and ((jahr % 4 !=0) or (jahr % 100 == 0 and jahr % 400 != 0)):
               
                       if  day > 28:
                            
                             print "\n\n\t\tDen $day.2.$jahr gibt es nicht. Programm wird beendet\n\n"
                             sys.exit
                            
               
           elif month == 2:
                  
                    if day > 29:
                        
                         print "\n\n\t\tDen $day.2.$jahr gibt es nicht. Programm wird beendet.\n\n"
                         sys.exit
                        
                  
           elif (month == 1 or month==3 or month==5 or month==7 or month==8 or month==10 or month==12) and (day > 31):
                
                   print "\n\n\t\tDen $day.$month gibt es nicht. Programm wird beendet.\n\n"
                   sys.exit
                
           elif month == 4 or month == 6 or month == 9 or month == 11) and day > 30:
                
                   print"\n\n\t\tDen $day.$month gibt es nicht. Programm wird beendet.\n\n"
                   sys.exit
                
           print "\n\n"

           print "\t\t\tDer $day.$month.$jahr war ein "; # Die Ausgabe des Tages :)

           berechne()
          


def round(number):  # Kleine Subroutine zum runden von Werten
           
           return int(number + 0.5)
          

def berechne: 
              if month < 3: # Vorbereitung fuer die Berechnung der Tage unter Beruecksichtigung der Schaltjahre
                  
                   schalt=day + month;
                   if jahr % 4 != 0 or (jahr % 100 == 0 and jahr % 400 != 0):
                       
                          schalt=schalt+1
                       
                  

              temp1=int((jahr-1600)/100)
              temp2=int((jahr-1600)/400)

              # Berechnung der Anzahl der Tage

              anzahl=int(jahr * 365.25) - round((13-month) * 30.6)+ day - temp1 + temp2 + schalt
              bla=$anzahl % 7 # Zahl zwischen 0 und 6 als Wochentag
             

# Ausgabe des berechneten Tages

if bla == 0:
  
     print "Dienstag\n\n"
  

if bla == 1:
  
       print "Mittwoch\n\n"
  

if bla == 2:
  
       print "Donnerstag\n\n"
  

if bla == 3:
  
       print "Freitag\n\n"
  

if bla == 4:
  
       print "Samstag\n\n"
  

if bla == 5:
  
       print "Sonntag\n\n"
  

if bla == 6:
  
       print "Montag\n\n"
Ich hoffe mir kann einer sagen wie ich den feher beheben kann und guckt bitte nach ob dort nicht noch mehr fehler sind, ich hab selber schon lange dran überlegt, aber ich weis nicht was falsch ist !
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Panic, I give up!:oops:

Hi Reggid, Ich habe mal versucht den Code zum laufen zu bringen. Ich habe es aufgegeben, aber folgendes festgestellt:
  • Die Einrückung (Indentation) ist nicht sauber.
  • Es sind Klammerfehler eingebaut. Die kann man vermeiden, wenn man einen mehr oder weniger intelligenten Editor mit Syntaxhervorhebung und Klammeranzeige verwendet.
  • Die Klammern {} gibts in C, C++, Java, etc. nicht aber in Python
  • Definitionen, auch von Funktionen, gehören an den Anfang eines Programmes.
  • Die Aufgabe sollte in viele kleine einfach zu verstehende Funktionen zerlegt werden, wie z. B. isLeapyear(year) oder wenn mans deutsch mag istSchaltjahr(jahr). Diese Funktion sollte ein True oder False zurückgeben weil man dann if isLeapYear(1900): schreiben kann. == True entfällt dann.
  • immer versuchen, logische Blöcke auch optisch sauber darzustellen. Dazu gehört, dass immer mit der gleichen Anzahl an Einrückungen gearbeitet wird. einige nehmen drei, ich nehme sogar nur zwei Zeichen. Die Schriftart Courier oder Courier New wird natürlich vorausgesetzt.
  • Kommentare sind für eine spätere Überarbeitung unbedingt erforderlich.
Hans
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

Um ehrlich zu sein, wollte ich ein Perl code in Python übersetzen, aber wie ihr seht ist es mir nicht ganz gelungen *schähm*. Ich dachte es wäre ein gute Idee, weil ich selber keine Ahnung hatte, was ich programmieren soll, also dachte ich mir übersetze ich mal etwas, aber ihr seht es ist nichts draus geworden, schade. Das Leben geht weiter!
Aber danke, dass ihr versucht habt die Fehler zu beheben, aber es ist wohl ein unmögliches Unterfagen.

mfg
reggid
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Wer wir denn gleich den Kopf in den Sand stecken.

Programmieren lernt man nicht im Vorbeigehen, egal welche Sprache. Schick mir ne email und Du bekommst von mir meine überarbeitete Version, die zwar noch nicht läuft, aber doch schon eine Eingabe zuläßt.

Hans
Antworten