• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Python] Strings in einem Tuple in Integer umwandeln

HanZ

Bekannter NGBler

Registriert
16 Juli 2013
Beiträge
1.061
Hallo zusammen,

gegeben ein Tuple

t1 = ('1', '2', '3')

dieses soll umgewandelt werden, sodass die Nummern nicht mehr als String, sondern als Integer in dem Tuple stehen, also

t2 = (1, 2, 3)

Gibt es dafür einen einfach Befehl? Es geht darum, Tuple miteinander zu vergleichen, aber die Vergleichsoperation gibt was falsches zurück, sofern die Elemente Strings sind.

lg
HanZ
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Da du keine Werte in einem Tuple direkt überschreiben kannst, mußt du es neu anlegen.

Hier mal ein Beispielcode, auch mit Tests das man Tuples auch miteinander vergleichen kann zur Demonstration - kommt natürlich darauf an was genau du denn vergleichst - ein direkter Vergleich ist aber möglich.

Python 3:
[src=python]t1 = ("1", "2", "3")
t2 = ("1", "2", "3")
t3 = ("0", "2", "1")
// Nur Demo
print(t1)
print(t2)
print(t1 == t2)
print(t1 == t3)
// Demo Ende

tmp = [];
for value in t1:
tmp.append(int(value, 10))

t1 = tuple(tmp)
print(t1)[/src]

Ergibt bei mir dann folgende Ausgabe:
[src=text]('1', '2', '3')
('1', '2', '3')
True
False
(1, 2, 3)[/src]
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Am kürzesten geht das per generator expression:
[src=python] t2 = tuple(int(i) for i in t1)[/src]

Aber ist das wirklich eine Lösung für dein eigentliches Problem? Was genau geht denn beim Vergleich der Strings schief?
 

HanZ

Bekannter NGBler

Registriert
16 Juli 2013
Beiträge
1.061
  • Thread Starter Thread Starter
  • #4
Es geht darum Versionsnummern zu vergleichen, also ob z.B 0.9.1 kleiner als 0.12 ist.

Mit Strings wird denke ich mal eher die Länge des Tuples oder der Wert der 9 mit der 1 verglichen, es kommt also eine falsche Ausgabe.
[src=python]v1 = ('0', '9', '1')
v2 = ('0','12')
#ergibt
v1 < v2
False
[/src]

Bei:

[src=python]v1 = (0, 9, 1)
v2 = (0, 12)
#ergibt
v1 < v2
True
[/src]

stimmt das ganze jedoch.

[src=python]t2 = tuple(int(i) for i in t1)[/src]
Das funktioniert wunderbar. Vielen lieben Dank, Problem gelöst, Wochenende gerettet. :beer:
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Bei Versionsnummern passt das. :T Einziges Problem könnten nicht-numerische Versionsnr. sein, weil int() ValueError schmeißt, wenn die Konvertierung nicht klappt. Z.B.:
[src=python]version = ('2', '3', '0', 'beta', '1')[/src]
Das kannst du aber auch umgehen, wenn du dir als int()-Ersatz eine int_default()-Funktion baust, die die Exception abfängt und einen sinnvollen Defaultwert zurückgibt.
 

HanZ

Bekannter NGBler

Registriert
16 Juli 2013
Beiträge
1.061
  • Thread Starter Thread Starter
  • #7
@Brother John:
Buchstaben oder sonstiges sind nicht in den Versionsnummern enthalten, von daher passt das.

@phre4k:
Für die Zukunft merke ich mir das, hier jedoch bringt mir das nichts:
Es dürfen nur Module verwendet werden, die im Kurs besprochen wurden und die Aufgabe nicht direkt lösen.
 
Oben