Problem bei der Berechnung von Kommazahlen

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.
BlackJack

@Micky2010: In der Zeichenkette sind drei Platzhalter, Du übergibst aber nur *ein* Objekt, nämlich eine Liste. Wenn dort mehrere Objekte übergeben werden sollen, dann müssen die in einem Tupel stecken. Dann ist das nächste Problem aber, dass der dritte Platzhalter für eine Gleitpunktzahl ist, Du aber ein Tupel übergibst. Und die 3 bei den Platzhaltern ist ziemlich sicher an der falschen Stelle.

Die Werte sollte man allerdings nicht in die Zeichenkette hineinformatieren, sondern die für den verwendeten Datenbankadapter vorgesehenen Platzhalter und das zweite Argument der `execute()`-Methode benutzen.

Last but not least solltest Du das ``global`` loswerden. Werte ausser Konstanten sollten Funktionen als Argumente übergeben werden und nicht magisch irgendwo aus der Umgebung kommen.

Die Dateiendung 'dll' für eine Datenbankdatei ist etwas ungünstig. Das ist unter Windows eine übliche Endung für dynamisch ladbare Bibliotheken mit Maschinencode, beziehungsweise seit einiger Zeit auch .NET-Bytecode.
Micky2010
User
Beiträge: 34
Registriert: Donnerstag 19. Mai 2011, 17:06
Wohnort: Hessen

Das hab ich geändert, aber wenn ich warte kommt dann diese Fehlermeldung:

Code: Alles auswählen

Bitte anzahl der 1-er eingeben.(Wenn null dann 0 eingeben):
0
Bitte anzahl der 2-er eingeben.(Wenn null dann 0 eingeben):
0
Bitte anzahl der 3-er eingeben.(Wenn null dann 0 eingeben):
0
Bitte anzahl der 4-er eingeben.(Wenn null dann 0 eingeben):
5
Bitte anzahl der 5-er eingeben.(Wenn null dann 0 eingeben):
0
Bitte anzahl der 6-er eingeben.(Wenn null dann 0 eingeben):
6
Bitte Klasse eingeben:
5
Der Durchschnitt ist : 5.091
(5, 5.0909090909090908, 2011, 8, 13)
Traceback (most recent call last):
  File "C:\Dokumente und Einstellungen\*\Desktop\Ergebnis.py", line 49, in <module>
    Notenberechnung()
  File "C:\Dokumente und Einstellungen\*\Desktop\Ergebnis.py", line 46, in Notenberechnung
    connection.commit()
OperationalError: database is locked
Der Python code:

Code: Alles auswählen

import sqlite3 
import time
def Notenberechnung():
    liste = []
    for note in range(1,7):
               noten = input("Bitte anzahl der %i-er eingeben.(Wenn null dann 0 eingeben):\n" % note)
               liste.append(noten)
    klasse = input("Bitte Klasse eingeben:\n")
    nstudents = sum(liste)
    n_notsum = 0
    for y in range(0,6):
        var = liste[y]
        y_2 = var * (y + 1)
        n_notsum = n_notsum + y_2
        n_durchs = n_notsum / float(nstudents)

    print"Der Durchschnitt ist : %.3f" % n_durchs
    x = time.localtime()
    Date1 = x[0:3]
    Date2 = Date1[0]
    Date3 = Date1[1]
    Date4 = Date1[2]
    Argumente = (klasse,n_durchs,Date2,Date3,Date4)
    print Argumente
    connection = sqlite3.connect("noten_db2.db")
    cursor = connection.cursor()
    cursor.execute("Select name FROM sqlite_master") 
    row = cursor.fetchone()
    if row == None:
        cursor.execute("""CREATE TABLE noten (
        Klasse TEXT, Durchschnitt REAL, Date INTEGER, Date2 INTEGER, Date3 INTEGER)""")  
    if row != None:
        pass
    cursor.execute("""INSERT INTO noten VALUES (
    %s, %f, %d, %d, %d )"""% Argumente)
    connection.commit()

    
Notenberechnung()
Wenn die db noch nicht da war, gents einwandfrei, aber wenns die db schon ibt, dann ist meckern angesagt für Python
LG Micky2010
Errare humanum est, in errore perseverare stultum (Irren ist menschlich, im Irrtum verbleiben ist dumm)
Manus manum lavat (Eine Hand wäscht die andere)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich gebe mal einen Tipp ab: du arbeitest mit Idle?
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich tippe eher auf ein fehlendes `connection.close()` und das deshalb das lock nich aufgeraeumt wird.
Micky2010
User
Beiträge: 34
Registriert: Donnerstag 19. Mai 2011, 17:06
Wohnort: Hessen

Gut hab ich gemacht, das Programm schreibt aber immer noch nicht die neuen Daten in die DB!!

LG Micky2010
Errare humanum est, in errore perseverare stultum (Irren ist menschlich, im Irrtum verbleiben ist dumm)
Manus manum lavat (Eine Hand wäscht die andere)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

cofi hat geschrieben:Ich tippe eher auf ein fehlendes `connection.close()` und das deshalb das lock nich aufgeraeumt wird.
Deshalb mein Tipp mit Idle.
Das Leben ist wie ein Tennisball.
Micky2010
User
Beiträge: 34
Registriert: Donnerstag 19. Mai 2011, 17:06
Wohnort: Hessen

Ich arbeite mit IDLE!!!!
LG Micky2010
Errare humanum est, in errore perseverare stultum (Irren ist menschlich, im Irrtum verbleiben ist dumm)
Manus manum lavat (Eine Hand wäscht die andere)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Wie sieht denn der aktuelle Stand deines Codes aus?

Sebastian
Das Leben ist wie ein Tennisball.
Micky2010
User
Beiträge: 34
Registriert: Donnerstag 19. Mai 2011, 17:06
Wohnort: Hessen

Code: Alles auswählen

import sqlite3 
import time
def Notenberechnung():
    liste = []
    for note in range(1,7):
               noten = input("Bitte anzahl der %i-er eingeben.(Wenn null dann 0 eingeben):\n" % note)
               liste.append(noten)
    klasse = input("Bitte Klasse eingeben:\n")
    nstudents = sum(liste)
    n_notsum = 0
    for y in range(0,6):
        var = liste[y]
        y_2 = var * (y + 1)
        n_notsum = n_notsum + y_2
        n_durchs = n_notsum / float(nstudents)

    print"Der Durchschnitt ist : %.3f" % n_durchs
    x = time.localtime()
    Date1 = x[0:3]
    Date2 = Date1[0]
    Date3 = Date1[1]
    Date4 = Date1[2]
    Argumente = (klasse,n_durchs,Date2,Date3,Date4)
    print Argumente
    connection = sqlite3.connect("noten_db2.dll")
    cursor = connection.cursor()
    cursor.execute("Select name FROM sqlite_master") 
    row = cursor.fetchone()
    if row == None:
        cursor.execute("""CREATE TABLE noten (
        Klasse TEXT, Durchschnitt REAL, Date INTEGER, Date2 INTEGER, Date3 INTEGER)""")  
    if row != None:
        pass
    cursor.execute("""INSERT INTO noten VALUES (
    %s, %f, %d, %d, %d )"""% Argumente)

    connection.close()
    
Notenberechnung()

Errare humanum est, in errore perseverare stultum (Irren ist menschlich, im Irrtum verbleiben ist dumm)
Manus manum lavat (Eine Hand wäscht die andere)
Micky2010
User
Beiträge: 34
Registriert: Donnerstag 19. Mai 2011, 17:06
Wohnort: Hessen

*kleinlaut* bekomm ich bitte noch eine antwort :shock: :shock: :shock: :shock: :K :K
LG
Micky2010
Errare humanum est, in errore perseverare stultum (Irren ist menschlich, im Irrtum verbleiben ist dumm)
Manus manum lavat (Eine Hand wäscht die andere)
BlackJack

@Micky2010: Da fehlt ein `commit()` würde ich mal sagen.
Antworten