Matroids Matheplanet Forum Index
Moderiert von matroid mire2
Mathematische Software & Apps » Sage - Sagemath » Sage / Python: Ausgabe als Komma-separierte Liste
Autor
Kein bestimmter Bereich J 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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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.

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]