Matroids Matheplanet Forum Index
Moderiert von matroid mire2
Mathematische Software & Apps » Sage - Sagemath » Python (Sage): Schöne tabulierte Ausgabe verwirklichen
Autor
Kein bestimmter Bereich Python (Sage): Schöne tabulierte Ausgabe verwirklichen
Ehemaliges_Mitglied
  Themenstart: 2019-12-22

Code: \sourceon Python Base = 10 Exponent = 9 Divisor = 5 # BinExponent = Exponent.binary() BinDigigits = len(BinExponent) BinDigigitNoMax = BinDigigits-1 def BinDigigitNo(n): return BinDigigitNoMax-n def BinDigit(n): return int(str(BinExponent)[n]) # def Multiplier(n): if BinDigit(n)==1: return Base else: return 1 # def results(n): return BinDigit(k)*Multiplier(k) print 'Binary representation of the exponent:', BinExponent print 'Number of binary digits:', BinDigigitNoMax #print BinDigit(0) for k in range (0,BinDigigits): print BinDigigitNo(k), BinDigit(k), Multiplier(k), results(k) \sourceoff Ergibt: \sourceon Binary representation of the exponent: 1001 Number of binary digits: 3 3 1 10 10 2 0 1 0 1 0 1 0 0 1 10 10 \sourceoff Out[] Wie kann ich denn das verwirklichen, dass er das tabuliert ausgibt, etwa \sourceon 3, 1, 10, 10 2, 0, 1, 0 1, 0, 1, 0 0, 1, 10, 10 \sourceoff Out[] Kommagetrennt wäre auch nicht schlecht. Ich brauche das am Schluss noch als Textdatei, falls das wichtig ist. Danke!


   Profil
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 227
  Beitrag No.1, eingetragen 2019-12-22

Tag, man kann z.B. die Funktion str.join verwenden. \sourceon python data = [(BinDigigitNo(k), BinDigit(k), Multiplier(k), results(k)) for k in range(BinDigigits)] # Liste von Tupeln data_str = [', '.join(map(str, t)) for t in data] # Liste mit strings data_str = '\n'.join(data_str) # string \sourceoff Gruß


   Profil
Ehemaliges_Mitglied
  Beitrag No.2, vom Themenstarter, eingetragen 2019-12-24

\quoteon(2019-12-22 18:57 - schnitzel in Beitrag No. 1) \sourceon python data = [(BinDigigitNo(k), BinDigit(k), Multiplier(k), results(k)) for k in range(BinDigigits)] # Liste von Tupeln data_str = [', '.join(map(str, t)) for t in data] # Liste mit strings data_str = '\n'.join(data_str) # string \sourceoff \quoteoff Vergessen zu antworten. Ja, das ist auf jeden Fall kommagetrennt; tabuliert nicht unbedingt, aber mit ein paar zusätzlichen Leerstellen, sehe ich jetzt wenigstens was da was ist (in meinem größeren Code). Das hilft mir auf jeden Fall gut weiter. Ich hatte insgeheim gehofft, hast vll. gerade den Ausgabe-als-Textdatei-Befehl auswenidig parat und schreibst ihn dazu; aber das sollte ich hinbekommen. ;-)


   Profil
Ehemaliges_Mitglied
  Beitrag No.3, vom Themenstarter, eingetragen 2019-12-25

Es muss irgendwie mit matrix() gehen; nach dem Schema: \sourceon Sage m = matrix([[0,0,1], [1,0,0]]) mymatrix = m.str().replace('[', '').replace(']', '') # replace [, ] #.... # add commas print mymatrix \sourceoff M.W.E. \sourceon 0 0 1 1 0 0 \sourceoff Out[Actual] Die eckigen Klammern krieg ich schonmal weg. Nur weiß ich gerade nicht, wie man da Kommas ergänzt: \sourceon 0, 0, 1 1, 0, 0 \sourceoff Out[Target] Ist das noch Python oder oder auf Sage verdammt? Ich tippe auf Zweiteres.


   Profil
Ehemaliges_Mitglied
  Beitrag No.4, vom Themenstarter, eingetragen 2019-12-29

Ich habe schon wieder das riesen Problem, das ganze als Textdatei abzuspeichern: \sourceon Python ## Text-file Output with open('Outfile{}to{}mod{}.txt'.format(Base, Exponent,Divisor), 'w') as file: file.writelines(str(k).replace('(', '').replace(')', '') + '\n' for k in data) # Zeilenumbrüche werden ignoriert.... \sourceoff Das ist ist so vermutlich nicht im Sinne des Erfinders, auch wenn es fast das Richtige ausgibt. Was muss ich tun, dass die Zeilenumbrüche nicht ignoriert werden? \showon Einfaches, vollständiges MWE: \sourceon Python data = [(k, 2*k, 3*k, 4*k) for k in range(5)] # Liste von Tupeln data_str = [', '.join(map(str, t)) for t in data] # Liste mit strings data_str = '\n'.join(data_str) # string print data_str ## Text-file Output with open('MyOutfile{}to{}mod{}.txt'.format(Base, Exponent,Divisor), 'w') as file: file.writelines(str(k).replace('(', '').replace(')', '') + '\n' for k in data) # Zeilenumbrüche werden ignoriert.... \sourceoff \showoff


   Profil
Ehemaliges_Mitglied
  Beitrag No.5, vom Themenstarter, eingetragen 2019-12-29

\quoteon(2019-12-29 15:58 - geroyx in Beitrag No. 4) \sourceon Python ## Text-file Output with open('Outfile{}to{}mod{}.txt'.format(Base, Exponent,Divisor), 'w') as file: file.writelines(str(k).replace('(', '').replace(')', '') + '\n' for k in data) # Zeilenumbrüche werden ignoriert.... \sourceoff \quoteoff Oh, ich ziehe meine Frage zurück. In einem gescheiten Editor (nicht dem Win-txt-Editor) wird es richtig angezeigt! Vielleicht hat ja trotzdem jmd. Verbesserungsvorschläge: Die Notwendigkeit von diesen 'replace's wundert mich...


   Profil
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 227
  Beitrag No.6, eingetragen 2019-12-29

So schwer ist das doch nicht. \sourceon python data = [(1, 2, 3, 4), (4, 3, 2, 1000)] pattern = "{:5}, {:5}, {:5}, {:5}" nice_str = '\n'.join([pattern.format(*tup) for tup in data]) print(nice_str) def save_string(path, string, mode='w'): with open(path, mode) as file: file.write(string) save_string('test.txt', nice_str) \sourceoff Weiteres zu string formatting hier


   Profil
Ehemaliges_Mitglied
  Beitrag No.7, vom Themenstarter, eingetragen 2019-12-29

Sieht auf jeden Fall gut aus; und ist vll. sogar verallgemeinerbar. \quoteon(2019-12-29 19:05 - schnitzel in Beitrag No. 6) So schwer ist das doch nicht. \quoteoff Ja, das sagst Du so leicht. Das ist jetzt etwa die 4. Methode, die ich sehe. Allen ist gemein, dass sie im Detail kryptisch sind. Wenn mir print data eine gewünschte Ausgabe erzeugt, würde ich von einem CAS erwarten, dass es einen einfachen Befehl save(data, name.txt) gibt. Ich meine mich zu erinnern: Mathematica macht sowas. Aber hier hat man gespart, rückrudern auf Python; daher ist Sage vermutlich auch vergleichseweise weniger beliebt. Interessant wäre mal die matrix zu hacken: #3.


   Profil
Ehemaliges_Mitglied
  Beitrag No.8, vom Themenstarter, eingetragen 2019-12-31

\quoteon(2019-12-29 19:05 - schnitzel in Beitrag No. 6) \sourceon python data = [(1, 2, 3, 4), (4, 3, 2, 1000)] pattern = "{:5}, {:5}, {:5}, {:5}" nice_str = '\n'.join([pattern.format(*tup) for tup in data]) print(nice_str) def save_string(path, string, mode='w'): with open(path, mode) as file: file.write(string) save_string('test.txt', nice_str) \sourceoff \quoteoff Das sieht, wie gesagt, sehr gut aus. Ich hätte höchstens noch eine Idee für einen letzten Feinschliff: Jetzt ist die Anzahl meiner Spalten fest; also ist es annehmbar für z.B. 4 Spalten z.B. 5 Leerstellen vor den Spaltenelementen festzulegen: pattern = "{:5}, {:5}, {:5}, {:5}" Meine Idee wäre: Diesen Teil automatieren, d.h. das auch eine variable Anzahl von Spalten in dieser Form gesetzt wird. Aber das ist vermutlich gleich wieder hochkompliziert? :-?


   Profil
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 227
  Beitrag No.9, eingetragen 2019-12-31

Dann benutz eben ein flexibles pattern. \sourceon python pattern = ', '.join(['{:5}'] * len(data[0])) \sourceoff Das ist alles kein Hexenwerk. Wenn man sowas wie python oder sagemath benutzen will, muss man auch ein bisschen Zeit investieren. Nicht böse gemeint, aber tu dir doch selbst einen Gefallen und tippe das hier in einem Notebook Zeile für Zeile mit Verstand ab.Das dauert höchstens 1.5 Stunden. Nicht alles ist wichtig, aber vieles nützlich. Gruß


   Profil
Ehemaliges_Mitglied
  Beitrag No.10, vom Themenstarter, eingetragen 2019-12-31

\quoteon(2019-12-31 19:49 - schnitzel in Beitrag No. 9) Dann benutz eben ein flexibles pattern. \sourceon python pattern = ', '.join(['{:5}'] * len(data[0])) \sourceoff Das ist alles kein Hexenwerk. Wenn man sowas wie python oder sagemath benutzen will, muss man auch ein bisschen Zeit investieren. Nicht böse gemeint, aber tu dir doch selbst einen Gefallen und tippe das hier in einem Notebook Zeile für Zeile mit Verstand ab.Das dauert höchstens 1.5 Stunden. Nicht alles ist wichtig, aber vieles nützlich. \quoteoff Ja, guter Tipp. Ich habe auch noch hier einen Python-Kurs: https://www.youtube.com/watch?v=dyJdLalc7TA&list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs Ich frage ja nach erbsenzählerischen typographischen Details; sowas kommt in diesen allgemeinen Darstellungen selten raus; sowas weiß man eher aus Erfahrung. Mit Rechnungen hatte ich keine besonderen Probleme bis jetzt; da sind die Sachen weitgehend selbsterklärend. \showon Ich kann ja mal meinen längsten Algorithmus zeigen. \sourceon Sage #os.chdir('C:\Users\ccc\Desktop\Test\Dezimalbruchentwicklung\Resultat') print os.getcwd() #%save AtoBModM 1 # a^b mod m # Input Variables Base = 33 Exponent = 856 Divisor = 857 MyEmptyCellValue = -1 #str() # BinExponent = Exponent.binary() BinDigits = len(BinExponent) BinDigitNoMax = BinDigits-1 # Calculations === def BinDigitNo(n): return BinDigitNoMax-n def BinDigit(n): return int(str(BinExponent)[n]) # Multiplier =========================== def Multiplier(n): if BinDigit(n)==1: return Base else: return 1 ## results =========================== def results(n): if BinDigitNo(n)==BinDigitNoMax: return BinDigit(n)*Multiplier(n) else: if BinDigitNo(n)==0 and BinDigit(n)==0: return MyEmptyCellValue else: if BinDigit(n)==1: return ModII(n-1)*Multiplier(n) else: return MyEmptyCellValue ## ModI =========================== def modI(n): return (results(n) % Divisor) def ModI(n): if BinDigitNo(n) == BinDigitNoMax: return modI(n) else: if results(n) == MyEmptyCellValue: #modI(n) == ModII(n-1): #works not return MyEmptyCellValue else: return modI(n) ## square =========================== def Square(n): if BinDigitNo(n) == 0: return MyEmptyCellValue else: if BinDigitNo(n)

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]