These are chat archives for dbwebb-se/python

5th
Oct 2017
Allinrep
@pejg12
Oct 05 2017 09:04
@Daggerby när du delar med dig av kod behöver du även dela med dig av vilken rad det är som orsakar felmeddelandet. det låter som att du någonstans försöker använda .command på ett objekt som inte har ett sådant attribut. printa ut objektet precis före för att se vad det innehåller.
Daniel Mattsson
@daniel-mmm
Oct 05 2017 09:22
@Daggerby Problemet är att du returnerar dicten options som innehåller nycklarna "known_args" och "unknown_args" från cli_parser. I din main fil försöker du sedan ta emot två värden, vilket gör att python itererar över din dict och försöker dela ut värden till dina variabler. När man itererar över en dict får man ut nycklarna, så dina variabler args, och unknownargs i main får strängvärdena "known_args" och "unknown_args".
Daggerby
@Daggerby
Oct 05 2017 11:01
Ok. Ska komplettera när jag kommer hem från jobb. :-) Försökte dela så mycket som möjligt utan att visa allt. Förstår inte riktigt hur jag ska få tag i filen som användaren anger.
Allinrep
@pejg12
Oct 05 2017 11:26
@Daggerby Jag tror det är bäst om du gör ett minimalt testprogram igen, och får ordning på kommandoraden innan du börjar analysera något. Ett minimalt testprogram i stil med argparse-övningen, där det enda du gör är att få till vilka commands och options och arguments som ska finnas med, och använder dig av print för att hitta vad som hamnar vart. Då kan du, när du har hittar rätt, spara undan filnamnet i en egen variabel.
args, unknownargs = cli_parser.parse_options()

print(args)
print(unknownargs)

filename = lämpligtuttryck
print(filename)     # för att testa att det blir rätt

command = lämpligtuttryck
print(command)
limy17
@limy17
Oct 05 2017 12:37

Hej! Jag har en fråga ang. en anvisning i krav 4 i kmom06: "Ange --silent för att enbart visa statuskoden. "
https://dbwebb.se/uppgift/din-egen-chattbot-marvin-steg-5

Var står det hur man gör det? Hittar det inte i kursmaterialet.

Allinrep
@pejg12
Oct 05 2017 12:39
det var ett krav att --silent skulle fungera i kmom05 också, hur löste du det där?
limy17
@limy17
Oct 05 2017 12:51
@pejg12 Jag menar inte det, utan hur man kopplar ihop --silent med visning av statuskoden. "if --silent ...."
Byter jag ut det som står efter action i option: -s, till visa statuskod, så fungerar --silnet ju inte längre i original,
vilket är ett av de första kraven.
Mikael Roos
@mosbth
Oct 05 2017 13:49
@Daleke om du har frågor kring rättningar av kmom från gamla kurser så mailar du till dbwebb@bth.se. Beroende av när du lämnat in så resulterar det i rättningar eller ej. Det finns ett uppsamlingsheat för rättningar i gamla kurser, det pågår under oktober. Men att ha en dialog med dbwebb@bth.se är ett starkt tips. Annars är det inte säkert att något händer.
limy17
@limy17
Oct 05 2017 14:01
@mosbth Hur kopplar man val med -- framför, till sina funktioner? (kmom06)
Allinrep
@pejg12
Oct 05 2017 14:01
@limy17 det är inte --silent som ska hämta statuskoden, det är ping som ska göra det. --silent ska bara se till att ping ger ett väldigt mycket kortare svar.
"Pinga en webbsida med följande kommando. Programmet skall ange status-koden för HTTP-anropet tillsammans med länken som besöktes."
limy17
@limy17
Oct 05 2017 14:02
Det jag undrar är hur man kopplar funktionen till --silent
Allinrep
@pejg12
Oct 05 2017 14:02
så om man kör kommandot ping så ska programmet svara med statuskod OCH länk.
om man kör ping --silent så ska det vara bara statuskod, inte länk.
gjorde du inte något med --silent i kmom05?
den skulle vara i kombination med kommandon där med
limy17
@limy17
Oct 05 2017 14:03
Jag skulle vilja samla alla parse_options i tex. en variabel opts.
Allinrep
@pejg12
Oct 05 2017 14:03
argparse från övningen i kmom05 har koll på om silent finns med eller inte, samtidigt som kommandot finns med. gå tillbaka till den övningen och se att du kan få fram information från både kommandot och silent samtidigt.
limy17
@limy17
Oct 05 2017 14:05
Jag vet att man kan göra det, och har precis läst igenom den igen. Har för mig att jag lade in ngt som "if --silent" i funktionen.
Allinrep
@pejg12
Oct 05 2017 14:08
ja, när du väl har hittat informationen om att silent finns med så är det rimligt att ha en if-sats
limy17
@limy17
Oct 05 2017 14:08

Det står bara såhär i instruktionen till uppgiften kmom05:

Visa bokstavsfrekvensen i texten phil.txt med extra utskrift

$ python3 main.py --verbose letter_frequency phil.txt

När man skriver till verbose skrivs listan ut i bokstavsordning.

Allinrep
@pejg12
Oct 05 2017 14:09
hm, det var inte mycket till instruktioner
limy17
@limy17
Oct 05 2017 14:15
Jag behöver ngt som kollar hur input från användaren ser ut, för att kolla om hen valt --silent...
Allinrep
@pejg12
Oct 05 2017 14:15
här har jag skrivit mer om verbose och silent: https://dbwebb.se/t/6870
det är argparse som ska kolla all input från användaren
argparse kollar allt och returnerar ett objekt med alla svar du behöver. main hämtar det svaret och där avgör du sedan vad som ska hända, vilka funktioner som ska kallas på och hur mycket output som ska skrivas ut.
mer om det här: https://dbwebb.se/f/56013
limy17
@limy17
Oct 05 2017 14:20
Tack! Fungerar det att lägga till "if --silent" i commands (main.py) för att lösa kravet?
elif args["command"] == "get" and "--silent" and unknownargs:
... eller måste det ligga i parse_options i cli_parser.py isf?
Allinrep
@pejg12
Oct 05 2017 14:22
jag vet inte exakt vad alla variabler heter i din kod. du har en funktion inne i cli_parser.py, den funktionen returnerar ett resultat. du kallar på den funktionen inne i main.py och lagrar resultatet in i en variabel. printa ut den variabeln för att se vad den innehåller, sen kan du klura ut hur du ska skriva din if-sats.
jag skulle hellre skriva koden i stil med det här (låtsaskod):
om ping-kommandot:
    resultat = funktionensompingar(länken)
    om silent:
        print(resultatet)
    else:
        print(länk)
        print(resultatet)
fast med DRY i åtanke så hade jag egentligen gjort det lite annorlunda
om ping-kommandot:
    resultat = funktionensompingar(länken)

    om not silent:
        print(länk)
    print(resultatet)
hittade du è-tecknet på ditt tangentbord?
`
limy17
@limy17
Oct 05 2017 14:26
Ok, får experimentera lite. Ja, jag hittade det.
Daleke
@Daleke
Oct 05 2017 14:28
@mosbth Nej, det rör inte en gammal kurs. Jag går den pågående kursen. Men jag har inte fått någon bedömning på Kmom05 ännu. Däremot ligger jag en och en halv vecka före i kursmoment, så det var ett tag sedan jag lämnade in Kmom05. Eftersom halva rättningsfönstret redan gått så började jag bli orolig.
limy17
@limy17
Oct 05 2017 14:29
@pejg12 Jag tänker försöka med detta först, eftersom jag snart är klar med det:
elif args["command"] == "get" and unknownargs and opts["command"] == "--silent" and unknownargs:
Allinrep
@pejg12
Oct 05 2017 14:32
det där är ett förvirrande uttryck. varför har du and unknownargs två gånger? det gör ingen skillnad.
Mikael Roos
@mosbth
Oct 05 2017 14:33
@Daleke ingen anledning till oro, du har ju gjort vad du ska. Bara avvakta tills någon annan gör sitt jobb.
Daleke
@Daleke
Oct 05 2017 14:36
Ha ha... Mitt i prick. Jag gissar att jag har en orolig själ. Nå, en fråga till har jag. I instruktionerna till projektet står det att vi har 20+20+20+20 timmar till förfogande, men rekommenderad studieplan säger tre veckor. Jag gissar att den sista veckan flyttats till java-projektet eftersom det har fem veckor?
Allinrep
@pejg12
Oct 05 2017 14:38
vi läser ingen java här, du kanske menar javascript-projektet
Daleke
@Daleke
Oct 05 2017 14:40
Givetvis. Förlåt. Eftersom jag kan absolut noll än så länge i något av det så trodde jag det var samma sak.
Allinrep
@pejg12
Oct 05 2017 14:40
ska se om jag hittar det @mosbth skrev om projektets tid häromveckan, kortfattat handlade det om att man själv väljer hur många timmar på det, när man vet hur många veckor man får.
Men när standardupplägget möter högskolans läsperioder så ser vi att en läsperiods omfattning varierar mellan 8-10 veckor. Det ger att kursens tillgängliga kalendertid skiftar beroende på vilken läsperiod den går i.
limy17
@limy17
Oct 05 2017 14:43

@mosbth Hej! Krav 4 i kmom06 känns för otydligt tycker jag. Skulle du kunna specificera lite? Hur ska hela raden se ut för valet --silent?
"4. Pinga en webbsida med följande kommando.

python3 main.py ping <url>
Programmet skall ange status-koden för HTTP-anropet tillsammans med länken som besöktes. Ange --silent för att enbart visa statuskoden. Lagra undan resultatet i en fil. Visa innehållet i filen genom att ange kommandot.

python3 main.py ping-history"

Allinrep
@pejg12
Oct 05 2017 14:43
javascript-projektet har bara 5 veckor på papper, men det är jul och nyår osv så det blir mycket mindre tid i praktiken
@limy17 python3 main.py --silent ping https://dbwebb.se/humans.txt
limy17
@limy17
Oct 05 2017 14:45
@pejg12 Tack!
Daleke
@Daleke
Oct 05 2017 14:45
@pejg12 Ok, jag förstår tidsupplägget. Tack.
limy17
@limy17
Oct 05 2017 15:00
@pejg12 Ang. kmom06: Om det är tänkt att användaren ska kunna välja vilket url som helst, hur initierar jag då ett okänt url som ett argument för en funktion?
Allinrep
@pejg12
Oct 05 2017 15:02
@limy17 det är meningen att du ska ha löst det i kmom05 också, med vilket filnamn som helst..
@limy17 resultatet du får från cli_parser borde innehålla url:en på något sätt. printa ut det resultatet och se vad du hittar där.
limy17
@limy17
Oct 05 2017 15:09

Jag har löst det med filnamnet i kmom05. Jag undrar hur man gör med url? Är det bara:
def funktion(url):
url = "http....."

.... och sen kan användaren skriva vad hen vill?

Daleke
@Daleke
Oct 05 2017 15:11
Hur funkar projektredovisningen för oss distansare?
Allinrep
@pejg12
Oct 05 2017 15:14
url = någotresultatfråncliparser
du ska inte någonstans i koden behöva ange http
Mikael Roos
@mosbth
Oct 05 2017 15:14
@Daleke spela in en redovisning på youtube, med cam, eller delta i hangout och redovisa tillsammans med en handfull andra. Kommer info nästa vecka om det.
limy17
@limy17
Oct 05 2017 15:16
@pejg12 Ok, såhär typ?:
https://codeshare.io/axgMyk
Allinrep
@pejg12
Oct 05 2017 15:18
@limy17 det där ser väldigt rimligt ut :+1: och vad urlPing innehåller, det avgör du i main där du tolkar resultatet från cli_parser
Martin Hövre
@ocpu
Oct 05 2017 16:27
På kmom06 python ska man ta första bästa article eller ska man ta alla? För om jag tar första bästa på https://dbwebb.se blir det en article med bara en h1 som innehåller "Nyheter".
qara17
@qara17
Oct 05 2017 16:30
gällande kmom04 marvin uppgiften. när man skriver ordet "citat" tiil marvin så väljer den en citat genom random.choice, hittils är det rätt, men sen avslutas programmet, jag vill på något sätt få den återgå till menyval igen så att man kan knappa in något val igen tills man själv "q" för att avsluta https://codeshare.io/GkngB3
knappar in q
Daniel Mattsson
@daniel-mmm
Oct 05 2017 16:33
@qara17 Ta bort din break så kommer du forsätta snurra
@qara17 Om problemet är att du vill pausa efter citatet har skrivits ut kan du lägga till input("Tryck på retur för att fortsätta..."), så körs inte programmet vidare förrän användaren trycker på retur/enter
qara17
@qara17
Oct 05 2017 16:38
det hjälpte inte med break i allafall, jag har försökt tidigare med att lägga input utan något vidare resultat, ska prova igen
Daniel Mattsson
@daniel-mmm
Oct 05 2017 16:42
for citat in choice:
            if "citat" in choice or "CITAT" in choice or "CiTaT" in choice or "Citat" in choice:
                return random.choice(list(xyz))
@qara17 Denna delen är lite konstig, för varje bokstav i det användaren skriver in kollar du om citat finns i strängen användaren skrev in
Edward Nilsson
@Enilsson9
Oct 05 2017 18:11
När jag skriver "python3 main.py title http://dbwebb.se" i terminalen får jag: <title>Webbprogrammering och Databaser | dbwebb</title>
Är det ok att visa html-taggar?
Daniel Mattsson
@daniel-mmm
Oct 05 2017 18:14
@Enilsson9 Titeln är det innehåll som ligger i elementet <title></<title>, bara innehållet enligt uppgiften. Du kan få ut det med tag.text
Edward Nilsson
@Enilsson9
Oct 05 2017 18:28
@daniel-mmm Ok tack
Andreas
@freddyph
Oct 05 2017 18:59

god kväll!

Sitter med kmom05. Har lyckats få till alla Command och vet att de fungerar. I allt trixande att få det att bli bättre, slutade med följande felmeddelande:

Andreass-MacBook-Pro:analyzer andreaswahlstedt$ python3 main.py -h
Traceback (most recent call last):
  File "main.py", line 56, in <module>
    main()
  File "main.py", line 28, in main
    options = cli_parser.parse_options()
  File "/Users/andreaswahlstedt/dbwebb-kurser/python/me/kmom05/analyzer/cli_parser.py", line 51, in parse_options
    args, unknownargs = parser.parse_known_args()
har kört validate och finns inga fel
Daniel Mattsson
@daniel-mmm
Oct 05 2017 19:04
@freddyph Är det där hela felmeddelandet, länns som att det fattas en rad eller så längst ner? Hursomhelst, hur ser rad 51 i cli_parser.py ut?
Andreas
@freddyph
Oct 05 2017 19:06
@daniel-mmm den ser ut som sista raden ovan
ah, har kortat ned felmeddelande, lägger det i en codeshare :)
Daniel Mattsson
@daniel-mmm
Oct 05 2017 19:09
@freddyph Något går snett i argparse, så felet ligger troligtvis någonstans i cli_parser.py
Andreas
@freddyph
Oct 05 2017 19:11
la cli_parser.py under felmeddelandet
Daniel Mattsson
@daniel-mmm
Oct 05 2017 19:13
@freddyph Min första gissning skulle vara att %-tecknen i word_frequency och letter_frequency help ger felet. Testa att ta bort dem och köra.
Andreas
@freddyph
Oct 05 2017 19:15
@daniel-mmm haha, tack så mycket! det var där skon klämde :)
Daniel Mattsson
@daniel-mmm
Oct 05 2017 19:17
@freddyph Toppen! Man kan använda % för att binda in värden i strängar, liknande "{}".format("något_värde"), och argparse verkar använda det. Så då krockade det med dina %-tecken :P
@freddyph Du borde kunna använda %% om du fortfarande vill ha %-tecken
Andreas
@freddyph
Oct 05 2017 19:20
@daniel-mmm formulerade om meningen istället :P
fblanke
@fblanke
Oct 05 2017 20:33
Sitter med kmom05 och word frequency delen. Jag använder read() för att få hela filen och sedan slice( ) för att få det till en lista. Problemet är att jag får med \n chars och det vill jag inte. Har testat att använda strip() men funkar inte pga att det är en lång sträng och den fattar inte att den måste ta bort per rad. Någon som har en hint om hur jag kan komma vidare?
def word_frequency(analyze_file):
    with open(analyze_file, "r") as filehandler:
        words = filehandler.read().strip().split(" ")

    temp_words = {}

    for word in words:
        if word in temp_words:
            temp_words[word] += 1
        else:
            temp_words[word] = 1

    print(temp_words)