[ #python #programowanie #programista15k ]
Czy ktoś może mi wytłumaczyć co się dzieje
Wiem, że ta klasa zwraca w zależności od podania cyfry alergie...
Tzn
To działa dobrze, ale nie rozumiem tego co dzieje się w self.lst po =
Czy ktoś może mi wytłumaczyć co się dzieje
def __init__()?Wiem, że ta klasa zwraca w zależności od podania cyfry alergie...
Tzn
Allergies(2) - zwróci is_allergic_to('peanuts'), dla (5) zwróci is_allergic_to('eggs') i is_allergic_to('shellfish')To działa dobrze, ale nie rozumiem tego co dzieje się w self.lst po =
class Allergies(object):
"""Generates and stores allergies from a given score"""
# Allergie # score
allergie_list = ['eggs', # 1
'peanuts', # 2
'shellfish', # 4
'strawberries',# 8
'tomatoes', # 16
'chocolate', # 32
'pollen', # 64
'cats', # 128
]
def __init__(self, score):
"""Generates a list of allergies from a score"""
self.lst = [allergie
for i, allergie in enumerate(Allergies.allergie_list)
if 0 < (score & 1 << i )]
def is_allergic_to(self, allergie):
"""Tests if allergie is on the list"""
return allergie in self.lst- Najlepsze
- Wszystkie komentarze







to po prostu sprawdza czy na i-tym miejscu w zapisie binarnym liczby score jest 1 czy 0
jeśli ci to pomoże to taka parafraza
lista = []
for alergia, i in Allergies.alergielist:
if 0 < score & 1 << i
___lista.dodaj(alergia)
Allergies.allergie_listjest sprawdzane czy liczba zawiera bit1na określonej pozycji, jeśli tak, to ten element jest dopisywany dodawany do listyself.lst, w przeciwnym wypadku jest pomijany.Przykładowo 5 to binarnie 101 więc ma
1na pozycji 0 i 2 (patrząc od prawej strony), więc listaself.lstzawiera elementy znajdujące się pod tymi indeksami w liścieAllergies.allergie_list