21 svar
176 visningar
Pernilla Mattsson 14
Postad: 18 dec 2022 00:05

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?

Analys 1202
Postad: 18 dec 2022 00:09

Är det få tal?

tio

tjugo

trettio

etc?

Både 10 och tio?

Pernilla Mattsson 14
Postad: 18 dec 2022 00:11

nej jag vill ju helst att man ska kunna skriva allt från tjugosju till tiotal osv.

Pernilla Mattsson 14
Postad: 18 dec 2022 00:13

och ja, programmet ska kunna ta emot 10 samt tio, behöver konvertera båda typer av strängar till numeriska uttryck i python.  

Analys 1202
Postad: 18 dec 2022 00:23

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.

Pernilla Mattsson 14
Postad: 18 dec 2022 00:39

tack!

har inte jobbat med dictionaries tidigare, hur anropar man dem?

Analys 1202
Postad: 18 dec 2022 00:51

Du definierar dem så,här:

upptillnitton={’noll’ : 0,

’en’ : 1,

.

.

}

sen 

if  volymstring in upptillnitton:

     Tal= upptillnitton[volymstring]

Pernilla Mattsson 14
Postad: 18 dec 2022 01:01

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?

Analys 1202
Postad: 18 dec 2022 01:10

Börja att kolla om strängen är isdigit, hoppa isf över dictionaries!

Fermatrix 7841 – Fd. Medlem
Postad: 18 dec 2022 01:11 Redigerad: 18 dec 2022 01:12

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.

Analys 1202
Postad: 18 dec 2022 01:23

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

Pernilla Mattsson 14
Postad: 18 dec 2022 01:27
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!

Lindehaven 820 – Lärare
Postad: 18 dec 2022 02:10

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

}

Analys 1202
Postad: 18 dec 2022 11:20

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.

Analys 1202
Postad: 18 dec 2022 11:23

Jag har ingen insikt i vilka kurser man ev lär sig om dictionary. Är dictionary långt bort från introkurser? 

Fermatrix 7841 – Fd. Medlem
Postad: 18 dec 2022 13:11

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

Fermatrix 7841 – Fd. Medlem
Postad: 18 dec 2022 13:16

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. 

Laguna Online 28602
Postad: 18 dec 2022 14:19

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.

Analys 1202
Postad: 18 dec 2022 14:28

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.

Laguna Online 28602
Postad: 18 dec 2022 14:30
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.

Analys 1202
Postad: 18 dec 2022 14:49

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.

Fermatrix 7841 – Fd. Medlem
Postad: 18 dec 2022 15:02 Redigerad: 18 dec 2022 15:03

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. 

https://realpython.com/python-f-strings/

Svara Avbryt
Close