Ontola > diskuze
| Nahlásit

Programování v Pythonu, úloha

Dobrý večer, dostal jsem za úkol v pythonu vytvořit program, ale vůbec nevím jak na to...
Prosím o pomoc.

Vytvořte program s funkcí, který ze zadaného jména a příjmení vypíše na první řádek jméno a na druhý příjmení. POZOR! Jméno může mít více slov. Jako příjmení berte poslední slovo.
Témata: Nezařazené

6 reakcí

| Nahlásit
Uměl bych to v Basicu.

https://www.onlinegdb.com/online_python_compiler
| Nahlásit
Takhle to je nejjdenodussi:

celeJmeno = "Josef Vaclav Sladek"
poleSlov = celeJmeno.split(" ")
print("Jmena:", ", ".join(poleSlov[0:-1]))
print("Prijmeni:", poleSlov[-1])

Vytiskne to:
Jmena: Josef, Vaclav
Prijmeni: Sladek


Funkce split(" ") vytvori z retezce pole, jehoz prvky jsou podretezce, ktere jsou v puvodnim retezci oddeleny mezerou, takze promena poleSlov obsahuje pole ['Josef', 'Vaclav', 'Sladek'].
A pak vybereme vsechny prvky toho pole, krome posledniho - poleSlov[0:-1], cili od prvku 0 (0 znaci prvni prvek pole) do prvku s indexem -1 (to znamena pred poslednim prvkem), funkci ", ".join() zase slozime prvky tohoto zmenseneho pole do retezce, oddelene jsou carkou, za kterou je mezera.
Prijmeni je posleni polozka pole, proto pouzijeme index -1.
To je cele.
(Upr. 26.01. 17:17) | Nahlásit
Přeji pěkné odpoledne, Anonyme Muvebawe,

zadání je poměrně snadné, nicméně nikde neuvádíte, z jakého datového proudu budeme vstup číst. Půjde o standardní vstup, tedy konzole bude čekat, co napíšeme na klávesnici, budeme číst data ze souboru nebo bude jméno zadané jako konstanta přímo ve zdrojovém kódu?
Budu předpokládat, že půjde o vstup zadaný z klávesnice.
Rovněž nikde neuvádíte, jakým symbolem budou jednotlivé části jména odděleny. Předpokládám, že půjde o mezeru.

UPOZORNĚNÍ: Ontola mi maže zanoření, ale určitě víte, kde ho zapsat.

Kód by vypadal následovně:


#!/usr/bin/python3

import re # pridavame knihovnu pro regularni vyrazy

def parse_name(name): # funkce pro rozklad jmena
name = re.sub('\ +$', '', name) # odstraneni pocatecnich mezer, pokud existuji
name = re.sub('^\ +', '', name) # odstraneni mezer na konci, pokud existuji
if not name : # osetreni, zda byl vubec nejaky vstup vlozen
print("Invalid input")
return
name = re.sub('\ +', ' ', name) # nahrazeni vicenasobnych mezer za jednu
name = name.split(' ') # rozlozeni vstupu na slova oddelena mezerou do seznamu
print(" ".join(name[0:-1])) # tisk jmena
print(name[-1]) # tisk posledniho slova

parse_name(input()) # volani funkce


############

Uveďte, zda je vše pochopitelné a určitě se kdykoliv ozvěte, pokud budete mít problém s programováním.
| Nahlásit
No, nevim, regularni vyrazy, to mi pripada uz dost pokrocily, obavam se, ze i to moje reseni je az moc, kdyz si s takhle jednoduchym zadanim nevi rady.

Jinak na odstraneni pocatecnich a konecnejch mezer se da pouzit funkce strip():
' nazar kamo '.strip() = 'nazar kamo'
| Nahlásit
Přeji pěkný večer, Anonyme Dyqotogu,

ano, původně jsem si nevšiml, že už je tu odpověď vložená, vaše řešení je elegantnější. Funkce strip mě úplně minula, s ní by to bylo určitě jednodušší. Děkuji moc za tento tip a přeji pěkný zbytek večera.
| Nahlásit
No, ono to moje reseni je vlastne skoro stejny, respektive to vase je lepsi, protoze odstranuje vicenasobny mezery mezi slovama, ale jak rikam, snazil jsem se to udelat co nejjednodussi, a po pravde receno, s regularnima vyrazama moc neumim, takze bych to neudelal ani kdybych chtel, takze taky dik, ze jste mi ukazal, jak je tohle zrovna jednoduchy.
Tak parada, pro tazatele budou nase reseni mozna nepouzitelny, ale my jsme se navzajem obohatili :-).
 Anonym
Odpovídat lze i bez registrace. Dodržujte pravidla Ontoly
Vložit: Obrázek