Bokstäver till siffror
Hej!
I en input funktion frågar jag användaren hur många liter den önskar. Jag har gjort ett program som utgår från att användaren använder siffror. Men jag vill göra det möjligt att användaren skriver 'tio' istället för '10', vilken metod är effektivast?
Är det få tal?
tio
tjugo
trettio
etc?
Både 10 och tio?
nej jag vill ju helst att man ska kunna skriva allt från tjugosju till tiotal osv.
och ja, programmet ska kunna ta emot 10 samt tio, behöver konvertera båda typer av strängar till numeriska uttryck i python.
Börja med att kolla om tankad volym .isdigit()
annars kanske några dictionaries:
”en” : 1
“två” : 2
upptill 19
sen ev 2 dict till, ett med entalssiffror och ett med tiotalssiffror. Loopa igen nycklarna och stanna när di hittat trettio i ena och sju exempelvis i andra.
tack!
har inte jobbat med dictionaries tidigare, hur anropar man dem?
Du definierar dem så,här:
upptillnitton={’noll’ : 0,
’en’ : 1,
.
.
}
sen
if volymstring in upptillnitton:
Tal= upptillnitton[volymstring]
tipptopp! nu funkar programmet om användaren skriver med bokstäver, men nu går det inte att skriva med siffror, hur löser man att det fungerar med båda?
Börja att kolla om strängen är isdigit, hoppa isf över dictionaries!
Det känns som att vi involverar lite avancerade koncept. Detta ser ju ut att vara en introkurs (hashmaps, eller dict i python är nog inte tänk att användas här).
gör livet enkelt och använd bara nyckelordet or.
Inte riktigt med på hur du tänker kring or?
men absolut kan man iaf skriva ett antal ifsatser efter varandra:
if str == ’en’:
Volym=1
elif ….
Dracaena skrev:Det känns som att vi involverar lite avancerade koncept. Detta ser ju ut att vara en introkurs (hashmaps, eller dict i python är nog inte tänk att användas här).
gör livet enkelt och använd bara nyckelordet or.
hur skulle man tillämpa det i så fall? fattar din poäng med att det blir överkurs men ser inte hur or ska lösa detta. tack i alla fall för inputen!
Det går att lösa med if-elif-elif... men det blir många sådana. Enklare, kortare och tydligare är då en utökad dictionary ungefär så här:
upptillnitton = {
'0' : 0, ’noll’ : 0,
'1' : 1, 'en’ : 1,
'2' : 2, 'två' : 2,
.
o s v
.
'19' : 19,. 'nitton' : 19
}
Kom på en alternativ lösning för resterande tal upp till 99 som blir ganska enkel:
starta med
upptillnittionio som tidigare upptillnitton.
nu skriv en kodsnutt som lägger till element i detta dictionary från
”tjugo”+”” vars värde skall vara 20
till
”nittio” + ”nio” vars värde skall vara 99
det är enkel att lägga till element till dictionary:
upptillnittionio[“trettiosju”] = 37
detta kräver att du itererar i två nästade loopar,
den yttersta med tiotal som strängar och den innersta med ental.
lycka till.
Jag har ingen insikt i vilka kurser man ev lär sig om dictionary. Är dictionary långt bort från introkurser?
Ja, asså, ni har ju en poäng. Man skulle kunna använda enums, men tror inte heller det var tanken.
Dictionary tror jsg kommer tidigt i en python kurs, men kommer nog inte förrän en kurs i algoritmer och datastrukturer i C-liknande språk typ som Java eller C++.
Läraren borde väl ha gått igenom de verktygen hen vill att man skall använda för att lösa uppgiften tänker jag.
@Analys, med or menade jsg i if satsen, men det blir fortfarande en ganska lång "switch".
En annan kreativ lösning är att använda ASCII värdarna för bokstäverna för att ta reda på vilket tal de motsvarar.
Detta blir dock inte hållbart i vilket fall om man ska tillåta användaren att ange vad som helst.
Någonstans måste man ange sambandet mellan räkneorden (med bokstäver) och motsvarande tal. Man gör inte den totala koden kortare genom att använda en dict, bara lite effektivare, så man kan lika gärna ha en enorm if-sats. Om man har lärt sig om funktioner kan man gärna lägga den if-satsen i en funktion.
Enligt min uppfattning inte bara effektivare utan också lättare att förstå och felsöka, man skiljer ju på logik och data. Och vill man översätta till engelska uppdaterar man bara dctionariet. Detta alltså enligt min uppfattning.
Analys skrev:Enligt min uppfattning inte bara effektivare utan också lättare att förstå och felsöka, man skiljer ju på logik och data. Och vill man översätta till engelska uppdaterar man bara dctionariet. Detta alltså enligt min uppfattning.
Jag menade om man inte har kommit så långt att man har lärt sig om dict ännu.
Viktigast av allt: Pernilla Mattsson, hur går det att lösa uppgiften ? Och hur långt tänker du dig gå i fråga om volym?
ps.
lastbilar kan ha tankar på 500 liter eller mer.
ds.
Om man tar emot inputen tpy så här:
ett ett två -> 112, denna konverteringen går att automatisera väldigt enkelt men det förstör väl kanske syftet.
Men @Pernilla, får jag fråga när man någonsin hade föredragit att skriva: "trettiosju" istället för "37"? Stora problemet är val att det svenska språket inte direkt har ett konsekvent mönster som går att använda.
Angående dina strängar du printar, kika gärna på formaterade strägnar i Python. De gör livet mycket enklare eftersom du kan skriva dina strängar precis hur du vill ha det utan extra krabb.