Python - funkcje (emulator repl.it)

0

Powitawszy wszystkich. Jestem początkującym programistą PHP i C#, otrzymałem jednak "do zrobienia" proste zadanie z Pythona. Pomyślałem, że to nie będzie nic trudnego, wystarczy poznać podstawy składni skoro znam podstawy programowania. Tak też się stało, zacząłem bez trudu robić kolejne podpunkty zadania, stanąłem jednak na funkcjach. Zadanie ma być wykonane we wspomnianym emulatorze repl.it.

Program ma przyjmować 10 liczb naturalnych, wyświetlić największą i najmniejszą, ma posortować wpisany ciąg i go wyświetlić (10 liczb). i wyświetlić średnią arytmetyczną z tych liczb. Wszystko cacy, wykonałem wpisanie liczb, max i min oraz sortowanie, jednak wszystkie "podpunkty" mają być zamknięte w osobne funkcje i mój kod działa kiedy jest tak po prostu "wylany" na ekran, jednak nie działa kiedy wrzucę poszczególne części do funkcji. Próbowałem z wieloma poradnikami, jednak domniemam, że na tym emulatorze nie wszystko działa. Elementy func i def niestety nie działają, proszę o pomoc kogoś, kto bardziej zagłębiał się w pythonie. Mój kod:

def podajLiczby():
  t = input("Wpisz tu liczby oddzielone spacjami: ").split()
  t = [int(i) for i in t]
  x = [y for y in t if y > -1]
  x.sort()
  


def wyswietlenieLiczb(x):  
  print("Najmniejsza liczba to: ")
  print(x[0])
  print("Największa liczba to: ")
  print(x[-1])

podajLiczby()
wyswietlenieLiczb()

Link do emulatora: https://repl.it/repls/ThisInsubstantialAdministration

0

Wątpię, by to gdziekolwiek zadziałało, wręcz bym rzekł - nie ma prawa.

Program ma przyjmować 10 liczb naturalnych

Jakoś nie mogę tego tu zauważyć. Wpisałem 7 liczb i zadziałał

Małe tipy:
jeżeli w definicji funkcji jest parametr niedomyślny, to wywołanie też go musi zawierać.
Pisanie:

def wyswietlenieLiczb(x):  

a potem:

wyswietlenieLiczb()

jest błędne.


def input_numbers():
  tu pominę  sam kod, bo ten i tak swej roli nie spełnia, dodałbym na koniec jedną linijkę:
  return something 
  
 
def display_numbers(a-list):  
  print("Najmniejsza liczba to: ")
  print(a_list[0])
  print("Największa liczba to: ")
  print(a_list[-1])
 
my_numbers = input_numbers()
display_numbers(my_numbers)
0

Dzięki za odpowiedź. Co do wprowadzania liczb - nie musi być żadnych zabezpieczeń, ważne żeby przyjmował ciąg 10 liczb, przyjmuje więc jest ok. W poradnikach nie widziałem takiego wywoływania funkcji jakie przedstawiłeś, ale to które ja przedstawiłem działa w w/w emulatorze, więc jest ok. Właściwie udało mi się stworzyć "funkcje" tym właśnie sposobem i dla mnie to jest do przyjęcia skoro działa - w końcu to bardzo prosty program. Teraz mam problem z największym i najmniejszym elementem listy - mój program wyświetla pierwszy i ostatni wprowadzony. Wypadało by użyć funkcji max i min, prawda?

def podajLiczby():
  global x
  t = input("Wpisz tu liczby oddzielone spacjami: ").split()
  t = [int(i) for i in t]
  x = [y for y in t if y > -1]
  
def maxMin():
  print("Najmniejsza liczba to: ")
  print(x[0])
  print("Największa liczba to: ")
  print(x[-1])

def sredniaLiczb():
  wynik = sum(x)/len(x)
  print("Średnia z wprowadzonych liczb: ")
  print (wynik)

def sortowanieLiczb():  
  x.sort()
  print("Posortowane liczby (malejąco): ")
  print(x)



podajLiczby()
maxMin()
sredniaLiczb()
sortowanieLiczb()
1

W Pythonie są wbudowane max i min, wystarczy (w maxMin): max(x) oraz min(x).

1

Jeśli sortujesz ten ciąg liczb, wypisujesz pierwszy i ostatni jak pisał kolega @Serechiel :).
A jeśli go nie sortujesz, bądź robisz to za późno, to będzie ci wypisywał pierwszy i ostatni z nieposortowanego.
Albo zrób jak doradził @lion137 niezależnie czy dane będą posortowane czy nie, to wybierze ci element największy oraz najmniejszy :)

Zamiast global, lepiej używać return'a i zwracać do zmiennej, jak też próbował pomóc Serechiel. Tutaj to nie ma znaczenia, ale jakbyś kiedyś przypadkiem musiał się przerzucić na pythona, to dojdzie main no i możesz sobie globalną nazwę nadpisać.

0

Wszystko cacy, wykonałem wpisanie liczb, max i min oraz sortowanie, jednak wszystkie "podpunkty" mają być zamknięte w osobne funkcje

Zupełnie niepotrzebnie. To zadanie jest dość trywialne. Wszystko ogranie z łatwością jedna funkcja, która wykona wszystkie obliczenia przy pomocy funkcji wbudowanych. Chyba, że tak właśnie brzmi treść polecenia - wtedy trzeba potworzyć osobne funkcje dla kolejnych kroków. Przykład z wersją minimum.

def calc(arg):
    chars = arg.split()
    nrs = [int(i) for i in chars]
    max_nr = max(nrs)
    min_nr = min(nrs)
    sorted_nrs = sorted(nrs, reverse=True)
    mean = sum(nrs)/len(nrs)
    print(f'min: {min_nr}, max: {max_nr}, sorted: {sorted_nrs}, mean: {mean}')
    
input_data = input("""Input ten numbers divided by space \n""")
calc(input_data)
0

Dzięki wszystkim za pomoc.

@lion137 według Twoich zaleceń, działa :)
@Guaz faktycznie, przeniosłem sortowanie dwie linijki niżej żeby umieścić sortowanie w osobnej definicji i dlatego program oddawał pierwszy i ostatni element, poprawione
@siloam tyle, że autor zadania prosi o 4 osobne funkcje.. stąd nie umieściłem całej funkcjonalności w jednej

Kod wygląda tak i działa poprawnie:


def podajLiczby():
  global x 
  t = input("Wpisz tu liczby oddzielone spacjami: ").split()
  t = [int(i) for i in t] 
  x = [y for y in t if y > -1] 
  
def maxMin():
  min_value = min(x)
  print("Najmniejsza liczba to: ")
  print(min_value)
  max_value = max(x)
  print("Największa liczba to: ")
  print(max_value)
  
def sredniaLiczb():
  wynik = sum(x)/len(x)
  print("Średnia z wprowadzonych liczb: ")
  print (wynik)

def sortowanieLiczb():  
  x.sort() 
  print("Posortowane liczby (malejąco): ")
  print(x)



podajLiczby()
maxMin()
sredniaLiczb()
sortowanieLiczb()

Muszę jeszcze tylko ubrać to w pętle i stworzyć wyjście z programu, jednak chyba błędnie implementuje for'a
Dziękuję wszystkim za pomoc
Pozdrawiam

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