Я работаю над проектом кодирования, чтобы определить, загрязнены ли воды или нет. Для одного типа загрязнения вода считается загрязненной, если более 10% образцов в 5-летнем окне находятся за пределами заданных критериев. Для решения этой проблемы, я сделал следующий кодВложенные итерации с помощью счетчиков
def testLocationForConv(overDict):
impairedList=[]
for pollutant in overDict:
for date in dateList:
total=0
over=0
for compDate in dateList:
if int(date[0])+1825>int(compDate[0]) and int(date[0])-1825<int(compDate[0]):
total=total+1
if date[1]:
over=over+1
if total!=0:
if over/total>=.1:
if pollutant not in impairedList:
impairedList.append(pollutant)
return impairedList
код принимает словарь, и будет производить список загрязняющих веществ для организма воды. Ключами словаря являются строки с именами загрязнителей, а значение - датаList, список кортежей, с датой теста в качестве первого элемента, а второй - логическое значение, указывающее, является ли значение, измеренное в этот день, над или под приемлемым значением
Ниже приведен пример "overDict", что код будет принимать в качестве входного сигнала:
{ 'кишечной палочки': [('40283', False), ('40317 ', False), (' 40350 ', False), (' 40374 ', False), (' 40408 ', True), (' 40437 ', True), (' 40465 ', False), (' 40505 ',' False), ('40619', False), ('40647', False), ('40681', False), ('40519', False) , ('40710', False), ('40738', False), ('40772', False), ('40801', True), ('40822', False) ('40980', False), ('41011', False), ('41045', False), ('41067', False), ('41228', False), ('41388', False) 41409 ', False), (' 41438 ', False), (' 41597 ', False), (' 41710 ', False), (' , False), ('41773', False), ('41802', False), ('41834', False)]}
в этом примере, код говорит, что это excedance, но оно не должно так как менее 10% тестов были «истинными», и все тесты проводились в течение 5-летнего периода. Что здесь неправильно?
Update: Когда я использую этот словарь в качестве overDict, код считает эти данные не превышение, даже если в окне, которое начинается 40745 2 из 11 значений находятся за пределом
{'copper': [('38834', False), ('38867', False), ('38897', False),
('40745', False), ('40764', False), ('40799', False), ('41024', True),
('41047', False), ('41072', True), ('41200', False), ('41411', False),
('41442', False), ('41477', False), ('41502', False)]}
Чтобы устранить неполадки, я напечатал slide_windows в строках кода «для кортежей» и «для окна», и я получил это вместо списка, где каждая другая дата начала используется один раз.
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
Ваш отступ отключен, вы можете исправить его? – TemporalWolf
у нас нет 'dateList', и вы должны исправить свой отступ. –
Хорошая возможность немного очистить свой код и сделать его более читаемым. Например, у вас длинная строка с сложным условным и повторяющимся магическим числом. Поверните это в простое условие, которое вызывает логическую функцию. –