Zacząłem naukę Pythona, wcześniej trochę “programowałem” w javie, dostałem do zrobienia kilka przykładów i niestety już na nich się wykładam.
Z wykorzystaniem pe˛tli while tworzymy liste˛ zawieraja˛ca˛ 6 elementów losowanych z zakresu od 1 do 49 (elementy niemoga˛sie˛ powtarzac´).
i=0
li.clear()
tmp=0
li.append(random.randint(1,49))
while i<5:
tmp = random.randint(1,49)
while tmp in li:
tmp = random.randint(1,49)
print (“obieg petli”)
li.append(tmp)
print (li)
Wiem, że można zrobić to inną funkcją z klasy random
Utworzyć funkcję chybil_trafil, która na wejście pobiera ilośś kuponów i zwraca kupony wypełnione liczbami (6 liczb) z zakresu od 1 do 49 (co´s na wzór ”du˙zego
def chybil_trafil (n):
li=[]
i=1
for i in range(1,n):
li.append(random.sample(range(1, 50), 6))
return li
Tu zwraca mi tylko jeden zestaw liczb, mimo iż powinno działać to we właściwy sposób, nie działa.
Analogicznie do poprzedniej funkcji to też nie działa
def super_chybil_trafil (n,m):
li=[]
i=1
for i in range(1,n):
li.append(random.sample(range(1, 50), m))
return li
Witam. Masz coś nie tak z klawiaturą… W dokumentacji wszystko co mogłoby pomóc jest zawarte. Na zachętę podaje rozwiązanie zadania nr 1:
import random
rand_list = []
counter = 0
while counter < 6:
item = random.randint(1, 49)
if item not in rand_list:
rand_list.append(item)
counter += 1
# Zapisujemy kilka testów. W przypadku błędów program
# wyświetli `AssertionError`.
# Sprawdzamy czy lista zawiera 6 elementów
assert len(rand_list) == 6
# Sprawdzamy czy lista zawiera 6 różnych elementów
assert len(set(rand_list)) == 6
# Sprawdzamy czy lista zawiera liczby całkowite
assert all(isinstance(i, int) for i in rand_list) == True
# Sprawdzamy czy wszystkie liczby z listy
# zawierają się w przedziale [1, 49]
assert all((1 <= i <= 49) for i in rand_list) == True
# Wyświetlamy listę:
print(rand_list)
"if item not in rand_list: " tego właśnie mi brakowało, kiepsko radzę sobie z angielskim i za bardzo się przyzwyczaiłem do tego, że łatwo znajdę rozwiązanie, tak jak było to w przypadku javy
Moje subiektywne odczucie do pythona w stosunku do javy to jest jak przesiadka z Merca do Łady.
Akurat to jest fajne w Pythonie, że kod czyta się jak pseudokod w języku angielskim. Co do drugiego przykładu to funkcja zwraca tylko jeden zestaw liczb, bo w pierwszym kroku iteracji opuszczasz pętlę; return powinno się znajdować poza pętlą for, czyli należy zmniejszyć wcięcie.
Ale robisz błąd opisany powyżej. Spróbuj tej funkcji:
import random
def chybil_trafil(n):
"""Funkcja pobiera liczbę kuponów `n` i zwraca listę
6-cio elementowych list zawierających niepowtarzalne
liczby z zakresu [1, 49].
"""
if not isinstance(n, int):
raise TypeError('Nieprawidłowa liczba kuponów')
li = []
for i in range(n):
li.append(random.sample(range(1, 50), 6))
return li
print(chybil_trafil(5))