Wątek przeniesiony 2021-01-13 12:41 z Projekty Forumowe przez cerrato.

Ocena programu - początkujący

0

Jak to się mówi nowy dzień, nowy kod ;)

Wykonałem dwa zadania w jednym, jeżeli ktoś ma czas to proszę ocenę kodu. Czy można to było zrobić lepiej i szybciej.

Generalnie coś w stylu zabawy w lotto.
Zadanie 1 polegało na stworzeniu kodu, który spośród 10 liter i 5 cyfr wylosuje 4 i zwróci je w postaci listy. W kodzie jest zapisany jako funkcja drawing()
Zadanie 2 polegało na sprawdzeniu ile razy trzeba wykonać losowanie aby powtórzyć wylosowany kupon. Na tym etapie połączyłem dwa zadania i kupon jest generowany automatycznie a później przeprowadzana jest iteracja do momentu jego powtórzenia. Na koniec wyświetlany jest wynik ile iteracji trzeba było wykonać aby powtórzyć wynik.

"""we create a drawing machine"""

from random import choice 


def drawing(): 
	"""drawing an elements from list"""
	colection_of_elements = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 1, 2, 3, 4, 5]

	list1 = []
	

	for element in colection_of_elements:
		if len(list1) <= 3:
			element = choice(colection_of_elements)
			colection_of_elements.remove(element)
			list1.append(element)
		else:
			break

	
	return list1


def how_many_times():

	"""How many iterations are needed to repeat the result"""
	
	count = 1
	print(f"Mój kupon zawiera: \n\t{my_ticket}")

	while True:	

		ticket_2 = drawing()
		if ticket_2 == my_ticket:
			print(f"Kupon {ticket_2} został ponownie wylosowany po {count} iteracjach.")
			break
		else:
			count += 1
			

my_ticket = drawing()
print(f"Wygrywający kutpon zawiera: \n\t{my_ticket}")
print('\nSprawdźmy, za którym razem powtórzy się wynik z kuponu.')
ticket_2 = how_many_times()
2

Aby wylosować więcej niż 1 użyj random.sample. Dla ułatwienia możesz użyć faktu, że string można iterować jak listę (['a', 'b', 'c'] = 'abc').

W drugim przypadku nieco uprościłem kod, nie ma też potrzeby korzystania z zmiennej ticket_2 - docelowo i tak chcesz losować tak długo aż osiągniesz identyczny los. Popraw także przekazywanie zmiennych - wygląda na to, że założyłeś, iż my_ticket jest zmienną globalną.

ticket_2 = how_many_times() nic nie zwracasz, więc ticket_2 będzie None.

import random

def drawing(): 
    """drawing an elements from list"""
   return random.sample('abcdefghijk12345', 3)


def how_many_times(my_ticket):
    """How many iterations are needed to repeat the result"""
    print(f"Mój kupon zawiera: \n\t{my_ticket}")
    count = 1
    while drawing() != my_ticket:
        count += 1
   print(f"Kupon {my_ticket} został ponownie wylosowany po {count} iteracjach.")

1 użytkowników online, w tym zalogowanych: 0, gości: 1