Seite 1 von 1
Zufällig hex ausgeben....
Verfasst: Donnerstag 16. April 2020, 19:04
von tomycat
hallo,
Code: Alles auswählen
from random import *
def one_hex():
hex = randint(1, 100) # max 100
return hex
def mix():
inhalt ='Start'
for i in range(randint(1, 100)): # max 100
inhalt += '\x' + str(one_hex()) ##### geht nicht :-(
return inhalt
print(mix())
Ich will Zufällige Hex Werte mit unterschiedliche Längen ausgeben, wie kann ich die Problem Zeile lösen?
Re: Zufällig hex ausgeben....
Verfasst: Donnerstag 16. April 2020, 19:43
von Sirius3
Backslash ist ein Escapezeichen und muß deshalb escaped werden, wenn man es ausgeben will.
Statt Strings mit + zusammenzustückeln, nimmt man Stringformatierung, da kann man Zahlen auch als Hex ausgeben lassen. Benutze keine *-Importe:
Code: Alles auswählen
from random import randint
def mix():
werte = (randint(1, 100) for _ in range(randint(1,100)))
hex_werte = ''.join(f"\\x{k:x}" for k in werte)
return f"Start{hex_werte}"
Re: Zufällig hex ausgeben....
Verfasst: Freitag 17. April 2020, 14:11
von __blackjack__
Wobei die Grenzen 1 bis 100 komisch sind weil das zwischen 1 und zwei Hexziffern produziert aber nicht alle Möglichkeiten abdeckt. Das ergibt also keine gleichmässige Verteilung, es gibt Ergebnisse die wahrscheinlicher sind als andere.
Was ist denn die eigentliche Aufgabenstellung dahinter? Wofür soll das gut sein?
Re: Zufällig hex ausgeben....
Verfasst: Sonntag 19. April 2020, 12:12
von tomycat
thx,
ich sollte eigentlich mit print \x41 als A ausgeben lassen, aber nicht als \x41
Da gibt es doch eine Convert Funktion
Re: Zufällig hex ausgeben....
Verfasst: Sonntag 19. April 2020, 12:22
von Sirius3
Also willst Du keine zufälligen Hexwerte sondern zufällige ASCII-Zeichen.
Code: Alles auswählen
werte = (randint(32, 128) for _ in range(randint(1,100)))
zeichen = ''.join(map(chr, werte))
Re: Zufällig hex ausgeben....
Verfasst: Sonntag 19. April 2020, 12:31
von __blackjack__
@tomycat: Sorry aber der Satz macht keinen Sinn für mich. Oder sind das zwei Sätze? Wobei ich es auch dann nicht verstehen würde.
Die Escape-Sequenz "\x??" mit Hexadezimalziffern an stelle der Fragezeichen gilt für literale Zeichenketten. Da muss also tatsächlich "\x41" *so* in der Zeichenkette im *Quelltext* stehen. Das wird vom Compiler ausgewertet, bevor der Code läuft. Du kannst da nicht zur Laufzeit Teile von generieren.
Falls Du zufällige Zeichen mit den Unicode-Codepoints 1 bis 100 erstellen willst, dann ist das ganze Hexgedöns unsinnig. Dann würde man einfach ein Unicode-Zeichen mit `chr()` erstellen.
Aber darum noch mal die Frage: Was ist das Problem das Du hier zu lösen versuchst? Wozu wird das am Ende verwendet?
Re: Zufällig hex ausgeben....
Verfasst: Sonntag 19. April 2020, 12:35
von __blackjack__
@Sirius3: `randint()` ist inklusive Endpunkt. Also entweder `randrange()` oder den Endpunkt auf 127 setzen. Ich würde letzteres machen. Beziehungsweise 126, weil das ASCII-Zeichen 127 kein druckbares Zeichen ist. Falls das für den OP einen Unterschied macht.
Re: Zufällig hex ausgeben....
Verfasst: Montag 20. April 2020, 05:15
von tomycat
thx,
die print Ausgabe muss so aussehen AAA, sie dient nur als Kontrolle.
leider will meine Funktion nur Hexwerte von einem großen Bereich.
ich könnte jetzt eine Tabelle erstellen wie
meinarry[00] = '0'
meinarry[01] = '1'
…
… bis 256
Per Zufall ordne ich mein_end_string += <--------
Das muss auch einfacher gehen.
Re: Zufällig hex ausgeben....
Verfasst: Montag 20. April 2020, 05:31
von sparrow
@tomycat Ich verstehe deinen Beitrag nicht. Du gehst auch überhaupt nicht auf die bisherigen Antworten ein, aus denen sich Fragen ergeben, die du beantworten solltest.
Die "Tabelle", die du zeigst, ist keine Tabelle sondern du ordnest einem dict einzelne Werte zu. Wenn der Wert dem Schlüssel entspricht, macht das natürlich keinen Sinn.
Der erste Schritt ein Problem zu lösen - erst recht in der Programmierung - besteht darin das Problem zu formulieren. Das solltest du als erstes versuchen.
Was ist das Problem? Was erwartest du vom Programm? Was passiet stattdessen?
Und das in klar verständlichen Worten und Sätzen.
Re: Zufällig hex ausgeben....
Verfasst: Montag 20. April 2020, 06:32
von Sirius3
@tomycat: du hast jetzt also dein Problem gelöst, das wir hier immer noch nicht genau kennen. Wenn du einen lauffähigen Code posten würdest, könnten wir hier sehr schnell sagen, ob das einfacher geht.
Re: Zufällig hex ausgeben....
Verfasst: Montag 20. April 2020, 17:28
von tomycat
thx,
hmmmmm ja, ich Probiere jetzt mal mein Problem anders zu beschreiben.

Die zufällige Länge lassen wir mal weg, die kann ich selber lösen

Mehr darf ich nicht sagen wegen close Code.
ok, es gibt eine Funktion die will als Parameter einen zufälligen HEX Wert, von 00 bis FF. Nicht mehr.
Die Will ich ausgeben lassen als print. Ich weis dass da Müll Dabei ist, egal. Ich will mit print NUR sehen, dass das was passiert.
Code: Alles auswählen
# Erstellung von einem zufälligen Hex Wert....
zufaelliger_Hex_Wert = randum_bum_bum_hex # von \x00 bis \xFF
print(zufaelliger_Hex_Wert) # nur um zu sehen dass ,da was passiert
# Dieser Zufällige HEX Wert wird weiterverarbeitet...
superfunktion(zufaelliger_Hex_Wert)
Ein umständlicher Lösungsvorschlag wäre:
Code: Alles auswählen
Ich mache eine Tabelle, Liste, was auch immer :-)
mein_array[0] = '\x00'
#....bis....
mein_array[256] = '\xFF'
zufaelliger_dez_Wert = random.uniform(0,256)
print(zufaelliger_Hex_Wert) # nur um zu sehen dass ,da was passiert
superfunktion(mein_array[zufaelleriger_dez_Wert ])
Diese Lösung würde gehen, aber die Langsam und ich habe keine Lust eine Tabelle von 0 bis 256 zu erstellen.
Besser kann ich mein Problem nicht beschreiben.
Re: Zufällig hex ausgeben....
Verfasst: Montag 20. April 2020, 17:54
von __blackjack__
@tomycat: Nach der Beschreibung willst Du keinen ”Hexwert” sondern einfach ein Zeichen mit einem zufälligen Unicode-Codepoint zwischen 0 und 255 (inklusive). Dafür ist die `chr()`-Funktion da. Wobei man da auch eine entsprechende Zeichenkette erstellen könnte, aus der man dann mit `random.choice()` auswählt.
Du verwirrst hier glaube ich alle, und auch Dich selbst, mit ”Hexwerten”, denn ich sehe nicht wo Du den tatsächlich brauchst.
Re: Zufällig hex ausgeben....
Verfasst: Montag 20. April 2020, 18:37
von Sirius3
@tomycat: die Musterlösung habe ich Dir doch schon gezeigt.
Wobei zufällige Unicode-Points etwas seltsam ist, willst Du nicht vielleicht eigentlich zufällige Bytewerte?
Re: Zufällig hex ausgeben....
Verfasst: Mittwoch 22. April 2020, 11:12
von tomycat
thx all,
mit chr(zufälliger Wert von 0 bis 256) bekomme ich doch Hexwerte von 00 bis FF oder nicht?
wenn ja dann habe ich die Lösung

Re: Zufällig hex ausgeben....
Verfasst: Mittwoch 22. April 2020, 11:24
von __deets__
Fast. Wert bis 255... Aber sonst, ja.
Re: Zufällig hex ausgeben....
Verfasst: Mittwoch 22. April 2020, 12:35
von /me
tomycat hat geschrieben: Mittwoch 22. April 2020, 11:12
mit chr(zufälliger Wert von 0 bis 256) bekomme ich doch Hexwerte von 00 bis FF oder nicht?
Die Frage ist ohnehin, wie du Hex-Wert definierst. Meinst du einen String wie "A1"? Oder meinst du die Hex-Darstellung von Zahlen im Python-Code wie `0xA1`?