Обращение мини словарей

У меня есть следующая программа, которая берет как параметры словарь, фиксируй (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}
0
задан 09.11.2019, 23:39
2 ответа

Помимо ошибки, которую 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):

и с этим или твоей программой или функционируй.

Bonus

Esto он кажется того, чтобы быть упражнением класса, и конечно твой преподаватель не увидел хорошо, что ты использовал in range(), чтобы это решать. В самом деле, именно немного случайно оно функционировало, так как range() не служит для этого, а чтобы производить iteradores с nГєmeros коррелятивные. Тот факт, что помог tambiГ©n оператор in, это было счастливое совпадение (что я не conocГ - в, конечно).

Форма mГЎs обычная знания, если один valor estГЎ понятый между двумя nГєmeros кости serГ - в эту:

if inicio <= valor <= fin:

Bonus 2

Вї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 независимо от, что стоимость была или нет в ранге.

0
ответ дан 01.12.2019, 12:10

Код ты хорошо, проблема состоит в том, что ты даешь 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
0
ответ дан 01.12.2019, 12:10