Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Pomoc w zadaniu - lotto  (Przeczytany 1327 razy)
« : 13:14 23/11/18 »
Kono09 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 1


Hej,

bardzo proszę o pomoc w zadaniu. Nie mam pojęcia co zrobić żeby kod działał.

Tu zadanie:

Jak wszystkim wiadomo, LOTTO to gra liczbowa polegająca na losowaniu 6 liczb z zakresu 1–49. Zadaniem gracza jest poprawne wytypowanie losowanych liczb. Nagradzane jest trafienie 3, 4, 5 lub 6 poprawnych liczb.

Napisz program, który:

zapyta o typowane liczby, przy okazji sprawdzi następujące warunki:
czy wprowadzony ciąg znaków jest poprawną liczbą,
czy użytkownik nie wpisał tej liczby już poprzednio,
czy liczba należy do zakresu 1-49,
po wprowadzeniu 6 liczb, posortuje je rosnąco i wyświetli na ekranie,
wylosuje 6 liczb z zakresu i wyświetli je na ekranie,
poinformuje gracza, czy trafił przynajmniej "trójkę".


Tutaj moj kod:


import random


def list_of_numbers():
    lst = []
    while len(lst) < 6:
        rnd = random.randint(1,49)
        if rnd not in lst:
            lst.append(rnd)
    lst.sort()
    return lst

print (list_of_numbers())


def lotto():
    count = 0
    lst_numbers = []
    while len(lst_numbers) < 6:
        try:
            number = int(input("Podaj liczbe: "))
            if number not in range(1, 49):
                print ("Musisz wybrać liczbę od 1 do 49.")
            elif number in lst_numbers:
                print ("Już wpisałeś tą liczbę. Podaj inną od 1 do 49.")
            else:
                lst_numbers.append(number)
        except ValueError:
            print ("Musisz podać liczbę.")
    lst_numbers.sort()
    return lst_numbers


def resulta():
    count = []
    for element in lotto():
        if element in list_of_numbers():
            count.append(element)
    print (count)
    if len(count) < 3:
        return "Niestety. Nie udało Ci się trafić chociaż 3 liczb."
    elif len(count) == 3:
        return "Brawo! trafiłeś 3!"
    elif len(count) == 4:
        return "Brawo! trafiłeś 4!"
    elif len(count) == 5:
        return "Brawo! trafiłeś 5!"
    else:
        return "WOW! TRAFIŁEŚ 6 LICZB! JESTEŚ MILIONEREM"


print (resulta())

Bardzo proszę o pomoc. Nie wiem dlaczego nie chce mi sumować tych samych liczb (trafionych) w obu listach.
Zapisane
« Odpowiedz #1 : 14:17 23/11/18 »
Guaz Offline
Expert Python User

Zobacz profil
****

Reputacja: 69
Płeć: Mężczyzna
Wiadomości: 513


Zacznę od prośby na przyszłość z mojej strony, jak wstawiasz kod, rób to w ten sposób:
{code=python} twój kod {/code} #Tylko zamiast klamrowych, użyj kwadratowych nawiasów.
Oraz gdyby wyświetlał się błąd, to tak samo w znacznikach {code}cała treść błędu{/code} Uśmiech

W sumie, polecam do tego użyć zbiorów (set).
To zapewni ci unikalność liczb oraz hashuje (układa w porządku rosnącym zawsze), i tak się składa że akurat wczoraj pomagałem znajomemu na studiach z takim podobnym zadaniem (Wytypuj 6 liczb i sprawdź po ilu próbach komputer je wylosuje) i wysłałem mu pythonowy kod żeby sobie przerobił na C++ Chichot.
Kod
from random import randint
 
while True:
try:
uzytkownika = set(int(i) for i in input("Podaj sześć liczb po spacji:").split() if int(i) < 50 and int(i) > 0)
if len(uzytkownika) != 6: raise TypeError();
else: break;
except TypeError:
print("Niepoprawne wejście:")
 
print(uzytkownika)
input()
i = 0
while True:
komputerowe = set(randint(1, 49) for i in range(6))
if len(komputerowe) == 6:
i += 1
if i % 100000 == 0:
print(i, "Komputer wybrał:", komputerowe)
if uzytkownika == komputerowe:
print("Udało ci się za", i, "próbą.")
break
 

Co do twojego konkretnego problemu, rozwiąże twój problem na zbiorach, liczę że porównasz zmiany i spróbujesz znaleźć błąd w swoim programie Uśmiech
Kod
import random
 
 
def list_of_numbers():
   lst = set()
   while len(lst) < 6:
       rnd = random.randint(1,49)
       lst.add(rnd) #Set zapewnia unikalność, jak wartość będzie, to się nie doda i będzie losował dalej.
   return lst
 
print(list_of_numbers())
 
def lotto():
   lst_numbers = set()
   while len(lst_numbers) < 6:
       try:
           number = int(input("Podaj liczbe: "))
           if number not in range(1, 49):
               print ("Musisz wybrać liczbę od 1 do 49.")
           elif number in lst_numbers:
               print ("Już wpisałeś tą liczbę. Podaj inną od 1 do 49.")
           else:
               lst_numbers.add(number)
       except ValueError:
           print ("Musisz podać liczbę.")
   return lst_numbers
 
 
def resulta():
   count = lotto() - list_of_numbers()
   print (count)
   if len(count) < 3:
       return "Niestety. Nie udało Ci się trafić chociaż 3 liczb."
   elif len(count) == 3:
       return "Brawo! trafiłeś 3!"
   elif len(count) == 4:
       return "Brawo! trafiłeś 4!"
   elif len(count) == 5:
       return "Brawo! trafiłeś 5!"
   else:
       return "WOW! TRAFIŁEŚ 6 LICZB! JESTEŚ MILIONEREM"
print (resulta())
 

Podpowiem ci że jedynym twoim błędem jest ta linia: `if element in list_of_numbers():`
Zastanów się co się w niej dzieje przy pierwszym elemencie, przy drugim elemencie itd.
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot