Python-fråga *ny fråga*

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Python-fråga *ny fråga*

Inlägg av Icecap »

Håller på att hjälpa med en uppgift i programmering. Språket är Python och jag har definitivt inte samma tankegång som designer av det skit.

Skal skriva hhv. '1' - '8' och 'A' hhv. 'H' enl. ett koordinatsystem, alltså ett shack-bräda med koordinater.

Att placera texten grafisk är inget problem alls (numera) men jag kan inte klura ut hur jag kan skriva texten till en buffer som kan placeras.

Buffern är väl en 'list' men hur i all sina dar ska jag fixa detta?
I C ville det bli:

Kod: Markera allt

char Buffer[10], i;
for(i = 0; i < Size_X; i++)
  {
  sprintf(Buffer, "%c", 'A' + i);
  ... // Put buffer on canvas as text
  }
Senast redigerad av Icecap 6 december 2014, 18:55:30, redigerad totalt 1 gång.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Python-fråga

Inlägg av Micke_s »

Skit skulle jag inte säga att det är, väldigt trevligt att hålla på med när man har lärt sig...

Förstår dock inte riktigt hur resultatet ska se ut dock.
är det detta som efterfrågas?:

Kod: Markera allt

 A B C D E F G H
1
2 
3 
4
5
6
7
8
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

Hur ska det se ut?

Kod: Markera allt

 A B C D E F G H
1
2
3
4
5
6
7
8
eller på något annat sätt?

EDIT:
HA! :-)
Det räcker kanske att svara på en av våra frågor... :-)
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python-fråga

Inlägg av Icecap »

Det är korrekt - men antal värden ska inte vara fasta, de ska kunde ändras om man ändrar konstanterna Size_X och Size_Y.

Hade det varit så att det alltid var en 8x8 bräda hade det varit avklarat sedan länge men nu är det inte så.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Python-fråga

Inlägg av Micke_s »

funkar upp till Z.
Kanske inte är snyggaste koden precis

Kod: Markera allt

' ' + ' '.join(map(chr, range(ord('A'), ord('H')+1)))  + '\n' + '\n'.join(map(str, range(1,8+1)))
Edit: vad händer om Size_X är större än A-Z, ska man köra AA-ZZ eller?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

C exemplet ger väl en sträng med "ABCDEFGH" ?

Kod: Markera allt

b = []
a = range(1,9)
for i in a:
  b.append(chr(64+i))
print b
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Sen kan ni ju göra något med "b".

Eller om ni vill ha en vanlig sträng:

Kod: Markera allt

b = ''
a = range(1,9)
for i in a:
  b = b + chr(64+i)
print b
ABCDEFGH
Nian kan ju bytas mot "max+1" eller liknande
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

Kod: Markera allt

size_x = 10
size_y = 8
b = ''
for i in range(1, size_x + 1):
  b = b + ' ' + chr(64+i)
print b
for i in range(1, size_y + 1):
  print i
 A B C D E F G H I J
1
2
3
4
5
6
7
8
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python-fråga

Inlägg av Icecap »

Micke_s: tack - men ingen cigarr.

Sodjan: C-exempeln ger en sträng på 1 tecken med EOL efter (0x00).

Vi har redan lösa placeringen av varje siffer/bokstav, det som verkar väldigt ologisk för mig är hur man skapar ett tecken baserat på ett numerisk värde.

Om man i C ger en char ett värde på 'A' + 3 blir det ju 'D' m man läser ut den char som tecken - och detta är den funktion jag vill uppnå.

Så jag vill inte uppnå en sträng som ser ut som:

Kod: Markera allt

"8              "
"7              "
"6              "
"5              "
"4              "
"3              "
"2              "
"1              "
"  A B C D E F G H"
men istället ett antal "strängar" på 1 tecken där tecknet beror på 'i' i ekvationen 'A' + i (eller '0' + i).

Storlekar som kräver AA osv är inte aktuella.

Siffrorna borde ju gå att skriva in i en list med rätt formattering, alltså att 10 blir "10" osv. Jag har hittat formatringsförklaringen - men alla exempel går till StandartOut och det kan ju kvitta när det är en fullgrafisk yta texten ska placeras på.

Jag ser att jag var otydlig i min beskrivning till att börja med. Jag vill alltså kunde göra motsvarigheten till sprintf(Buffer, "Format", Värde);
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

> Sodjan: C-exempeln ger en sträng på 1 tecken med EOL efter (0x00).

Vad ska du ha 0x00 till? Är det inte Python ni använder?

> Om man i C ger en char ett värde på 'A' + 3 blir det ju 'D' ...

Kod: Markera allt

print chr(ord('A') + 3)
D
Att fylla ut stränger med blank är "som vanligt"...
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python-fråga

Inlägg av Icecap »

Sodjan: Till detta behöver jag inte EOL men resultatet blir så i C.

Och en 'print' i Python går till StdOut vilket är totalt värdelöst i detta. Jag behöver skapa en text(sträng) istället.

chr() finns inte i Python.
ord() finns inte i Python.

Python är verkligen ett python språk!
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

Man kan inte "fuska" i Python som man kan i C
via t.ex implicta casts o.s.v.

Kod: Markera allt

print chr('A' + 3)
TypeError: cannot concatenate 'str' and 'int' objects
> Och en 'print' i Python går till StdOut vilket är totalt värdelöst i detta. Jag behöver skapa en text(sträng) istället.

Ja men gör det då !!

Kod: Markera allt

s = chr(ord('A') + 3)
print s
D
Allt som du kan göra "print" på kan du även spara i en variabel, så klart.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

> chr() finns inte i Python.
> ord() finns inte i Python.

Vad tror du att jag kör då?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python-fråga

Inlägg av Icecap »

sodjan: tack!!!! och ja, ord() och chr() finns visst i Python :oops:
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python-fråga

Inlägg av sodjan »

He he... :-)

Jag har använd Python till en del små "fix-jobb" och även som "motor"
till web baserade rapporter hos en kund under flera år nu.

Många klagar t.ex på den tvingande indenteringen, men samtidigt är just
bristen på indentering som många klagar på när det gäller andra spårk... :-)

I mitt fall är huvudorsaken till att jag använder det att så mycket är
inbyggt i den "dist" som jag använder. Ett hundratal populära tillägg
som inte ingår i Python som standard. Databas gränssnitt, PDF verktyg
o.s.v.
Skriv svar