Есть ответ 👍

Python Найти ошибку и исправить её

154
186
Посмотреть ответы 2

Ответы на вопрос:

pollylu12
4,7(12 оценок)

1: Объект set не реализует __getitem__, соответственно, доступ к элементам set по индексу невозможен. Приведите set к list для получения доступа к элементу по индексу

2: Функция elem не осуществляет проверку правильности вводимых данных, в следствии чего неверные параметры при вызове функции elem могут поднять исключение IndexError: string/list index out of range.

Пояснения:

Используйте Type Hints для указания принимаемого и возвращаемого типа для функции, а так же добавьте проверку получаемых функцией параметров:

import typing

from typing import List

from typing import Any

def elem(data: List[Any], index: int) -> bool :

   try:

      print(data[index]); return True

   except: return False

elem(list(set('string')), 3)

В предложенном примере кода функция возвращает True или False. в зависимости от результата выполнения. Вы можете добавить декоратор, который будет выводить в консоль сообщение об ошибке вызова без прерывания выполнения программы:

import typing

from typing import List

from typing import Any

from typing import Callable

def Status(func: Callable[[Any], bool]):

   def _wrap(*a, **kw):

       res = func(*a, **kw)

       if not res:

           print('error occurred during call function')

   return _wrap

@Status

def elem(data: List[Any], index: int) -> bool :

   try:

      print(data[index]); return True  

   except: return False

elem(list(set('string')), 3) # -> 'r'

elem(list(set('string')), 32) # -> 'Error occurred during call function'

   

Все примеры кода написаны для языка Python 3.8.3


На обработку последовательности чисел. так как есть условие окончания ввода, то имеет смысл использовать цикл repeat until //pascal var a,i,s,n: integer; begin   s: =0;   n: =0;   repeat       readln(a);       if a> 0 then begin           n: =n+1;           s: =s+a;       end;   until a = 0;   writeln('сумма ',s: 5,'  среднее арифметическое ',s/n); end.      

Популярно: Информатика