m.....i
m.....i
[ #python #programowanie #programista15k ]

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
A.....t
A.....t
@michal-dobrzycki: a to 0 < score & 1 << i
to po prostu sprawdza czy na i-tym miejscu w zapisie binarnym liczby score jest 1 czy 0
A.....t
A.....t
@michal-dobrzycki:
jeśli ci to pomoże to taka parafraza
lista = []
for alergia, i in Allergies.alergielist:
if 0 < score & 1 << i
___lista.dodaj(alergia)
pp555
pp555
pp555
0
Dla każdego elementu listy Allergies.allergie_list jest sprawdzane czy liczba zawiera bit 1 na określonej pozycji, jeśli tak, to ten element jest dopisywany dodawany do listy self.lst, w przeciwnym wypadku jest pomijany.

Przykładowo 5 to binarnie 101 więc ma 1 na pozycji 0 i 2 (patrząc od prawej strony), więc lista self.lst zawiera elementy znajdujące się pod tymi indeksami w liście Allergies.allergie_list
m.....i
m.....i
@pp555: @AwizisieAkat: teraz skumałem :) dzięki!