Gå til innhold

Python: mulig å skjekke om brukeren skrev inn en string?


Anbefalte innlegg

Skrevet

Hei!

 

Er det mulig å skjekke om brukeren skrev inn en string? Altså:

 


operator = str(raw_input("What's your operator? "))

numb1 = int(raw_input("Please insert the first number:"))
numb2 = int(raw_input("Please insert the second number:"))

[b]if operator == str:
   print "Error"[/b]

 

Lager en kalkulator, og prøver å få fram en error melding hvis inputen er en string.

Videoannonse
Annonse
Skrevet

Operatoren skal ikke kunne være float eller int.

numb1 og numb2 kan være float og int, men ikke string.

 

Vet at dette ble veldig rotete fremstit :p

Skrevet

Viss du gir en string til float/int får du ValueError.

Denne feilen fanger du opp med "try/except" feilbehandling og gir en fornuftig tilbakemelding til bruker.

try:
  numb1 = int(raw_input("Please insert the first number:"))
except ValueError:
  print 'Not a number,try again'

Skrevet (endret)

Fins det et syntaks hvor hvis ett eller annet skjer, starter programmet på nytt?

Altså hvis inputen er string starter koden fra starten av

Endret av MrPear
Skrevet (endret)

Flere måter å sjekke om en String faktisk er en String:

 

input = raw_input("What's your operator? ") //input er altid String

if input.isalpha():
 #do something
elif input.isdigit():
 #do something

Eller..:

def isint(input):
 return input.isdigit()

def isfloat(input):
 try:
   return float(input) != None;
 except ValueError:
   return False;

def isstr(input):
 if not isint(input) and not isfloat(input):
   return True
 return False

if __name__ == '__main__':
 input = raw_input("What's your operator? ") #input er altid String
 if isstr(input):
   #do something

 

Fins det et syntaks hvor hvis ett eller annet skjer, starter programmet på nytt?

Altså hvis inputen er string starter koden fra starten av

 

En loop gjør jobben helt fint:

while True:
 input = raw_input("What's your operator? ")
 if input.isdigit():
   print("You must input a String!")
 else:
   break

print(input)

Endret av warpie
Skrevet

warpie sine forslag er greie dem.

Men når det gjelder operator input ikke sjekk om det er string,men at det er +-*/.

Alt annet enn +-*/ gir du en tilbakemelding til bruker at det er feil input.

 

operator input kan gi tilbake f.eks '+',dette er en string og kan ikke brukes som +.

Derfor må '+' linkens til f.eks en funksjon som gjør oppgaven med og addere tallene.

 

Du kan se litt på denne,rimelig grei med et dictionary og metode get,

som vil melding "Not an operator use +-*/" viss noe annet skrives inn.

def add(numb1, numb2):
  return numb1 + numb2

def sub(numb1, numb2):
  return numb1 - numb2

def foo(ops, n1, n2):
  return {
  '+' : add(n1, n2),
  '-' : sub(n1, n2),
  }.get(ops, "Not an operator use +-*/")

#operator = raw_input("What's your operator? ") #no need for str()
operator = '+' #Try anything else than +-
numb1 = 2
numb2 = 5
print foo(operator, numb1, numb2) #7

Skrevet (endret)

warpie sine forslag er greie dem.

Men når det gjelder operator input ikke sjekk om det er string,men at det er +-*/.

Alt annet enn +-*/ gir du en tilbakemelding til bruker at det er feil input.

 

operator input kan gi tilbake f.eks '+',dette er en string og kan ikke brukes som +.

Derfor må '+' linkens til f.eks en funksjon som gjør oppgaven med og addere tallene.

 

Du kan se litt på denne,rimelig grei med et dictionary og metode get,

som vil melding "Not an operator use +-*/" viss noe annet skrives inn.

def add(numb1, numb2):
  return numb1 + numb2

def sub(numb1, numb2):
  return numb1 - numb2

def foo(ops, n1, n2):
  return {
  '+' : add(n1, n2),
  '-' : sub(n1, n2),
  }.get(ops, "Not an operator use +-*/")

#operator = raw_input("What's your operator? ") #no need for str()
operator = '+' #Try anything else than +-
numb1 = 2
numb2 = 5
print foo(operator, numb1, numb2) #7

 

Ok, så langt har jeg ikke kommet i læringen av Python, men takk for svar!

 

Går det ikke ann å lage noe slikt, eller er jeg helt på bærtur?

 

if operator != + or - or / or *

Endret av MrPear
Skrevet
Går det ikke ann å lage noe slikt, eller er jeg helt på bærtur?

Du er nok på bærtur :hm:

Du må huske at det operator raw_input gir deg tilbake et string objekt,og ikke en fungerende operator som + men '+'.

Det er flere måter og gjøre dette på,her en til.

def add(numb1, numb2):
  return numb1 + numb2

numb1 = 2
numb2 = 5
operator = '+'
if operator in ['+', '-', '/', '*']:
  if operator == '+':
  print add(numb1, numb2) #7
else:
  print "Not an operator use +-*/"

Skrevet

 

Du er nok på bærtur :hm:

Du må huske at det operator raw_input gir deg tilbake et string objekt,og ikke en fungerende operator som + men '+'.

Det er flere måter og gjøre dette på,her en til.

def add(numb1, numb2):
  return numb1 + numb2

numb1 = 2
numb2 = 5
operator = '+'
if operator in ['+', '-', '/', '*']:
  if operator == '+':
  print add(numb1, numb2) #7
else:
  print "Not an operator use +-*/"

 

Um..

Er ikke så fryktelig god i Python (som dere kanskje har oppdaget), så noe a det over er litt vanskelig å forstå. For all del, tusen takk for svar, men hjelper lite når det er ting jeg ikke har lært :)

 

Er bare en 15 åring som intesserer meg for programmering, men vi har jo alle vært der hvor jeg er nå :)

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...