Sida 1 av 1

Nybörjare i python, göra en "ruta" [LÖST]

Postat: 17 nov 2007, 13:40
av Rasmus
Jag har följt denna nybörjarguiden i python: http://wiki.imbumba.se/index.php/Funkti ... programmet
och jag har fastnatt på: "Skriv en funktion som skriver ett ord i en liten ram och där ordet skickas som en parameter till funktionen:"
Resultatet blir inte riktigt bra:

Kod: Markera allt

+- ---- -+
|  Namn  |
+- ---- -+
och skriver jag bokstäverna åäö så blir resultatet ännu sämre:

Kod: Markera allt

+- ------ -+
|  åäö  |
+- ------ -+
Koden till programmet är:

Kod: Markera allt

#!/usr/bin/python
# * coding:utf8 *
namn = raw_input('Namn: ')
def ram(namn):
	ant = len(namn)
	def linje(ant):
		lin = ant * '-'
		print '+-',lin,'-+'
	def name(namn):
		print '| ',namn,' |'
	linje(ant)
	name(namn)
	linje(ant)
ram(namn)
	
Någon som vet hur jag ska fixa mellanrummen i början och i slutet av "rutan"?

SV: Nybörjare i python, göra en "ruta"

Postat: 17 nov 2007, 14:03
av gasol
Om du läser här http://docs.python.org/ref/print.html så står det att print av nån anledning lägger inte mellanslag vid varje komma tecken.

a = 'a'
b = 'b'
c = 'c'
print a,b,c
skulle skriva ut a b c inte abc som vore vettigt.

För att lösa ditt problem så
ändra raden
lin = ant * '-'
till
lin = '+-' + ant * '-' + '-+'
och sedan så skriver du bara ut raden lin istället för '+-' ,lin, ' -+'
samt raden
print '|',namn,'|'
till denna rad
print '|',namn,'|'


exempel

Kod: Markera allt

x----------x
| apan ola |
x----------x

SV: Nybörjare i python, göra en "ruta"

Postat: 17 nov 2007, 14:08
av mcNisse
byt ut
ant = len(namn)
mod
ant = len(namn.decode('utf-8'))

Borde fungera,,,

SV: Nybörjare i python, göra en "ruta"

Postat: 17 nov 2007, 14:10
av Rasmus
Tack båda! Nu funkar det precis som jag ville ha det frånbörjan ;D tack

SV: Nybörjare i python, göra en "ruta"

Postat: 17 nov 2007, 20:57
av Lars
mcNisse skrev: ant = len(namn.decode('utf-8'))
Eller, för att vara något mer korrekt:

Kod: Markera allt

import sys
ant = len(namn.decode(sys.stdin.encoding))

SV: Nybörjare i python, göra en "ruta"

Postat: 17 nov 2007, 20:58
av Rasmus
Lars skrev:
mcNisse skrev: ant = len(namn.decode('utf-8'))
Eller, för att vara något mer korrekt:

Kod: Markera allt

import sys
ant = len(namn.decode(sys.stdin.encoding))
Vad är skillnaden?
då åäö funkade jätte bra med
mcNisse skrev: ant = len(namn.decode('utf-8'))
Det var inte meningen att låta otrevlig, dock svårt att skriva med olika tonlägen ;)

SV: Nybörjare i python, göra en "ruta" [LÖST]

Postat: 17 nov 2007, 21:02
av Lars
Vilken teckenkodning man använder är olika på olika terminaler. På Ubuntu så blir sys.stdin.encoding 'UTF-8', så det blir alltså samma sak. Men på något annan system så kan det vara annorlunda.

SV: Nybörjare i python, göra en "ruta" [LÖST]

Postat: 17 nov 2007, 21:13
av Rasmus
Lars skrev: Vilken teckenkodning man använder är olika på olika terminaler. På Ubuntu så blir sys.stdin.encoding 'UTF-8', så det blir alltså samma sak. Men på något annan system så kan det vara annorlunda.
Okej tack, då vet jag vad felet är ifall jag väljer att boota windows :) (mycket otroligt, men ändå)

Nu går jag off-topic i min egen tråd men, är det någon som vet nån bra guide jag kan följa när "bli ormtjusare" är slut? (helst på svenska, dock inget måste) tack i förväg.