Archive for the ‘Programmierung’ Category.

Rolling dice with Python / Würfeln mit Python II

Based on http://uweziegenhagen.de/?p=2741 I created another example, this time the algorithm returns a list of the rolled values.

# for the random selection
from random import choice
# to create the sorted dictionary
import collections
 
def throwDiceList(*args):
	if not args: 
		L = []	
	else:
		L = args[0]
	x = choice(range(1,7))
	L.append(x)
	if x == 6:
		return throwDiceList(L)	
	else:
		return L
 
# little test function
def TestDiceList(n):
	# create a dictionary
	d = {}
	for x in range(0, n):
		wurf = sum(throwDiceList())	
 		# if key is found, just increase its frequency by 1 
		if wurf in d:
			d.update({wurf:d[wurf]+1})
		else:
			# else create new key with initiL frequency 1 
			d.update({wurf:1})
	od = collections.OrderedDict(sorted(d.items()))
	for k, v in od.iteritems(): 
		print k, v
 
TestDiceList(60000)

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Mit Excel führende Leerzeichen entfernen und hinzufügen

Hier ein kurzes Beispiel, wie man mit Excel führende Leerzeichen entfernen und auch wieder hinzufügen kann.

excel_zehn

Sei in B2 die Zahl im Format „drei Ziffern“-„10 Ziffern“:

Dann ermittelt

=WERT(LINKS(B2;FINDEN("-";B2)-1)) die Zahl vor dem Bindestrich.

=WERT(RECHTS(B2;LÄNGE(B2)-FINDEN("-";B2))) die Zahl hinter dem Bindestrich

und

=TEXT(C2;"000") & "-" & TEXT(D2;"0000000000") fügt die Zahl aus beiden Teilen wieder im ursprünglichen Format zusammen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Emacs neuen Dateityp zum Org Mode hinzufügen

Hier eine Zeile, wie man Emacs beibringt, auch *.text Dateien im Org Mode zu öffnen:

(add-to-list 'auto-mode-alist '("\\.text" . org-mode))

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

MS Excel: Werte auf Basis einer Werteliste extrahieren

Hier ein Beispiel, wie man anhand einer einfachen Liste und einer recht komplexen Formel Werte aus einer Spalte ziehen kann.

Gegeben ist eine Liste von Firmennamen, die als letzten Bestandteil (getrennt vom Namen durch ein Leerzeichen) die Rechtsform enthält. Nur durch das Hinzufügen einer neuen Rechtsform zur Liste sollen alle entsprechenden Rechtsformen extrahiert werden.

excel_20131013

Excel_lookup

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Equipping TeXworks with a ‚duplicate this line‘ feature / Zeilen duplizieren in TeXworks

I really like TeXworks but miss some of the functions other editors provide. Notepad++ for example has a nice „duplicate this line“ feature available via Ctrl+D that I’d like to use in TeXworks as well. Thanks to Autohotkey this is quite simple (also thanks to the posting from www.autohotkey.com/board/topic/19002-duplicate-line/)

^d::
SetKeyDelay, -1
Temp := ClipboardAll
Clipboard = 
Send {home}
Send {Shift}+{End}^c
ClipWait, 2
Send {End}{Enter}
SendRaw %Clipboard%
Clipboard := Temp
return

PS: I guess TeXworks can do this via the built-in scripting but I never played with that. If one of my readers has a proposal, please send it to me.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Fibonacci Zahlen mit Python erzeugen – I

Hier ein kleines und einfaches Beispiel, wie man mit Python rekursiv Fibonacci-Zahlen (Wikipedia-Artikel zum Thema) ausgeben kann.

Die Bildungsvorschrift ist ganz einfach: Für n=0 ist die Fibonacci Zahl 0, für n=1 1. Für alle weiteren positiven ganzzahligen Werte gilt, dass die entsprechende Fibonacci-Zahl als Summe der beiden vorhergehenden Zahlen definiert ist, d.h. Fibo(n) = Fibo(n-1) + Fibo(n-2).

def calcFibo(n):
	if n==0:
		return 0
	if n==1:
		return 1
	else:
		return calcFibo(n-1)+calcFibo(n-2)
 
print(calcFibo(25))

In folgenden Artikeln dazu werde ich entsprechende Unittests vorstellen, die dieses Beispiel erweitern.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Rolling dice with Python / Würfeln mit Python

Als kleines Projekt, um etwas mehr in Python einzusteigen, habe ich mir eine Simulation von „Mensch ärgere dich nicht“ überlegt.

Dazu hier ein kleines Skript, das würfelt und dabei auch beachtet, dass bei einer ‚6‘ mehrfach gewürfelt wird. Eine Test-Funktion ist auch dabei, die relativen Häufigkeiten stimmen mit meinen gedachten Werten überein, es scheint also zu funktionieren.

# for the random selection
from random import choice
# to create the sorted dictionary
import collections
 
 
# if throwDice() is called without param, assume that summed equals 0 
# used when player rolls a '6'
def throwDice(*args):
	if not args: 
		summed = 0
	else:
		summed = args[0]
	# roll the dice
	x = choice(range(1,7))
	# if '6' was rolled, we roll again until x <> 6 is rolled
	if x == 6:
		return throwDice(summed+6)	
	else:
	# if no '6' was rolled in *this* run, we just return the aggregated number	
		return summed+x
 
# little test function to get the absolute frequencies
def TestDice(n):
	# create a dictionary
	d = {}
	for x in range(0, n):
		# roll the dice
		wurf = throwDice()	
 
		# if key is found, just increase its frequency by 1 
		if wurf in d:
			d.update({wurf:d[wurf]+1})
		else:
			# else create new key with initiL frequency 1 
			d.update({wurf:1})
	od = collections.OrderedDict(sorted(d.items()))
	for k, v in od.iteritems(): 
		print k, v
 
TestDice(6000)

English summary: some code to roll dice with Python. The frequencies are consistent with the expected values so it seems to be correct.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Qt mit Python – PySide installieren

Nachdem ich die ersten Schritte mit Python erfolgreich gegangen bin, will ich mir in der nächsten Zeit mal anschauen, wie man grafische Benutzeroberflächen damit entwickelt.

Mit „PyQt und PySide. GUI- und Anwendungsentwicklung mit Python und Qt“ von Peter Bouda gibt es glücklicherweise ein aktuelles Buch, das den Umgang mit den beiden Qt-Paketen beschreibt.

Die Installation von PyQt funktionierte bei mir auf Anhieb nicht oder schlecht, daher konzentriere ich mich auf PySide. Die Installation unter Windows war einfach: easy_install pySide, das war’s. Das Paket bringt die notwendigen Qt-Sachen gleich mit.

Unter Linux war es ein wenig aufwändiger:

  1. sudo apt-get install cmake
  2. Anleitung von http://www.wikihow.com/Install-Qt-SDK-on-Ubuntu-Linux folgen
  3. sudo easy_install pySide

Danach kam es beim Laden des HelloWorld-Beispiels immer noch zu einem Fehler ImportError: libpyside-python2.7.so.1.2: cannot open shared object file: No such file or directory, der sich aber dadurch beheben ließ, dass ich am Ende der .bashrc folgendes eintrug:

export LD_LIBRARY_PATH=/usr/local/lib/python2.7/dist-packages/PySide-1.2.1-py2.7.egg/PySide/

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Organisier Dein Leben mit Emacs Org-Mode Teil 3

This entry is part 3 of 3 in the series Emacs Org Mode

Im Org Mode kann verschiedenste Links auf interne und externe Ressourcen setzen.

Das einfachste Beispiel für einen Link ist einfach eine URL, die in den Text eingefügt wird:

http://www.google.de

Org Mode erkennt diesen String dann automatisch als Link. Man kann auch einen anderen Anzeigenamen verwenden, indem man Link und Label in eckigen Klammern einschachtelt:

[[http://www.google.de][Google]]

Links können auch auf die Dateiablage zeigen: file:/home/uwe/.emacs, das Org Mode Handbuch zeigt noch diverse andere Beispiele.

Ein weiteres Beispiel für Links sind Wörter, die in drei < bzw. > eingebettet sind. Sie definieren ein Linkziel, das dann im weiteren Text nicht explizit deklariert werden muss. Das heißt, sobald ein Wort in diese insgesamt sechs Zeichen eingeschlossen ist und die Datei neu gescannt wurde (durch Neu-Laden der Datei oder Drücken von C-c C-c, wenn der Cursor auf einem so definierten Linkziel steht) werden alle weiteren im Text vorkommenen gleichen Wörter aktive Links.

Beispiel:

Link-Ziel: <<<Ankername>>>

Link: Ankername

Besonders elegant ist die Möglichkeit, Link-Templates zu definieren. Dies kann sowohl innerhalb der Org Datei als auch zentral in der .emacs erfolgen.

Ein Link hat dabei die Form [[Präfix:Begriff]]. Präfix steht dabei für eine Basis-URL (wie google.de), für ein Wort, das dann an die Basis-URL angefügt wird.

Interne Linktemplates haben die Form:

#+LINK: uwe http://uweziegenhagen.de/?s=%s

Ist das interne Template so definiert, dann öffnet [[uwe:Arduino]] einen Link auf die Suchseite meines Blogs, mit „Arduino“ als Suchbegriff.

In der .emacs lassen sich Basis-URLs zentral definieren:

;; allow quick search links, here Google and Spiegel
(setq org-link-abbrev-alist 
      '(("google" . "https://www.google.com/search?q=%s"))
        ("spiegel" . "http://www.spiegel.de/%s")))

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Folien für den Arduino-Vortrag, FrOSCon 2013

Hier die Folien für meinen 2013er Arduino-Vortrag auf der FrOSCon.

Arduino Vortrag (PDF)

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website