• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Sortowanie losowo wprowadzonych liczb - Python

Object Storage Arubacloud
0 głosów
7,331 wizyt
pytanie zadane 27 maja 2019 w Python przez Ventre90 Obywatel (1,170 p.)
zamknięte 4 czerwca 2019 przez Ventre90

Cześć drodzy pasjonaci. Jeśli ktoś znajdzie chwile to bardzo proszę o pomoc. Poniższy program ma za zadanie sortować losowo wprowadzone liczby od największej do najmniejszej oraz wskazać najwyższą wartość. Kod działa dobrze, jednak ja nie rozumiem dlaczego i co tak naprawdę dzieje się w 2 części kodu - tam gdzie są if-y określające sortowanie i gdzie wprowadzana jest zmienna"temp". Jak wytłumaczyć tą logikę? Dlaczego przykładowy warunek 'x< y' - ma potem zapisane w instrukcji x=y itd... Jak to wpływa na to sortowanie ?

x = int (input("x= "))
y = int (input("y= "))
z = int (input("z= "))

if (x > y) and (x > z):
 maximum = x
elif (y > x) and (y > z):
 maximum = y
else:
 maximum = z

print(maximum)


if x < y:
    temp = x
    x = y
    y = temp
if x < z:
    temp = x
    x = z
    z = temp
if y < z:
    temp = y
    y = z
    z =temp
print (x , y, z)

 

komentarz zamknięcia: Temat rozwiązany

2 odpowiedzi

+2 głosów
odpowiedź 27 maja 2019 przez k222 Nałogowiec (30,150 p.)
wybrane 5 czerwca 2019 przez Ventre90
 
Najlepsza

wprowadziłeś trzy liczby, powiedzmy: 5, 3, 6

możesz je wyświetlić przy pomocy:

print (x , y, z) 

# 5, 3, 6

teraz chcesz żeby ten sam print dał wynik 6, 5, 3 więc po prostu zamieniasz te liczby miejscami z użyciem zmiennej pomocniczej temp

print (x , y, z)                   # x = 5  y = 3 z = 6
# wypisane: 5 3 6

if x < y:                           # 5 < 3   false
    temp = x
    x = y
    y = temp 
if x < z:                           # 5 < 6    true
    temp = x                     # temp = 5
    x = z                           # x = 6
    z = temp                     # z = 5
if y < z:                            # 3 < 5    true
    temp = y                     # temp = 3
    y = z                            # y = 5
    z =temp                      # z = 3

print (x , y, z)                   # teraz x = 6  y = 5 z = 3
# wypisane: 6 5 3
 

 

* btw: w pythonie nie potrzeba dodatkowej zmiennej do zamieniania zmiennych wartościami, więc te kody są równoważne:

if x < y: 
    temp = x
    x = y
    y = temp 
if x < y:     
    x, y = y, x
komentarz 29 maja 2019 przez Ventre90 Obywatel (1,170 p.)
Serdeczne dzięki za wyjaśnienie. Musze przyznać, że ten 2-gi sposób jest dużo przystępniejszy i od razu widać o co chodzi.
komentarz 5 czerwca 2019 przez manjaro Nałogowiec (37,390 p.)
Przecież ten drugi sposób nie nie tłumaczy. Uczysz się tego na pamięć ale nie wiesz o co chodzi, w innych językach to nie zadziała
komentarz 5 czerwca 2019 przez Ventre90 Obywatel (1,170 p.)
@manjaro  - Dziękuję za zainteresowanie wątkiem. W mojej ocenie tej sytuacji wszystko jest wytłumaczone dobrze. Chodzi o podmianę wartości dla zmiennych. Napisałem dla ćwiczeń inny program na sortowanie 5 liczb tą metoda i to działa. Jak bym się uczył na pamięć to istnieje prawdopodobieństwo że by nie zadziałało ;) Oba sposoby są dobre ale dla mnie po prostu 2gi jest bardziej klarowny. Jeżeli Ty wolisz to robić ze zmienną, czy w innych językach się tak robi - okej rozumiem i wcale nie zaprzeczam. Natomiast logika zawarta w tych sposobach jest taka sama.
komentarz 5 czerwca 2019 przez manjaro Nałogowiec (37,390 p.)
Ale tu nie ma żadnej logiki jak się to fizycznie dzieje w tym drugim sposobie. To tylko składnia Pythona powoduje że jednym poleceniem zamieniasz x oraz y.

Ten pierwszy sposób jest logiczny i działa zawsze i wszędzie. Zamiast x wstawiasz y, a zamiast y wstawiasz x. Tylko że dawny x już nie jest dawnym x bo zostal przed chwilą zmieniony, dlatego dawny x trzeba sobie jakoś zapamiętać w postaci dodatkowej zmiennej w tym przypadku temp. Ot i cała filozofia.

Oczywiście nie ma sensu tego używać w Pythonie skoro nie trzeba. W innych językach też są podobne skróty.
0 głosów
odpowiedź 29 maja 2019 przez Ventre90 Obywatel (1,170 p.)
k222 nasunęło mi się pytanie przy okazji. Może wiesz czy istnieją jakieś bardziej zautomatyzowane sposoby sortowania danych wprowadzanych np. do konsoli. Chodzi mi o dane tego samego typu np int lub float. Ciężko sobie wyobrazić pisanie takich kodów wzajemnych zależności dla 10 zmiennych nie mówiąc już np: o 100 lub więcej.
komentarz 29 maja 2019 przez reaktywny Nałogowiec (40,990 p.)

sort() i sorted() - działaja podobnie, jedna zmienia listę, druga zwraca posortowaną kopię.


 

numbers = [1, 3, 5, 7, 4, 2, 9]

numbers.sort()

print(numbers)

 

Podobne pytania

0 głosów
1 odpowiedź 299 wizyt
0 głosów
1 odpowiedź 950 wizyt
pytanie zadane 19 listopada 2016 w C i C++ przez kacper1445 Gaduła (4,880 p.)
+1 głos
1 odpowiedź 1,843 wizyt
pytanie zadane 25 listopada 2019 w Python przez kingkushlee Gaduła (3,960 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...