Springen naar inhoud

[python] karakter inlezen


  • Log in om te kunnen reageren

#1

rembo357

    rembo357


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 13 februari 2012 - 20:33

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

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 13 februari 2012 - 23:34

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
inp = sys.stdin.read()
naar
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!
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#3

rembo357

    rembo357


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 14 februari 2012 - 14:37

sorry nee dat werkt ook niet en
dan krijg ik dit
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

#4

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 14 februari 2012 - 15:20

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:
import sys
print ('type een leter in')

inp = sys.stdin.readline()

if inp == 'a\n':
	print 'lol'

else:
	print 'fout'

#5

rembo357

    rembo357


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 14 februari 2012 - 15:21

er stond read ik weet niet of dat goed was ik heb er readline van gemaakt en dan geeft ie direct fout
import sys

print ('type een leter in')
inp = sys.stdin.readline(1)
a = 'a'

if inp == 'a':
	print'll'
	
else:
	print 'fout'

#6

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 14 februari 2012 - 15:30

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.

#7

rembo357

    rembo357


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 14 februari 2012 - 17:29

het werkt inderdaad

maar wat betekent
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

#8

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 14 februari 2012 - 17:43

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 :)

#9

rembo357

    rembo357


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 14 februari 2012 - 20:04

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.
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

Veranderd door rembo357, 14 februari 2012 - 20:16






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures