|
Autor |
Sage / Python: Ausgabe als Komma-separierte Liste |
|
Ehemaliges_Mitglied  | Themenstart: 2019-11-09
|
Hallo. Kann mir mal jemand sagen, wie folgende Ausgabe ohne Zeilenumbrüche und durch Kommas getrennt hinbekomme.
Ich habe, wie man sieht, so viel ausprobiert; es kommen nur Fehlermeldungen oder kein Effekt.
\sourceon Sage
#from __future__ import print_function
x = 19 # Startnummer
N=7 # Laufweite
print x # Damit auch Startnummer geprintet wird...
for k in range (0,N):
if x % 2 ==0:
x=x/2
else:
x=3*x+1
print x
#print(str(x), sep = ", ")
#print(' '.join(x))
#print(x, sep=", ")
#print(" ,".join(", ").join([str(x)]))
x=x+k
\sourceoff
Und ggf. auch gleich, wie man das als Textdatei abspeichern kann (wobei für die Textdatei vermutlich wieder der Standard, also zeilengetrennt, besser sein dürfte zwecks Weiterverarbeitung):
Also etwa:
\sourceon Out[] Display
19, 58, 29, 88, 44, 22, 11, 34
\sourceoff
\sourceon Out[] Textdatei-Speicherung
19
58
29
88
44
22
11
34
\sourceoff
|
Profil
|
haegar90
Ehemals Aktiv  Dabei seit: 18.03.2019 Mitteilungen: 935
 | Beitrag No.1, eingetragen 2019-11-09
|
Hallo, ich kenne Sage noch nicht, sehe es mir aber mal an weil ich es interessant finde und es auch mit LaTex kombinierbar ist.
prinzipiell geht es vielleicht so
\showon
\sourceon nameDerSprache
#from __future__ import print_function
x = 19 # Startnummer
txt=str(x)+", "
N=7 # Laufweite
for k in range (0,N):
if x % 2 ==0:
x=x/2
txt=txt+str(x) + ", "
else:
x=3*x+1
txt=txt+str(x) + ", "
x=x+k
print txt
\sourceoff
\showoff
|
Profil
|
ligning
Senior  Dabei seit: 07.12.2014 Mitteilungen: 3567
Wohnort: Berlin
 | Beitrag No.2, eingetragen 2019-11-09
|
Sieht aus wie Python. Dort geht es so:
\sourceon Python
def f(x, n):
yield x
for k in range(0, n):
if x % 2 == 0:
x = x / 2
else:
x = 3*x + 1
yield x
print(", ".join(map(str, f(19, 7))))
\sourceoff
|
Profil
|
Ehemaliges_Mitglied  | Beitrag No.3, vom Themenstarter, eingetragen 2019-11-10
|
\quoteon(2019-11-09 18:45 - ligning in Beitrag No. 2)
Sieht aus wie Python.
\quoteoff
Ja. Das gibt
\sourceon Sage
X = 19 # Startwert
N = 7 # Laufweite
def f(x, n):
yield x
for k in range(0, n):
if x % 2 == 0:
x = x / 2
else:
x = 3*x + 1
yield x
print(", ".join(map(str, f(X, N))))
\sourceoff In[]
\sourceon
19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13
\sourceoff Out[]
Jetzt bräuchten wir das nur noch paralell dazu als sinnvoll benannte Textdatei-Ausgabe, etwa collatz19.txt, und das zeilengetrennt (wie es der Default machen will), weil man das dann einfacher weiterverarbeiten kann. Also
\sourceon collatz19.txt
19
58
29
88
44
...
\sourceoff Out[]
Die Display-Anzeige ist hauptsächlich "gut zu wissen"; und wird im Allgemeinen auskommentiert sein; denn:
irgendeine Ausgabe mit zehntausenden Werten nützt als Display-Anzeige überhaupt nichts; man braucht es in einer txt-Datei (o.ä.) zur Weiterverarbeitung (z.B. für einen Graph).
Eine Display-Anzeige bei kürzen Folgen hat nur den Sinn: "Ach, so sieht das aus..."; und da erweist es sich als störend, wenn ~40 Werte zeilengetrennt im Display stehen; aber für die Weiterverarbeitung hat das keinen Nutzen! Das will mir nie jemand glauben!
Kann man nicht beides, d.h. die Display-Anzeige (kommagetrennt) und die Textdateiausgabe (zeilengetrennt), paralell haben?
Das sind scheint wieder komische Befehle, die man hier braucht:
with open('./{0}DATEINAME.txt'.format(n), 'w') as file:
file.write(str(T))
Sowas Einfaches wie
-c 'print(f(X,N))' >> collatz'N'.txt
darf nicht sein!
|
Profil
|
Ehemaliges_Mitglied  | Beitrag No.4, vom Themenstarter, eingetragen 2019-11-10
|
Ich habe mal etwas rumgefragt, eine Lösung erhalten und noch eine Kleinigkeit ergänzt.
\sourceon Sage
X = 19 # Startwert
N = 33 # Laufweite
def f(x, n):
yield x
for k in range(0, n):
if x % 2 == 0:
x = x / 2
else:
x = 3*x + 1
yield x
print(", ".join(map(str, f(X, N)))) # kommagetrennte Display-Ausgabe
#print("\n".join(map(str, f(X, N)))) # zeilengetrennte Display-Ausgabe
with open('collatz{0}.txt'.format(X),'w') as fn: # Ausgabe als
one_string = "\n".join(map(str, f(X, N))) # Textdatei
fn.write(one_string + '\n') # "collatzX.text"
\sourceoff
\sourceon
19, 58, 29, 88, 44, 22
\sourceoff Out[] Display
\sourceon
19
58
29
88
44
22
\sourceoff Out[] collatz19.txt
Das liefert jetzt das, was ich wollte; und ist m.E. auch das einzig Sinnvolle für solche Aufgaben (was soll man denn allein mit einer Display-Anzeige anfangen?).
Man beachte die Aufwendigkeit in den letzten 3 Zeilen. Ich hatte auf etwas Einfaches, CAS-haftes gehofft wie f.write(output.txt).
Ist ja jetzt auch kein besonderer Anspruch, eine Textdateiausgabe...
Ist aber nicht so; er verlangt hier die gesamte Python-Bandbreite. Schade.
|
Profil
|
Ehemaliges_Mitglied  | Beitrag No.5, vom Themenstarter, eingetragen 2019-11-12
|
Diese Lösung (letzte zwei Zeilen), von einem Sage-Experten, ist zumindest etwas CAS-hafter:
\sourceon Sage
X = 19 # Startwert
N = 5 # Laufweite
def f(x, n):
yield x
for k in range(0, n):
if x % 2 == 0:
x = x / 2
else:
x = 3*x + 1
yield x
print(", ".join(map(str, f(X, N)))) # kommagetrennte Display-Ausgabe
#print("\n".join(map(str, f(X, N)))) # zeilengetrennte Display-Ausgabe
with open('collatz_{}_{}.txt'.format(X, N), 'w') as file: # Ausgabe als
file.writelines(str(k) + '\n' for k in f(X, N))# collatz_19_5.txt
\sourceoff
|
Profil
|
Ehemaliges_Mitglied hat die Antworten auf ihre/seine Frage gesehen. Ehemaliges_Mitglied hat selbst das Ok-Häkchen gesetzt. |
|
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]
|