Tworzenie i działanie funkcji "def" [początkujący]

0

Witam wszystkich,
jestem we wczesnej fazie nauki Pythona i już próbowałem samodzielnie znaleźć i wydedukować jak to powinno działać i poddałem się po 2 h.
Mianowicie mają być dwie funkcje. Pierwsza pobierająca dane i druga wyświetlająca wprowadzone dane.
Uprzedzam sugestie , że można zrobić to w dwóch linijkach tj. x = input .......i w kolejnej print(x)
Ale chodzi mi o poznanie zasady tworzenia i wywoływania funkcji.

Oto jaki napisałem w pierwszej kolejności kod:
def wprowadzanie ():
imie = str(input("podaj imie : "))
nazwisko = str(input("podaj nazwisko: "))
return imie, nazwisko

wprowadzanie()

i to działa, ale kiedy tytułem próby dałem print(imie) to:
NameError: name 'imie' is not defined
tak jakby pomimo returnu wartości funkcji imie , w ogole nie zapisano zmiennej

Jak to należy poprawnie zrobić żeby imię zapisało się jako zmienna do pamięci ??

Dziękuję z góry za pomoc
pozdrawiam

1

Ładniej to wytłumaczyć gdy masz wcięcia:

def wprowadzanie ():
	imie = str(input("podaj imie : "))
	nazwisko = str(input("podaj nazwisko: "))
	return imie, nazwisko
	# cokolwiek podlega pod funkcję wprowadzanie...
# ... nie jest osiągalne już poza nią

wprowadzanie()

Return oznacza że zwracasz wartość i musisz tą wartość do czegoś przypisać.

def wprowadzanie ():
	imie = str(input("podaj imie : "))
	nazwisko = str(input("podaj nazwisko: "))
	return imie, nazwisko

user_name, user_surname = wprowadzanie()
# Tutaj masz teraz dostęp do user_name oraz user_surname
0
import sys

def wprowadzanie ():
    imie = str(input("podaj imie : "))
    nazwisko = str(input("podaj nazwisko: "))
    return imie, nazwisko


def wyswietlanie(x,y):
    print("Imie i nazwisko to: ", x,y )


user_name, user_surname = wprowadzanie()

wyswietlanie(user_name, user_surname )

Wielkie dzięki za pomoc.
Tak wygląda mój kod ostatecznie

podaj imie : Adam
podaj nazwisko: Nowak
Imie i nazwisko to:  Adam Nowak

Process finished with exit code 0

Program działa tak jak chciałem, ale czy ja coś robię źle , tj. nieoptymalnie , bo sądziłem , że wprowadzanie funkcji ma skracać kod i działać na plus , a ja mam na tym etapie wrażenie , że bardziej przeszkadzają niż pomagają , bo zamiast wprowadzić dwie zmienne string np. X, Y, i print(X,Y) , liczba linijek i kolejnych zmiennych namnożyła mi się , chyba nie o to chodzi ?

0

Owszem funkcję skracają kod, ale zazwyczaj daje się do nich te jego fragmenty które występują wielokrotnie. Albo też nad programem pracuje więcej osób, i żeby nie było błędów typu te same nazwy zmiennych, został on podzielony na funkcje. Każdy robi przydzielone mu, a potem łączy się to w całość i ma nadzieję że będzie działać.

0

Nie powiedziałbym że wprowadzanie funkcji zawsze skraca kod, ale poprawia jego czytelność.
Dzięki temu że napiszesz funkcję i ją przetestujesz to wiesz że gdziekolwiek jej użyjesz będzie ona działać jak należy.

Dla przykładu, załóżmy że chcesz stworzyć funkcję która zwraca większą z dwóch liczb:

def max(a, b):
	if a > b:
		return a
	else:
		return b

Dzięki takiej funkcji możesz w jednej linijce zrobić przypisanie większej liczby do jakiejś zmiennej. Nie widać różnicy kiedy użyjesz tej funkcji raz, bo wtedy równie dobrze mógłbyś wstawić te if'y w miejsce funkcji ale kiedy następuje potrzeba użycia takiej funkcji 2, 3 albo 4 razy - wtedy od razu czuć różnicę.

0

swoją drogą zmienili tę funkcję w Python 3: https://stackoverflow.com/a/21122817

input function in Python 2.7, evaluates whatever your enter, as a Python expression. If you simply want to read strings, then use raw_input function in Python 2.7, which will not evaluate the read strings.

If you are using Python 3.x, raw_input has been renamed to input. Quoting the Python 3.0 release notes,

1 użytkowników online, w tym zalogowanych: 0, gości: 1