1 van 1

[python] karakter inlezen

Geplaatst: ma 13 feb 2012, 20:33
door rembo357
hallo mensen

ik heb een vraag over python

ik ben bezig met een programmaatje.

maar ik zit met een probleem. ik wil dat je een letter invoert en dan geeft hij een ander letter dit lijkt misschien stom maar wat ik er mee van plan ben is best wel cool

dit is wat ik tot nu heb

maar hij geeft altijd fout als ik a intypen

import sys

print ('type een leter in')

inp = sys.stdin.readline()

a = 'a'

if inp == a:

print'lol'



else:

print 'fout'

wat doe ik fout

alvast bedankt

Re: [python] karakter inlezen

Geplaatst: ma 13 feb 2012, 23:34
door In physics I trust
Dat duurde even voor ik het vond. Ik zat me blind te staren want ik zag de fout niet.

Ik denk dat ik een oplossing heb gevonden. Verander

Code: Selecteer alles

inp = sys.stdin.read()
naar

Code: Selecteer alles

inp = sys.stdin.read(1)
Dan wordt er net één char ingelezen. Anders denk ik dat de \n wordt meegenomen.

Als iemand iets anders weet, dan hoor ik het ook graag!

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 14:37
door rembo357
sorry nee dat werkt ook niet en

dan krijg ik dit

Code: Selecteer alles

Traceback (most recent call last):

  File "C:\Documents and Settings\Administrator\Bureaublad\lol.py", line 4, in <module>

	inp = sys.stdin.read(1)

AttributeError: read

>>>


ik snap het zelf ook niet meer maar bedankt voor het proberen

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 15:20
door Xenion
Het is een simpele vraag, maar dat blijkt niet zo evident te zijn in Python.

Kijk hier eens. Als ik op google zoek kom ik steeds op diezelfde code terecht.

Dit is wat ik zelf heb bedacht: het is niet echt een mooie oplossing, maar als je het als volgt doet dan werkt je programma wel:

Code: Selecteer alles

import sys

print ('type een leter in')

inp = sys.stdin.readline()

if inp == 'a\n':

print 'lol'

else:

print 'fout'

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 15:21
door rembo357
er stond read ik weet niet of dat goed was ik heb er readline van gemaakt en dan geeft ie direct fout

Code: Selecteer alles

import sys



print ('type een leter in')

inp = sys.stdin.readline(1)

a = 'a'



if inp == 'a':

	print'll'

	

else:

	print 'fout'

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 15:30
door Xenion
Probeer eens met de code die ik hierboven gaf. Het idee is dat je niet probeert van die ene character te lezen, maar dat je je bewust bent van het feit dat je die newline meekrijgt en daar rond werkt.

Je kan ook gewoon zeggen dat je van inp enkel het eerste karakter wil overhouden.

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 17:29
door rembo357
het werkt inderdaad

maar wat betekent

Code: Selecteer alles

if inp == 'a\n':
dan die 'a\n'

dat snap ik niet helemaal maar heel erg bedankt nu kan ik door met het programmaatje :)

maar bedankt

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 17:43
door Xenion
Je verwacht dat er 'a' staat in de input van de gebruiker. Maar door de functie die je aanroept krijg je ook steeds nog een witregel mee. Als je len(inp) bekijkt zal je zien dat die 2 is ipv 1.

De code voor een witregel wordt gegeven door '\n' als je weet dat die witregel mee in inp zit dan kan je daar rekening mee houden door hem ofwel te verwijderen, ofwel door hem ook in de controle te zetten.

if inp = 'a\n' kijkt dus na of in inp een a staat, gevolgd door een witregel.

a = 'a'

if inp == a:

Die regel vond ik een beetje overbodig. Ik heb die op 1 lijn geschreven.
maar wat ik er mee van plan ben is best wel cool
Ik ben benieuwd :)

Re: [python] karakter inlezen

Geplaatst: di 14 feb 2012, 20:04
door rembo357
oké nu snap ik het ja wat ik ga maken is een soort van vertaler als je hoi intypt dan laat het programmaatje hoi zien in het 'standard galactic alfabet' dat moet het worden.

maar erg bedankt voor de uitleg. ik kan het wel zo gebruiken maar het is beter om te weten hoe het werkt.

nu moet ik alleen nog zorgen dat als je meerdere Letters intypt hij ze allemaal vertaald ik heb wel een idee hoe ik het ga doen maar suggesties zijn welkom.

Code: Selecteer alles

ant = ''

dan iets wat letter voor letter doet

ant = inp + ant 

zo iets

ik ken iemand die weet hoe dat moet moet ik binnen kort eens vragen