|
Autor |
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  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  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  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)f(x,y) = ..., statt def f(x,y): ..., dann hat er ständig rumgemeckert;
also dürfte das hier jetzt also im Wesentlichen Python sein.
Ich weiß nicht, ob am Algorithmus etwas verbesserungswürdig ist; jedenfalls liefert er die gewünschte Ausgabe.
|
Profil
|
Ehemaliges_Mitglied hat die Antworten auf ihre/seine Frage gesehen. |
|
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]
|