Syntaxerror und Srings

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
GuardDog

Hallo Leute,

ich habe hier diesen Code:

Code: Alles auswählen

import time, os, lcddriver

lcd = lcddriver.lcd()

def get_cpu_temp():
        tempFile = open("/sys/class/thermal/thermal_zone0/temp")
        cpu_temp = tempFile.read()
        tempFile.close()
        return float(cpu_temp)/1000

def get_cpu_speed():
        tempFile = open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")
        cpu_speed = tempFile.read()
        tempFile.close()
        return float(cpu_speed)/1000
    
lcd.lcd_clear()

while True:
    get_cpu_temp
    get_cpu_speed
    line1 = "CPU Temp:" and cpu_temp
    line2 = "CPU Speed:" and cpu_speed
    lcd.lcd_display_string(line1, 1)
    lcd.lcd_display_string(line2, 2)
    time.sleep(5)
und möchte erstens Fragen wie man einen String und eine Variable "zusammenpackt" (Habe das jetzt mit and gemacht, hoffe es geht.)
und zweitens: ich bekomme folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "cpu.py", line 21, in <module>
    line1 = "CPU Temp:" and cpu_temp
NameError: name 'cpu_temp' is not defined
obwohl ich "cpu_temp" doch in Zeile 7 definiert und in 219 aufgerufen habe.

Kann mir jemand helfen?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das geht nicht mit and. Sondern mit format. Ein Blick ins Python Tutorial macht das klar.

Funktionen muss man auch aufrufen. Und ihre Rückgabewert an einen Namen binden.

Du kannst nicht durch raten programmieren. Wenigstens das offizielle Tutorial einmal durcharbeiten sollte schon sein.
GuardDog

Im Endeffekt fällt mir zumindest das mit den Funktionen auf, jedoch weiß ich nicht, wie man deren Rückgabewert an Namen bindet. Könntest du/ihr mir helfen? Echt peinlich! Und danke für den Tipp mit Format.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@GuardDog: genau das machst Du doch schon in Zeile 6, 7, 12 und 13.
GuardDog

Ich war mir nicht sicher ob
blabla = return float(cpu_speed)/1000
oder
blabla = float(cpu_speed)/1000

und dann einfach ersetzten, also anstatt von return?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@GuardDog: weder noch, Funktionsaufrufe sehen so aus:

Code: Alles auswählen

ergebnis = function(parameter)
GuardDog

Nachdem ich angefangen habe nachzudenken, habe ich nun diesen Code erstellt. Nun bekomme ich "Float not iterable!", hier bin ich mit meinem Wissen am ende!

[codebox=pycon file=Unbenannt.txt]
import time, os, lcddriver

lcd = lcddriver.lcd()

def get_cpu_temp():
tempFile = open("/sys/class/thermal/thermal_zone0/temp")
cpu_temp = tempFile.read()
tempFile.close()
return float(cpu_temp)/1000

def get_cpu_speed():
tempFile = open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")
cpu_speed = tempFile.read()
tempFile.close()
return float(cpu_speed)/1000

lcd.lcd_clear()

while True:
lcd.lcd_display_string(get_cpu_temp(), 1)
lcd.lcd_display_string(get_cpu_speed(), 2)
time.sleep(5)
[/code]
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@GuardDog: wenn gar nichts mehr hilft, geh zum Code zurück der noch funktioniert hat und schau Schritt für Schritt nach, was Du verändert hast.
Antworten