Seite 1 von 1

mein erstes Programm und direkt fehler, die ich nicht kenne

Verfasst: Donnerstag 14. November 2002, 16:24
von reggid
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 !

Verfasst: Donnerstag 14. November 2002, 20:46
von hans
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

Verfasst: Donnerstag 14. November 2002, 21:09
von reggid
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

Verfasst: Donnerstag 14. November 2002, 23:46
von hans
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