[PYTHON] Pomoc w prostych przykładach


(zaku) #1

Witam!

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.

  1. 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

  1. 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

Grzebanie w dokumentacji niewiele mi pomogło

Będę wdzięczny za pomoc.


(Krystian Rosinski) #2

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)

(zaku) #3

@up

"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.


(Krystian Rosinski) #4

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.


(zaku) #5

ale ja celowo tak zrobiłem żeby nie losował mi tyko jednego zestawu, chce mieć ich tyle ile podje w parametrze


(Krystian Rosinski) #6

 

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))