• 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 PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
493 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 (11,860 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 (11,860 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 (82,220 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,280 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 197 wizyt
pytanie zadane 11 listopada 2018 w Python przez adam11 Użytkownik (570 p.)
+2 głosów
0 odpowiedzi 114 wizyt
pytanie zadane 11 lutego 2022 w C i C++ przez RufinB Obywatel (1,810 p.)

91,824 zapytań

140,490 odpowiedzi

316,950 komentarzy

61,159 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...