10 svar
106 visningar
Qetsiyah är nöjd med hjälpen!
Qetsiyah 4555
Postad: 5 okt 2020 Redigerad: 5 okt 2020

Python bygga ihop ett bashprogram

Hej, se: 

Jag fattar ingenting. Jag har gjort ett litet framsteg och det är att jag hittat main.py med bash (med cd och dir). Just nu ser min main.py ut såhär:

Det var en annan uppgift att man skulle kunna interagera med den med sifferval.

Kommandoradsparametrar (-r i uppgiften) kallas command line arguments och läses/tolkas förslagsvis med argparse.

Valet av språk ska göras med hjälp av en kommandoradsparameter istället för att fråga användaren med en input(). Så, rad 15 ska ersättas med anrop till en ny funktion som du skriver och som avgör språkvalet genom att tolka kommandoradsparametern.

Fråga inte användaren med input() och skapa inte någon programslinga som frågar användaren med input(). Ditt nya program ska inte vara interaktivt utan köra i en sekvens i s k batch mode.

Om användaren exempelvis använder kommandot echo för att skicka en textrad eller kommandot cat för att skicka texten från en hel fil så kommer den in i ditt program via stdin. Ditt program ska läsa in texten från stdin in vilket du kan göra med exempelvis sys.stdin.readline() eller input(). Vissa skillnader finns mellan dem.

Qetsiyah 4555
Postad: 5 okt 2020 Redigerad: 5 okt 2020

Jag förstår inte varför vi ska göra det här, det är en pythonkurs och han har inte gått igenom detta. Här är i alla fall min skiss: Om det inte ska vara interaktivt så blir det avsevärt kortare.

Listan med funktioner finns fortfarande kvar och heter "func". 

Kan bara spekulera i vad din lärare tänkt med denna uppgift. Kan tänka mig att det handlar om att återanvända funktioner i nya applikationer utan att ändra i funktionerna (som jag tidigare skrivit om här). På så vis är det en del av en Python-kurs.

Din kod behöver utökas så att den hanterar situationer som att användaren inte angett något språk på kommandoraden till exempel. Då finns inte sys.argv[1].

Om sys.argv[1] däremot finns så bör den se ut ungefär som '-r'. Då behöver listan med språk använda likadana index för att kunna hittas och motsvarande funktioner anropas. Ungefär så här:

[('-a', <function allspråk at 0x03CFF148>), ('-r', <function rövarspråk at 0x03F641D8>)]

Felaktigt angivna språk behöver också hanteras i koden. Vad händer om användaren råkar ange språket '-asd' t ex?

Dessutom läses endast en textrad på rad 15. Det funkar om endast en textrad anges men inte för flera. Du behöver en slinga som itererar alla rader i sys.stdin.

Aerius 444
Postad: 6 okt 2020

En till spekulation om uppgiftens utformning.

Det är otroligt värdefullt kunna skriva kod som återanvänds senare i andra program. Eller bara kunna ändra input till ett skrivet python script direkt från kommandoraden. Till exempel om du har ett script som beräknar integralen till en graf kan du ge ändpunkterna direkt på kommandoraden och direkt få integralvärdet, bara köra scriptet med nya ändpunkter om du vill beräkna integralen på ett annat intervall.

Qetsiyah 4555
Postad: 6 okt 2020 Redigerad: 6 okt 2020

Såhär ser det ut nu.

Jag får errormeddelanden när jag klistrar in det som står i instruktionerna:

./bash.py: line 1: $'\r': command not found
./bash.py: line 2: $'\r': command not found
./bash.py: line 3: $'\r': command not found
./bash.py: line 5: $'\r': command not found
./bash.py: line 6: import: command not found
./bash.py: line 7: import: command not found
./bash.py: line 8: import: command not found
./bash.py: line 9: $'\r': command not found
./bash.py: line 12: $'\r': command not found
./bash.py: line 13: syntax error near unexpected token `('
'/bash.py: line 13: `def main():

Visa spoiler

Det här är extremt frustrerande, det är inte ens 'svårt' eller utmanande av rätt anledning, det är svårt för att vi överhuvudtaget inte gått igenom det här innan och allt är bara ett stort kaos, jag fattar ingenting. Om den här kursen hade innehållit färre sånna här rena förvirringschockar skulle jag kanske börjat gilla programmering. De sa att kursen hade justerats från förra året då den upplevdes för svår och antog för mycket förkunskaper, tack för det men fortfarande för svårt

Laguna Online 10973
Postad: 6 okt 2020

Vad skriver du för kommando för att få de där felmeddelandena?

Qetsiyah 4555
Postad: 6 okt 2020

$ echo "Landkrabborna försöker sänka oss med kanoner." |./oversattning.py -r

Som det stod i exempelkörningen.

Aerius 444
Postad: 6 okt 2020

Shebangen (#!/usr/..) måste stå på första raden (rad 1).

Jag skulle kunna tro att modulen som heter språk också ställer till det eftersom det är ett 'å' i namnet. Man vet aldrig vad bokstäver som inte ingår i a-z, A-Z kan ställa till med.

Qetsiyah 4555
Postad: 6 okt 2020

Åh wow allt fungerade plötsligt! Jag brukar alltid göra några enter längst upp för att kunna se bekvämt.

Tack så hjärtligt.

Din kod behöver utökas så att den hanterar situationer som att användaren inte angett något språk på kommandoraden till exempel. Då finns inte sys.argv[1].

if len(sys.argv) == 2:
    val = sys.argv[1]
else:
    val = ""

Felaktigt angivna språk behöver också hanteras i koden. Vad händer om användaren råkar ange språket '-asd' t ex?

else:
    print("Valt språk är okänt!", file = sys.stderr)

Dessutom läses endast en textrad på rad 15. Det funkar om endast en textrad anges men inte för flera. Du behöver en slinga som itererar alla rader i sys.stdin.

for query in sys.stdin:
    print(språk.viskspråket(query))

 

Rad 29 bör tas bort eftersom den lägger till en oväntad mening till den översatta texten.

Svara Avbryt
Close