lista gości usuwanie

lista gości usuwanie
I1
  • Rejestracja:4 miesiące
  • Ostatnio:około 2 miesiące
  • Postów:15
0

Cześć mam problem z ostatnim podpunktem zadania

 Za pomocą metody pop() usuwaj po jednym gościu z listy, aż zostaną
na niej tylko dwie osoby. Po usunięciu każdej osoby wyświetlaj
przeznaczony dla niej komunikat z przeprosinami za brak możliwości
zaproszenia jej na obiad.
 Obu osobom pozostałym na liście wyświetl spersonalizowany komunikat
z zaproszeniem na obiad.
 Użyj polecenia del do usunięcia dwóch ostatnich osób z listy, która w ten
sposób powinna stać się pusta. Na koniec wyświetl listę, aby upewnić się,
że faktycznie jest pusta.
ma wyświetlać:
przepraszam nie mogę zaprosić gościa kolejno Dali, Buzan, Kopernik, Newton

Kopiuj
goscie=['Eistein','Buzan','Kopernik', 'Newton']
print(f"Witaj fizyku {goscie[0]}!")
print(f"Witaj prekursorze {goscie[1]}!")
print(f"Witaj naukowcze {goscie[2]}!")
print(f"Witaj drugi fizyku {goscie[3]}!")
print(f"Gość {goscie[0]} nie przyjdzie")
goscie[0]="Dali"
print(f"Witaj malarzu {goscie[0]}!")
print("Znaleziono większy stół")
goscie.insert(4,'Beksiński')
goscie.insert(5,'Szymborska')
goscie.insert(6, 'Kochanowski')
print(goscie)
print(f"Witaj malarzu {goscie[0]}!")
print(f"Witaj prekursorze {goscie[1]}!")
print(f"Witaj naukowcze {goscie[2]}!")
print(f"Witaj drugi fizyku {goscie[3]}!")
print(f"Witaj drugi malarzu {goscie[4]}!")
print(f"Witaj pisarko {goscie[5]}!")
print(f"Witaj pisarzu {goscie[6]}!")
print("na obiad mogę zaprosić tylko dwie osoby")
dali=goscie.pop(0)
print(f"przepraszam nie mogę zaprosić gościa {dali}")
buzan=goscie.pop(1)
print(f"przepraszam nie mogę zaprosić gościa {buzan}")
kopernik=goscie.pop(2)
print(f"przepraszam nie mogę zaprosić gościa {kopernik}")
newton=goscie.pop(3)
print(f"przepraszam nie mogę zaprosić gościa {newton}")

print(goscie)
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6695
1
  1. Używaj pętli. Do usuwania gości nada się pętlawhile.
  2. Ilość gości na liście sprawdzaj funkcją len(lista) w połączeniu z instrukcją warunkową if.
  3. Dodawaj gości do listy używając metody append().

Gdzieś tak... Skoro to ostatni punkt, to nie znam dokładnej treści reszty zadania.

Kopiuj
kim_sa_goscie = {
	'Eistein': 'fizyku',
	'Buzan': 'prekursorze',
	'Kopernik': 'naukowcze',
	'Newton': 'drugi fizyku',
	'Beksiński': 'drugi malarzu',
	'Szymborska': 'pisarko',
	'Kochanowski': 'pisarzu',
}

goscie=['Eistein','Buzan','Kopernik', 'Newton', 'Szymborska', 'Kochanowski']

goscie.append('Beksiński')
goscie.append('Szymborska')
goscie.append('Kochanowski')

for gosc in goscie:
	print(f"Witaj {kim_sa_goscie[gosc]} {gosc}!")

print() # pusta linia

while len(goscie) > 2:
	print(f"Brak możliwości zaproszenia na obiad, przepraszamy {goscie.pop()}...")

print() # pusta linia

print(f"Zapraszamy Cię gorąco na obiad {goscie[0]}!")
print(f"Zapraszamy Cię serdecznie na obiad {goscie[1]}!")

print() # pusta linia

# usuwamy pierwszy element listy
del goscie[0]

# znowu usuwamy pierwszy element listy, bo po usunięciu
# pierwszego, drugi element teraz jest pierwszy
del goscie[0]

print("Pusta lista?: " + str(goscie))

Jeśli koniecznie mają być


🕹️⌨️🖥️🖱️🎮
edytowany 8x, ostatnio: Spine
I1
  • Rejestracja:4 miesiące
  • Ostatnio:około 2 miesiące
  • Postów:15
0

3.4. Lista gości. Jeżeli mógłbyś zaprosić kogokolwiek na obiad, żyjącego lub
nieżyjącego, to kogo byś zaprosił? Utwórz listę zawierającą przynajmniej trzy
osoby, które chciałbyś zaprosić na obiad. Następnie wykorzystaj tę listę do wyświetlenia dla każdej z tych osób komunikatu zapraszającego ją na obiad.
3.5. Zmiana listy gości. Dowiedziałeś się, że jedna z zaproszonych osób nie
może przyjść na obiad. Konieczne jest więc wysłanie następnych zaproszeń.
Zastanów się, kogo w takim razie jeszcze zaprosisz.
 Pracę rozpocznij od programu utworzonego w ćwiczeniu 3.4. Na jego
końcu umieść polecenie print() wyświetlające komunikat z informacją,
który z zaproszonych gości nie może przyjść.
 Zmodyfikuj listę i dane gościa, który nie będzie mógł przybyć na obiad,
zastąp danymi nowej zaproszonej osoby.
 Wyświetl drugi zestaw komunikatów z zaproszeniem, po jednym
komunikacie dla każdej osoby znajdującej się na liście.
3.6. Więcej gości. Znalazłeś większy stół, co oznacza więcej miejsca dla gości.
Zastanów się więc nad jeszcze trzema osobami, które mógłbyś zaprosić na obiad.
 Pracę rozpocznij od programu utworzonego w ćwiczeniach 3.4 i 3.5.
Na jego końcu umieść polecenie print() wyświetlające komunikat
o znalezieniu większego stołu.
 Za pomocą metody insert() dodaj nowego gościa na początku listy.
 Za pomocą metody insert() dodaj nowego gościa w środku listy.
 Za pomocą metody append() dodaj nowego gościa na końcu listy.
 Wyświetl nowy zestaw komunikatów z zaproszeniem, po jednym
komunikacie dla każdej osoby znajdującej się na liście.
3.7. Kurcząca się lista gości. Okazało się, że większy stół nie zostanie dostarczony na czas i dlatego masz miejsce dla jedynie dwóch gości.
 Pracę rozpocznij od programu utworzonego w ćwiczeniu 3.6. Dodaj nowy
wiersz wyświetlający komunikat, że na obiad możesz zaprosić tylko dwie
osoby.
 Za pomocą metody pop() usuwaj po jednym gościu z listy, aż zostaną
na niej tylko dwie osoby. Po usunięciu każdej osoby wyświetlaj
przeznaczony dla niej komunikat z przeprosinami za brak możliwości
zaproszenia jej na obiad.

nie wiem dlaczego u mnie nie działa nie użyłam append() ale jaka to różnica?

edytowany 1x, ostatnio: Ktos
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6695
2
Izaa1 napisał(a):

nie wiem dlaczego u mnie nie działa nie użyłam append() ale jaka to różnica?

Nadużywasz w swoim kodzie na sztywno wpisanych indeksów w wywołaniach metody pop() oraz insert().
Twój kod jest niezgodny z poleceniem. Powinnaś użyć dwa razy insert() (tak jak napisałem poniżej) oraz jednego append().

Izaa1 napisał(a):

Za pomocą metody insert() dodaj nowego gościa na początku listy.

Żeby dodać na początek listy, musisz się odwołać tylko do indeksu 0.
Np.

Kopiuj
goscie.insert(0,'Beksiński')
Izaa1 napisał(a):

Za pomocą metody insert() dodaj nowego gościa w środku listy.

Żeby dodać na środek listy, powinnaś sobie policzyć gdzie jest środek listy.
Powiedzmy, że indeks środka listy to ilość jej elementów podzielona przez 2.
Żeby zapewnić, że nie wyszła nam liczba zmiennoprzecinkowa, trzeba użyć operator dzielenia całkowitego //.
Np.

Kopiuj
goscie.insert(len(goscie)//2,'Szymborska')
Izaa1 napisał(a):

Za pomocą metody append() dodaj nowego gościa na końcu listy.

append() nie potrzebuje indeksu. Dodaje na koniec listy.

Kopiuj
goscie.append('Beksiński')
Izaa1 napisał(a):

Za pomocą metody pop() usuwaj po jednym gościu z listy, aż zostaną
na niej tylko dwie osoby.

pop() zwraca element z końca listy i go z niej usuwa.
Więc na pewno metody pop() nie powinnaś używać z parametrem.

W poleceniu nie jest napisane, czy goście mają być usuwani z końca, czy z początku.
Znacznie lepiej jest usuwać ich w pętli dopóki pętla ma więcej niż dwóch gości - tak jak kod, który dopisałem do swojej pierwszej odpowiedzi:

Kopiuj
while len(goscie) > 2:
	print(f"Brak możliwości zaproszenia na obiad, przepraszamy {goscie.pop()}...")

🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
I1
  • Rejestracja:4 miesiące
  • Ostatnio:około 2 miesiące
  • Postów:15
0
Spine napisał(a):
Izaa1 napisał(a):

nie wiem dlaczego u mnie nie działa nie użyłam append() ale jaka to różnica?

Nadużywasz w swoim kodzie na sztywno wpisanych indeksów w wywołaniach metody pop() oraz insert().
Twój kod jest niezgodny z poleceniem. Powinnaś użyć dwa razy insert() (tak jak napisałem poniżej) oraz jednego append().

Izaa1 napisał(a):

Za pomocą metody insert() dodaj nowego gościa na początku listy.

Żeby dodać na początek listy, musisz się odwołać tylko do indeksu 0.
Np.

Kopiuj
goscie.insert(0,'Beksiński')
Izaa1 napisał(a):

Za pomocą metody insert() dodaj nowego gościa w środku listy.

Żeby dodać na środek listy, powinnaś sobie policzyć gdzie jest środek listy.
Powiedzmy, że indeks środka listy to ilość jej elementów podzielona przez 2.
Żeby zapewnić, że nie wyszła nam liczba zmiennoprzecinkowa, trzeba użyć operator dzielenia całkowitego //.
Np.

Kopiuj
goscie.insert(len(goscie)//2,'Beksiński')
Izaa1 napisał(a):

Za pomocą metody append() dodaj nowego gościa na końcu listy.

append() nie potrzebuje indeksu

Izaa1 napisał(a):

Za pomocą metody pop() usuwaj po jednym gościu z listy, aż zostaną
na niej tylko dwie osoby.

pop() zwraca element z końca listy i go z niej usuwa.
Więc na pewno metody pop() nie powinnaś używać z parametrem.

W poleceniu nie jest napisane, czy goście mają być usuwani z końca, czy z początku.
Znacznie lepiej jest usuwać ich w pętli dopóki pętla ma więcej niż dwóch gości - tak jak kod, który dopisałem do swojej pierwszej odpowiedzi:

Kopiuj
while len(goscie) > 2:
	print(f"Brak możliwości zaproszenia na obiad, przepraszamy {goscie.pop()}...")

co to zanaczy Nadużywasz w swoim kodzie na sztywno wpisanych indeksów w wywołaniach metody pop() oraz insert().

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6695
1

@Izaa1: Dokładnie to co napisałem. Twój kod jest niezgodny z poleceniem.
Masz w poleceniu opisane 2 różne wywołania metody insert() oraz jedno append() .

Nie powinnaś traktować listy gości tak jakbyś znała jej zwartość, a Ty z palca wpisujesz indeksy 4, 5, 6:

Kopiuj
goscie.insert(4,'Beksiński')
goscie.insert(5,'Szymborska')
goscie.insert(6, 'Kochanowski')

A pop() powinnaś używać w ogóle bez argumentów.


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine
I1
  • Rejestracja:4 miesiące
  • Ostatnio:około 2 miesiące
  • Postów:15
0
Spine napisał(a):

@Izaa1: Dokładnie to co napisałem. Twój kod jest niezgodny z poleceniem.
Masz w poleceniu opisane 2 różne wywołania metody insert() oraz jedno append() .

Nie powinnaś traktować listy gości tak jakbyś znała jej zwartość, a Ty z palca wpisujesz indeksy 4, 5, 6:

Kopiuj
goscie.insert(4,'Beksiński')
goscie.insert(5,'Szymborska')
goscie.insert(6, 'Kochanowski')

A pop() powinnaś używać w ogóle bez argumentów.

A można jakoś inaczej bo tego polecenia len jeszcze nie było w książce
Żeby dodać na środek listy, powinnaś sobie policzyć gdzie jest środek listy.
Powiedzmy, że indeks środka listy to ilość jej elementów podzielona przez 2.
Żeby zapewnić, że nie wyszła nam liczba zmiennoprzecinkowa, trzeba użyć operator dzielenia całkowitego //.
Np.

edytowany 1x, ostatnio: Izaa1
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6695
1

Nie możecie używać google? ("python list middle index")
No w takim wypadku nie widzę za bardzo innego rozwiązania niż samodzielnie napisana funkcja len()...

Kopiuj
dlugosc_listy = 0

for gosc in goscie:
	dlugosc_listy = dlugosc_listy + 1

goscie.insert(dlugosc_listy // 2, 'Szymborska')

Chyba, że polecenie zakłada, że wiesz dokładnie co znajduje się w liście.
Więc wyjątkowo możesz wpisać na sztywno indeks środkowego elementu listy.


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
I1
  • Rejestracja:4 miesiące
  • Ostatnio:około 2 miesiące
  • Postów:15
0

Co jescze mam źle? Dlaczego przepraszam nie mogę zaprosić gościa Dali nie wyskakuje jako drugie?

Kopiuj
goscie=['Eistein','Buzan','Kopernik', 'Newton']
print(f"Witaj fizyku {goscie[0]}!")
print(f"Witaj prekursorze {goscie[1]}!")
print(f"Witaj naukowcze {goscie[2]}!")
print(f"Witaj drugi fizyku {goscie[3]}!")
print(f"Gość {goscie[0]} nie przyjdzie")
goscie[0]="Dali"
print(f"Witaj malarzu {goscie[0]}!")
print("Znaleziono większy stół")
goscie.insert(0,'Beksiński')
goscie.insert(3,'Szymborska')
goscie.append('Kochanowski')
print(goscie)
print(f"Witaj malarzu {goscie[0]}!")
print(f"Witaj surrealisto {goscie[1]}!")
print(f"Witaj prekursorze {goscie[2]}!")
print(f"Witaj pisarko {goscie[3]}!")
print(f"Witaj astronomie {goscie[4]}!")
print(f"Witaj fizyku {goscie[5]}!")
print(f"Witaj pisarzu {goscie[6]}!")
print("na obiad mogę zaprosić tylko dwie osoby")
beksinski=goscie.pop(0)
print(f"przepraszam nie mogę zaprosić gościa {beksinski}")
Dali=goscie.pop(1)
print(f"przepraszam nie mogę zaprosić gościa {Dali}")
buzan=goscie.pop(2)
print(f"przepraszam nie mogę zaprosić gościa {buzan}")
szymborska=goscie.pop(3)
print(f"przepraszam nie mogę zaprosić gościa {szymborska}")

print(goscie)

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6695
0
Izaa1 napisał(a):

Dlaczego przepraszam nie mogę zaprosić gościa Dali nie wyskakuje jako drugie?

Najlepiej dla każdej operacji na liście, którą chcesz wykonać napisz sobie print("Debug: " + str(goscie)) przed i po operacji.

Zobacz co się dzieje po usunięciu pierwszej pozycji listy (Beksińskiego):

Kopiuj
print("Debug PRZED: " + str(goscie))
beksinski=goscie.pop(0)
print(f"przepraszam nie mogę zaprosić gościa {beksinski}")
print("Debug PO: " + str(goscie))

Wynik:

Kopiuj
Debug PRZED: ['Beksiński', 'Dali', 'Buzan', 'Szymborska', 'Kopernik', 'Newton', 'Kochanowski']
przepraszam nie mogę zaprosić gościa Beksiński
Debug PO: ['Dali', 'Buzan', 'Szymborska', 'Kopernik', 'Newton', 'Kochanowski']

Widzisz, że teraz Dali jest pierwszy, czyli ma indeks 0?

A Ty dla Dali wyciągasz element o indeksie 1.

Kopiuj
Dali=goscie.pop(1)
print(f"przepraszam nie mogę zaprosić gościa {Dali}")

Izaa1 napisał(a):

Co jescze mam źle?

W pierwszej odpowiedzi napisałem Ci, żebyś użyła pętli.

Nigdzie w poleceniu nie widzę nigdzie wymogu, żeby tytułować gości.
Za każdym razem kiedy chcesz wypisać gości, to zapomnij o ręcznym podawaniu indeksu gościa w liście...
Taka pętla wystarczy, żeby wypisać wszystkich gości w liście:

Kopiuj
for gosc in goscie:
	print(f"Witaj {gosc}!")

Zamiast:

Kopiuj
print(f"Witaj malarzu {goscie[0]}!")
print(f"Witaj surrealisto {goscie[1]}!")
print(f"Witaj prekursorze {goscie[2]}!")
print(f"Witaj pisarko {goscie[3]}!")
print(f"Witaj astronomie {goscie[4]}!")
print(f"Witaj fizyku {goscie[5]}!")
print(f"Witaj pisarzu {goscie[6]}!")

To musi być zadanie na pętlę...

Czytaj dokładnie to co do Ciebie piszę, bo nie zachęcasz do odpowiadania Tobie, kiedy nie stosujesz się do zaleceń...
Zwłaszcza, że dostałaś już nawet gotowy kod dla tego zadania, który mogłaś sobie przeanalizować i zastosować jego fragmenty w swoim projekcie.


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.