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

Python każdy z każdym

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
880 wizyt
pytanie zadane 2 czerwca 2022 w Python przez Sebastian Szyja Bywalec (2,810 p.)
edycja 2 czerwca 2022 przez Sebastian Szyja

Siemanko ;))

Nie mam pojęcia jak zrobić aby program wykonał się „każdy z każdym” dla przykładu mecze w grupie. Potrzebuje aby w każdej grupie każdy zagrał z każdym bez powtórek tylko jeden mecz. Dla zobrazowania screen:

Problem pojawia się tez w tym, jak np. grupa się zmniejszy do 5/4 państw. Macie jakies pomysły?

3 odpowiedzi

+1 głos
odpowiedź 2 czerwca 2022 przez Great Stary wyjadacz (12,660 p.)
komentarz 2 czerwca 2022 przez Sebastian Szyja Bywalec (2,810 p.)
Ooooo spróbuje to ogarnąć - może podołam  jak nie dam rady wspomożesz mnie podczas pisania kodu?  robie projekt zaliczeniowy na studia…
komentarz 2 czerwca 2022 przez Great Stary wyjadacz (12,660 p.)
Algorytm jest bardzo prosty. Jeśli jednak napotkasz jakiś problem to zadaj nowe pytanie i wstaw swój kod.
0 głosów
odpowiedź 2 czerwca 2022 przez SzkolnyAdmin Szeryf (89,030 p.)
Poczytaj o losowaniu bez powtórzeń.
komentarz 2 czerwca 2022 przez Sebastian Szyja Bywalec (2,810 p.)
Hmmm może miałoby to sens gdybym losował pojedyncze państwo a nie parę ;(
0 głosów
odpowiedź 2 czerwca 2022 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Najprostsze, co przychodzi mi do głowy:

countries = ['Polska', 'Francja', 'Niemcy', 'Belgia', 'Austria', 'Ukraina']

for index, country in enumerate(countries):
	for opponent in countries[index + 1:]:
		print(f'{country} - {opponent}')

Zewnętrzna pętla iteruje się po kolei po wszystkich krajach, wewnętrzna tylko po tych, które mają wyższy indeks w tablicy. Dzięki temu zapewniamy unikalność :)

Możesz też skorzystać z biblioteki itertools. Rozwiązanie będzie jeszcze krótsze:

import itertools

countries = ['Polska', 'Francja', 'Niemcy', 'Belgia', 'Austria', 'Ukraina']

for country, opponent in itertools.combinations(countries, 2):
	print(f'{country} - {opponent}')

Funkcja itertools.combinations generuje wszystkie kombinacje bez powtórzeń (https://pl.wikipedia.org/wiki/Kombinacja_bez_powt%C3%B3rze%C5%84) o zadanym rozmiarze, czyli dobiera w pary (trójki, czwórki itp. - zależnie od potrzeb) elementy czegoś iterowalnego (w tym przypadku listy).

Mam nadzieję, że o to Ci chodziło. Jeśli nie, to śmiało mów, a pomyślimy co z tym dalej zrobić. wink

komentarz 2 czerwca 2022 przez Sebastian Szyja Bywalec (2,810 p.)
Hejka, powiem Ci tak jesteśmy na dobrej dobrze!

Na studniach dostaliśmy projekt do zrobienia na temat wieloprocesowości - temat dowolny. Więc wybrałem temat symulacji rozgrywek w piłkę nożną. :)

I teraz próbuje wykminić symulację meczów a mianowicie:

 

1 proces = jedna grupa zespołów (np. Francja, Polska, Norwegia, Niemcy, Belgia, Czechy)

w tym procesie tworzę podział na wątki: w wyżej dodanym screenie widać podział na poszczególne wątki. W pierwszym wątku grają: (Polska - Francja, Nimecy - Belgia, Austria - Ukraina), wątek drugi czeka na zakończenie pierwszego itd... nie mam na to pomysłu jak to podzielić....

Podobne pytania

0 głosów
2 odpowiedzi 496 wizyt
pytanie zadane 11 listopada 2018 w Python przez adam11 Użytkownik (570 p.)
+2 głosów
0 odpowiedzi 171 wizyt
pytanie zadane 11 lutego 2022 w C i C++ przez RufinB Obywatel (1,880 p.)

93,103 zapytań

142,077 odpowiedzi

321,571 komentarzy

62,445 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...