Forum: PC-Programmierung python Variable hochzählen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mike (Gast)


Lesenswert?

Hallo an alle python Nutzer,

ich möchte in einer Funktion eine Variable hochzählen und dieser
Wert soll dann auch ausgegeben werden.
1
test = 0:
2
3
def func(...):
4
   test = test + 1
5
   print("Value: " + str(test))

Leider funktioniert dies nicht. Was mache ich da falsch?

von Andi (Gast)


Lesenswert?

Mike schrieb:
> Was mache ich da falsch?

Z.B. die Dokus nicht gelesen zu haben?

https://www.w3schools.com/python/python_variables_global.asp

von Mike (Gast)


Lesenswert?

Danke aber irgendwie klappt es bei mir nicht.

von Andi (Gast)


Lesenswert?

Mike schrieb:
> Danke aber irgendwie klappt es bei mir nicht.

Kein Wunder, wenns denn schon bei den grundlegenden Syntaxkenntnissen 
mangelt:
1
test = 0:

Poste mal ein lauffähiges Programmschnipsel.

von Mike (Gast)


Lesenswert?

Ist extrem viel Code. Ich brauche eigentlich nur ein klines Beispiel wie 
ich eine Variable hochzählen kann und auch wie man in den Funktionen 
Daten in eine Textdatei ablegt.

von Andi (Gast)


Lesenswert?

Mike schrieb:
> Ist extrem viel Code. Ich brauche eigentlich nur ein klines Beispiel wie
> ich eine Variable hochzählen kann und auch wie man in den Funktionen
> Daten in eine Textdatei ablegt.

Dir ist es zuviel Aufwand ein kurzes Programmschnipsel mit genau der 
Funktion aufzubereiten?
Dir ist es zuviel Aufwand die von mir verlinkte Doku mit genau den 
passenden Beispielen (ok, nur mit Text, aber egal) durchzulesen?

Dann mag ich auch nicht weiter darüber nachdenken...

von Roland F. (rhf)


Lesenswert?

Hallo,
Mike schrieb:
> Was mache ich da falsch?
1
test = 0
2
 
3
def func():
4
    global test
5
    test = test + 1
6
    print("Value: " + str(test))
7
8
func()

rhf

von Mike (Gast)


Lesenswert?

So hier ein Beispiel:
1
import socket
2
import sys
3
import ipaddress
4
import re
5
import time
6
import paho.mqtt.client as mqtt
7
import uuid
8
import binascii
9
from random import *
10
from datetime import datetime
11
12
IP_ADDRESS = "xxx.xxx.xxx.xxx"
13
PORT = 30100
14
15
def write_data_to_textfile(txt): 
16
     with open('test.txt','w') as f: 
17
         f.write(txt) 
18
19
def on_connect(client, userdata, flags, rc):
20
    print("Connected with result code " + str(rc) + "\n")
21
22
def on_message(client, userdata, msg):
23
    print("Msg recieved from others: "+ message.payload.decode()  + " TIMESTAMP: " + str(time))
24
25
def on_message_from_udp_port_40302(client, userdata, message):
26
    time = datetime.now()
27
    write_data_to_textfile("Test"))
28
    print("\nData " + message.payload.decode() + " TIMESTAMP: " + str(time))
29
30
client = mqtt.Client()
31
client.on_connect = on_connect
32
client.on_message = on_message
33
34
client.connect(IP_ADDRESS, PORT, 60)
35
36
client.subscribe("test", qos=1)
37
38
client.message_callback_add("test", on_message)
39
40
client.loop_forever()

von Mike (Gast)


Lesenswert?

Hab ein Fehler gesehen. Hier die korrigierte Version:
1
import socket
2
import sys
3
import ipaddress
4
import re
5
import time
6
import paho.mqtt.client as mqtt
7
import uuid
8
import binascii
9
from random import *
10
from datetime import datetime
11
12
IP_ADDRESS = "xxx.xxx.xxx.xxx"
13
PORT = 30100
14
15
def write_data_to_textfile(txt): 
16
     with open('test.txt','w') as f: 
17
         f.write(txt) 
18
19
def on_connect(client, userdata, flags, rc):
20
    print("Connected with result code " + str(rc) + "\n")
21
22
def on_message(client, userdata, msg):
23
    print("Msg recieved from others: "+ message.payload.decode()  + " TIMESTAMP: " + str(time))
24
25
def on_message_test(client, userdata, message):
26
    time = datetime.now()
27
    write_data_to_textfile("Test"))
28
    print("\nData " + message.payload.decode() + " TIMESTAMP: " + str(time))
29
30
client = mqtt.Client()
31
client.on_connect = on_connect
32
client.on_message = on_message
33
34
client.connect(IP_ADDRESS, PORT, 60)
35
36
client.subscribe("test", qos=1)
37
38
client.message_callback_add("test", on_message_test)
39
40
client.loop_forever()

von Andi (Gast)


Lesenswert?

Roland F. schrieb:
> rhf

@Mike: Bedank dich bei Roland dass er dir das Denken abgenommen hat...

von Andreas M. (amesser)


Lesenswert?

Mike schrieb:
1
def func():
2
  test = test + 1

In Python bedeuted obiges: Lese den Wert zum Namen(Symbol) "test" aus 
dem Namensräumen "Lokal" oder "Global", addiere 1 und legen der Wert 
unter **lokalen** Namen "Test" ab.

Was Du willst ist:
1
def func():
2
  global test
3
  test = test + 1

Und das bedeutet: Lese den Wert zum Namen "test" aus dem Namensraum 
"Global", addiere 1 und legen der Wert unter **globalen** Namen "test" 
ab.

von Mike (Gast)


Lesenswert?

Danke Roland. Kurz danach habe ich gepostet.

Das mit dem schreiben in eine Datei funktioniert noch nicht in der 
Funktion.

von Mike (Gast)


Lesenswert?

Beispiel Datei schreiben:
1
class FileOperations:
2
    def open_file(self):
3
        self.file = open('test.txt', 'r+')
4
5
    def write_file(self):
6
        self.file.write("Test") 
7
8
Benutzung:
9
    fileHandler = FileOperations()
10
    fileHandler.open_file()
11
    fileHandler.write_file()

Allerdings weiß ich hier nicht wie ich da ein Text von außen zuweisen 
kann.

von Sascha W. (sascha-w)


Lesenswert?

Warum willst du den Dateizugriff noch mal in eine Klasse packen?
w+ hängt an die Datei an
am Ende muss noch close aufgerufen werden, erst dann werden die 
Änderungen an der Datei auch sichtbar.

Sascha

von Ergo70 (Gast)


Lesenswert?

Und in einem with block kann man das close() auch noch weglassen. File 
ist ein context manager.

von M.A. S. (mse2)


Lesenswert?

Mike schrieb:
> Allerdings weiß ich hier nicht wie ich da ein Text von außen zuweisen
> kann.
Was meinst Du mit 'von außen'?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.