Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2022-08-09, 15:08
  #1
Medlem
DontWantWars avatar
Uppgift:

Skriv ett program som läser en mening bestående av minst två ord. Programmet ska sedan skriva ut ett meddelande där det talar om hur många ord användaren skrev in och vilket som det första och det sista ordet. Du får anta att det står (minst) ett blankt tecken mellan varje ord. Om användaren t.ex. skriver:
"Välkommen till Programmering 1 i Python"

Ditt program ska skriva följande:

*Du skrev 6 ord.
*Det första ordet var "Jag"
*Det sista ordet var "Python"

Ge gärna tips på hur jag bör gå tillväga för att lösa uppgiften, är verkligen helt lost.

Tack på förhand!
Citera
2022-08-09, 15:27
  #2
Medlem
SvenHelsings avatar
1) Läs in en sträng
2) Splitta upp strängen med regexet " +" (googla python split regex) och spara i en lista
3) Skriv ut storleken på listan samt första och sista elementet
Citera
2022-08-09, 15:48
  #3
Medlem
PotatisHulkens avatar
Python3.7

Kod:
words = input("Write some words:").split()
print(f"You wrote {len(words)} words")
print(f"The first word is {words[0]}")
print(f"The last word is {words[-1]}")
Citera
2022-08-09, 17:03
  #4
Medlem
attackes avatar
Citat:
Ursprungligen postat av PotatisHulken
Python3.7

Kod:
words = input("Write some words:").split()
print(f"You wrote {len(words)} words")
print(f"The first word is {words[0]}")
print(f"The last word is {words[-1]}")

Wow, vad duktig du är.
Men läs TS förfrågan igen.

Citat:
Ge gärna tips på hur jag bör gå tillväga för att lösa uppgiften

Det är inget fel att "avslöja" att du rekommenderar att man kan använda...
Kod:
str.split()
...för att få en array med orden.
Sen hade du kunnat tipsa om att det finns ett smidigt sätt att få det sista elementet i en Array.
Citera
2022-08-09, 17:15
  #5
Medlem
PotatisHulkens avatar
Citat:
Ursprungligen postat av attacke
Wow, vad duktig du är.
Men läs TS förfrågan igen.



Det är inget fel att "avslöja" att du rekommenderar att man kan använda...
Kod:
str.split()
...för att få en array med orden.
Sen hade du kunnat tipsa om att det finns ett smidigt sätt att få det sista elementet i en Array.

Mina tips finns gömda i en liten kodsnutt, att hitta dem överlåter jag till TS. Man kan inte bli skedmatat helt och hållet.
Citera
2022-08-09, 21:38
  #6
Medlem
Citat:
Ursprungligen postat av PotatisHulken
Python3.7

Kod:
words = input("Write some words:").split()
print(f"You wrote {len(words)} words")
print(f"The first word is {words[0]}")
print(f"The last word is {words[-1]}")


Finns genast ett problem med det här..


Kod:
In [1]: words = input("Write some words:").split()
   ...: print(f"You wrote {len(words)} words")
   ...: print(f"The first word is {words[0]}")
   ...: print(f"The last word is {words[-1]}")
Write some words:
You wrote 0 words
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-1-fe6a60707745> in <module>
      1 words = input("Write some words:").split()
      2 print(f"You wrote {len(words)} words")
----> 3 print(f"The first word is {words[0]}")
      4 print(f"The last word is {words[-1]}")

IndexError: list index out of range


Du bröt mot reglerna i första raden. Programmet skulle acceptera MINST två ord med ETT mellanslag. Du får dessutom ett indexError med din lösning.
Citera
2022-08-09, 21:42
  #7
Medlem
Citat:
Ursprungligen postat av DontWantWar
Uppgift:

Skriv ett program som läser en mening bestående av minst två ord. Programmet ska sedan skriva ut ett meddelande där det talar om hur många ord användaren skrev in och vilket som det första och det sista ordet. Du får anta att det står (minst) ett blankt tecken mellan varje ord. Om användaren t.ex. skriver:
"Välkommen till Programmering 1 i Python"

Ditt program ska skriva följande:

*Du skrev 6 ord.
*Det första ordet var "Jag"
*Det sista ordet var "Python"

Ge gärna tips på hur jag bör gå tillväga för att lösa uppgiften, är verkligen helt lost.

Tack på förhand!

Det du behöer läsa på är:

input() - vad gör den, vilken datatyp RETURNERAR den.
Strängoperationer
string.split() -Vad gör den, vilken datadyp RETURNERAR den.
if, elif, else, finnish - Vad gör dessa?
datatyperna str(), list()
Hur du slicar en list().
print()


Jag pseudokodar åt dig:

Jag använder en funktion som låter mig skriva något i konsolen.
Funktionen returnerar det jag skrev med någon datatyp av str(), int(), float().
Jag använder en funktion som delar upp min textrad och returnerar en container, antingen list(), dict(), set().
Reglerna säger att mitt program måste acceptera minst två ord med ett mellanslag.
Jag måste kontrollera att det stämmer och svara om det inte stämmer, om textraden är tom eller ett ord.
Nu måste jag visa upp orden.
- Antal ord skrivet
- första ordet i min container.
-sista ordet i min contariner
OM det finns flera än två ord.
Jag måste använda en funktion som skriver dessa tre händelser till konsolen.

Behöver du hjälp fråga!
Du kan ta exemplet du fick av någon härovan som mall. MEN det exempelt är fel på så många sätt, men det är en bra grund för dig.
__________________
Senast redigerad av Methos 2022-08-09 kl. 21:53.
Citera
2022-08-09, 21:58
  #8
Medlem
Citat:
Ursprungligen postat av tigerpu
https://stackoverflow.com/

Citat:
Ursprungligen postat av OtherBarry
https://www.w3schools.com/python/python_lists.asp

Dessa två hjälper föga!
Om han är helt grön i språket hjälper inte någon av era länkar.
Vägled honom istället.



Citat:
Ursprungligen postat av SvenHelsing
1) Läs in en sträng
2) Splitta upp strängen med regexet " +" (googla python split regex) och spara i en lista
3) Skriv ut storleken på listan samt första och sista elementet

Han ska inte läsa in en sträng!
Han ska få sin konsol/terminal att acceptera tangentbordstryck i form av ord.
Den funktionen returnerar däremot en viss datatyp.
Den datatypen har en inbyggd funktion str.split() som INTE är regex.
Ge sjutton i att dirigera honom till regexträsket, du vet att han aldrig kommer upp därifrån.
Du behöver inte spara någon lista. str.split() returnerar en lista.
Sedan ser du i mitt första inlägg ovan vad som händer när folk bara "skriver ut" någonting och drar ut index från en lista hur som helst. Det utan att kontrollera innehållet i listan.


Citat:
Ursprungligen postat av attacke
Kod:
str.split()
...för att få en array med orden.
Sen hade du kunnat tipsa om att det finns ett smidigt sätt att få det sista elementet i en Array.

Nu ska han förvisso inte använda array. Python har INGE datatyp som kallas Array(). Han ska inte lära sig NÅGONTING om Array() just nu.

Python använder datatypen och klassen list() som är en subklass av collections.abc.Sequence.
Bara för att list() i vissa fall råkar vara en endimensionell array betyder inte att det är en array.

string.split() returnerar således inte en array(), utan en list
Kod:
strsplit([sep[, maxsplit]]) --> list 


Python har dock en modul, antingen math eller numpy som båda har array() och numpy.ndArray().

Att string.split() troligen har en bakomliggande C++-funktion som returnerar en C++ - Array() är helt irrelevant för TS som inte ens vet hur han skall börja med sin uppgift han har.
__________________
Senast redigerad av Methos 2022-08-09 kl. 22:35.
Citera
2022-08-09, 23:14
  #9
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av Methos
Han ska inte läsa in en sträng!
Han ska få sin konsol/terminal att acceptera tangentbordstryck i form av ord.
Jag har lite svårt att se hur input() inte är att läsa in en sträng.

Citat:
Den datatypen har en inbyggd funktion str.split() som INTE är regex.
Ge sjutton i att dirigera honom till regexträsket, du vet att han aldrig kommer upp därifrån.
Jepp, den var klumpig av mig. Jag tänkte inte på vad som händer när man anropar split() utan argument.

Citat:
Du behöver inte spara någon lista. str.split() returnerar en lista.
Nej, rent tekniskt måste man inte spara en lista, men jag ser inget som helst fel i att TS skriver exempelvis words = input_string.split()

Citat:
Sedan ser du i mitt första inlägg ovan vad som händer när folk bara "skriver ut" någonting och drar ut index från en lista hur som helst. Det utan att kontrollera innehållet i listan.
Jaha?
Citera
2022-08-09, 23:20
  #10
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av PotatisHulken
Mina tips finns gömda i en liten kodsnutt, att hitta dem överlåter jag till TS. Man kan inte bli skedmatat helt och hållet.
Ditt inlägg var ett skolboksexempel på skedmatning

Citat:
Ursprungligen postat av Methos
Du bröt mot reglerna i första raden. Programmet skulle acceptera MINST två ord med ETT mellanslag. Du får dessutom ett indexError med din lösning.
Det är tämligen uppenbart att det som menas är att användaren förväntas ge indata som består av minst två ord och att man inte behöver hantera vad som händer vid ogiltig indata. Potatishulkens lösning är garanterat godkänd.
__________________
Senast redigerad av SvenHelsing 2022-08-09 kl. 23:24.
Citera
2022-08-10, 01:12
  #11
Medlem
Citat:
Ursprungligen postat av SvenHelsing
Det är tämligen uppenbart att det som menas är att användaren förväntas ge indata som består av minst två ord och att man inte behöver hantera vad som händer vid ogiltig indata. Potatishulkens lösning är garanterat godkänd.

Det står explicit i uppgiften att programmet skall acceptera minst två ord med ett mellanslag. Då kan inte programmet acceptera ett ord. Alltså behöver du ha en kontroll där.
Citera
2022-08-10, 01:33
  #12
Moderator
Neksnors avatar
Börja med att fundera på hur man löser problemet generellt och definiera det som behöver definieras.
Vad är ett ord?
Vad är ett blankt tecken?
Vad är en mening?
Vad behöver man hålla reda på?

När ovanstående är löst kan du starta datorn igen.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback