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

Odpowiedz Nowy wątek
2017-12-05 21:45
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

Pozostało 580 znaków

2017-12-05 22:19

Ł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
edytowany 1x, ostatnio: atmal, 2017-12-05 22:20

Pozostało 580 znaków

2017-12-05 22:38
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 ?

Pozostało 580 znaków

2017-12-05 22:49
sig
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ć.

edytowany 1x, ostatnio: sig, 2017-12-05 22:51

Pozostało 580 znaków

2017-12-05 22:55
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ę.

Pozostało 580 znaków

2017-12-05 23:02
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,

((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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