Grüße,
mir als programmierer, entwickler geht es oft so, dass ich gerne gewisse Sachen umsetzen würde, aber ich meist an den vielen kleinen problemen scheitere, in die das große Problem zerfällt.
So musste ich mir vor kurzem überlegen, wie ich es hinbekommen, aus einer Liste unbekannter Länge und unbekannten Inhalts von Zahlen, wie ich daraus bestimmte Zahlen herausfiltere. Herausgekommen ist das hier:
Code: Alles auswählen
def filter_number_from_list(trend_list, number_to_filter):
# EXAMPLE
# 1) INPUT: trend_list = [5, 0, -3, -1, 4, 0, 6, 4], number_to_filter = 0
# 2) OUTPUT: trend_list = [5, -3, -1, 4, 6, 4]
# INIT
number_to_filter_counter = 0
# FILTER
for i in trend_list:
if i == number_to_filter:
number_to_filter_counter += 1
for i in range(number_to_filter_counter):
trend_list.remove(number_to_filter)
# RETURN
return trend_list
Ich möchte daher einen Anstoß geben, dass jeder vielleicht versucht etwas offener und allgemeiner zu programmieren, so könnten wir gegenseitig überschneidende Probleme schneller lösen. Eine Art pool für Probleme einfacher Art aufbauen.
Wenn ich nicht erst lang nachdenken muss über irgend ein kleines Problem, weil das eben schon im "pool" gelöst ist, kann ich mich schon wieder um ein anderes kümmern und so dem pool wieder etwas hinzufügen.
Hier noch die Klasse in der die Funktion zu finden ist:
Code: Alles auswählen
class make_calculations:
# new_random_numbers: INPUT A LIST OF INTEGERS. EX: [1, 1, -1, 1, -1]
# connect_how_many: INPUT THE INTEGERS: 1 OR 2
def __init__(self, new_random_numbers, connect_how_many):
# INPUT
self.new_random_numbers = new_random_numbers
self.connect_how_many = connect_how_many
# /INPUT
# OUTPUT
self.trend_list = []
# /OUTPUT
def connect_trends_of_same_direction_together(self, list_of_positive_and_negative_integers):
# EXAMPLE
# 1) INPUT: list_of_positive_and_negative_integers = [1, -1, 5, 4, 3, -1, -6, -5]
# 2) OUTPUT: trend_list = [1, -1, 12, -12]
# INIT
trend_direction = ''
up_trend_length = 0
down_trend_length = 0
trend_list = []
# CONNECTING
for i in range(len(list_of_positive_and_negative_integers)):
if (trend_direction != 'DOWN'):
if (list_of_positive_and_negative_integers[i] > 0):
up_trend_length += list_of_positive_and_negative_integers[i]
trend_direction = 'UP'
elif (trend_direction == 'UP'):
trend_list.append(up_trend_length)
up_trend_length = 0
trend_direction = 'DOWN'
if (list_of_positive_and_negative_integers[i] < 0):
down_trend_length += list_of_positive_and_negative_integers[i]
trend_direction = 'DOWN'
elif (trend_direction == 'DOWN'):
trend_list.append(down_trend_length)
down_trend_length = 0
trend_direction = 'UP'
elif (trend_direction != 'UP'):
if (list_of_positive_and_negative_integers[i] < 0):
down_trend_length += list_of_positive_and_negative_integers[i]
trend_direction = 'DOWN'
elif (trend_direction == 'DOWN'):
trend_list.append(down_trend_length)
down_trend_length = 0
trend_direction = 'UP'
if (list_of_positive_and_negative_integers[i] > 0):
up_trend_length += list_of_positive_and_negative_integers[i]
trend_direction = 'UP'
elif (trend_direction == 'UP'):
trend_list.append(up_trend_length)
up_trend_length = 0
trend_direction = 'DOWN'
if trend_direction == 'UP':
trend_list.append(up_trend_length)
elif trend_direction == 'DOWN':
trend_list.append(down_trend_length)
# RETURN
return trend_list
def connect_trends(self, connect_how_many, trend_list):
# connect_how_many ONLY FOR VALUES: 1 OR 2
# EXAMPLE
# 1) INPUT: connect_how_many = 2, trend_list = [5, -3, -1, 4, 6, 4]
# 2) OUTPUT: new_trend_list = [2, 3, 10]
# INIT
old_trend_list_is = ''
if len(trend_list) % 2 == 1:
old_trend_list_is = 'UNEVEN'
trend_list.pop()
else:
old_trend_list_is = 'EVEN'
# CONNECT THE TRENDS
new_trend_list = []
new_current_trend = 0
for i in range(len(trend_list)/connect_how_many):
new_current_trend = 0
for j in range(connect_how_many):
new_current_trend += trend_list[connect_how_many*i + j]
new_trend_list.append(new_current_trend)
# RETURN
return new_trend_list
def filter_number_from_list(self, trend_list, number_to_filter):
# EXAMPLE
# 1) INPUT: trend_list = [5, 0, -3, -1, 4, 0, 6, 4], number_to_filter = 0
# 2) OUTPUT: trend_list = [5, -3, -1, 4, 6, 4]
# INIT
number_to_filter_counter = 0
# FILTER
for i in trend_list:
if i == number_to_filter:
number_to_filter_counter += 1
for i in range(number_to_filter_counter):
trend_list.remove(number_to_filter)
# RETURN
return trend_list
def do_action(self):
# CONNECTS ALL -1s AND 1s (1, 1, 1 --> 3, -1, -1, -1 --> -3)
self.trend_list = self.connect_trends_of_same_direction_together(self.new_random_numbers)
# CONNECTS TWO DIFFERENT TRENDS ex(2, -3) --> -1
self.trend_list = self.connect_trends(self.connect_how_many, self.trend_list)
# IF ZERO APPEARS IT GETS FILTERED
self.trend_list = self.filter_number_from_list(self.trend_list, 0)
# if TWO POSITIVE TRENDS ARE IN A ROW
# then THEY ARE GETTING CONNECTED TO ONE
self.trend_list = self.connect_trends_of_same_direction_together(self.trend_list)