У меня есть следующая программа, которая берет как параметры словарь, фиксируй (str) и оцени (int) и два целых числа. Программа возвращает новый словарь содержа пары словаря, перемещенного за первый параметр, значения которого находились в ранге, понятом между вторым и третьим параметром (оба включенные).
Проблема, которая у меня есть, состоит в том, что я не знаю, как устанавливать ранг для того, чтобы Вы выбрали оба включенных элемента
OUTPUT: {'b': 4}
OUTPUT ESPERADO : {'b': 4, 'c': 7, 'd': 8, 'f': 10,'}
dicc = {
'a': 1, 'b': 4, 'c': 7, 'd': 8, 'e': 3,
'f': 10,'g': 12, 'h': 13, 'i': 14, 'j': 15
}
inicio = 4
fin = 10
def funcion(dicc, inicio, fin):
diccionariovacio = {}
for clave, valor in dicc.items():
if clave and valor in range(start, end + 1):
diccionariovacio[clave] = valor
return diccionariovacio
ОБНОВЛЕНИЕ:
Исправив ошибку, показанную из-за lucasgonzalez, Вы остаетесь, не функционируя правильно. В этом случае, проблема состоит в том, что у меня есть две маленькие ошибки в выполнении проблемы. Первая ошибка - что ключ {'': 10}
Вы не появляетесь и вторая ошибка состоит в том, что Вы не являетесь ключом {0: 179}
OUTPUT1: {'XYZ': 1, 'ERD': 4, 'WSX': 7, 'GDF': 8, 'ERS': 3, 'WSD': 12, 'UHB': 13, 'YGH': 14, 'QWR': 15}
OUTPUT ESPERADO1 : {'XYZ': 1, 'ERD': 4, 'WSX': 7, 'GDF': 8, 'ERS': 3, '': 10, 'WSD': 12, 'UHB': 13, 'YGH': 14, 'QWR': 15}
OUTPUT2:{1: -392, 2: -135, 3: -134, 6: -615, 7: 29, 9: 20}
OUTPUT ESPERADO2:{0: -179, 1: -392, 2: -135, 3: -134, 6: -615, 7: 29, 9: 20}
Помимо ошибки, которую tenГ-схвати с return
, и которая @lucasgonzalez уже исправила, относительно твоего нового сомнения, ошибку estГЎ в этой lГ-nea:
if clave and valor in range(start, end + 1):
Оставляя в стороне, что ты поместил aquГ - start, end
, переменные, что не estГЎn определенные, и принимая, что querГ-схвати говорить inicio, fin
, ошибку estГЎ, в котором ты написал if clave and valor
ВїquГ© прохвост ключ aquГ-? Вїno говорилось sГіlo о том, чтобы смотреть, была ли или нет стоимость в данном ранге? DeberГ-схвати сделать это раньше:
if valor in range(inicio, fin+1):
и с этим или твоей программой или функционируй.
Esto он кажется того, чтобы быть упражнением класса, и конечно твой преподаватель не увидел хорошо, что ты использовал in range()
, чтобы это решать. В самом деле, именно немного случайно оно функционировало, так как range()
не служит для этого, а чтобы производить iteradores с nГєmeros коррелятивные. Тот факт, что помог tambiГ©n оператор in
, это было счастливое совпадение (что я не conocГ - в, конечно).
Форма mГЎs обычная знания, если один valor
estГЎ понятый между двумя nГєmeros кости serГ - в эту:
if inicio <= valor <= fin:
ВїCГіmo дело в том, что cГіdigo, который tenГ-схвати изначально, удавалось функционировать "я происхожу хорошо" несмотря на то, что поместил clave
раньше в ней condiciГіn? Из-за того, что она не оставляет тайны, не объясняя, эта та razГіn:
Ты expresiГіn равняется этой другой, так как у and
есть самое меньшее предшествование всех относительно порядка, в котором делаются операции:
if clave and (valor in range(inicio, fin + 1)):
следовательно смотрится сначала, если valor
estГЎ в ранге. Результат взгляда это может выходить False
или True
. Давайте предполагать, что он выходит True
, как это был случай 10 или-179. Так как эта вторая часть выходит True
, она expresiГіn, который seguidamente Пайтон должен оценивать:
if clave and True:
В случае, если clave
будет цепью, Ваша стоимость "booleano" равняется всегда True
, кроме для цепей vacГ-схвати, что равняются False
. Поэтому, когда ключ был цепью vacГ - в, этой expresiГіn salГ - в False
несмотря на то, что nГєmero он был в ранге, и элемент не сохранял.
В случае, если clave
будет целым числом, Ваша стоимость "booleano" равняется всегда True
, кроме для нуля, который равняется False
. Поэтому, когда ключ был нулем, этой expresiГіn salГ - в False
несмотря на то, что nГєmero он был в ранге.
Поэтому razГіn твой алгоритм функционировал "почти хорошо". В случаях в ключах они были отличными от ''
или от 0
, ты expresiГіn он вел себя как и она debГ-схвати использовать раньше, в которой clave
не aparecГ - в. Но в случаях, в которых ключ был цепью vacГ - в или ноль, тогда salГ - в False
независимо от, что стоимость была или нет в ранге.
Код ты хорошо, проблема состоит в том, что ты даешь return
, а следовательно твой код возвращает этот словарь в ней первый происшествие.
До if, который подтверждает стоимость совершенно, но там ты не должен возвращать словарь, потому что в первом разе, который выполняет условие, он выполняет return и заканчивает функцию. return
ты был бы должен делать это вне for
def funcion(dicc, inicio, fin):
diccionariovacio = {}
for clave, valor in dicc.items():
if clave and valor in range(start, end + 1):
diccionariovacio[clave] = valor
return diccionariovacio