Как выбрать целое число для функции

#python

#python

Вопрос:

У меня есть некоторая функция, такая как sumssqure номера диапазона n, если n является целым числом, оно должно возвращать значение суммы. Если n не целое число, должно возвращаться с некоторой строкой. Он должен использовать ошибку повышения значения («Извините, n должно быть целым числом!»). Мои коды могут хорошо работать с любым целым числом n, но возникают проблемы, когда n не является целым числом. Я не знаю, как это исправить. Большое спасибо.

 def sumsquares(n):
    try:
        return sum(i**2 for i in range(0,n 1))
    except ValueError as ve:
        err = str(ve)
    assert err == "Sorry, n must be a whole number!"
sumsquares(2.2)
  

Комментарии:

1. assert Не будет работать. Если ошибки нет, err значение не установлено, и при попытке сравнить оно выдаст сообщение об ошибке. И если есть ошибка, err будет сообщение об ошибке, а не строка, с которой вы сравниваете.

2. Почему вы просто не проверяете входные данные, чтобы увидеть, является ли это целым числом?

3. Части except и assert взяты из инструкции, похоже, я должен добавить этот код внутрь. Может быть, я добавляю неправильно? Потерял разум.

Ответ №1:

Просто верните нужную строку в except блоке.

Кроме того, исключение, возникающее, когда вы указываете неправильный тип аргумента range() , — это TypeError , not ValueError .

 def sumsquares(n):
    try:
        return sum(i**2 for i in range(0,n 1))
    except TypeError as ve:
        return "Sorry, n must be a whole number!"
  

Комментарии:

1. Большое спасибо. Я попробовал ваш код, но потерпел неудачу. Если я удалю «ValueError как ve:», он работает хорошо. Как может получиться: ValueError: Извините, n должно быть целым числом! Большое спасибо!

2. Исключение должно быть TypeError .

Ответ №2:

Если n является типом с плавающей запятой, вы можете добавить простую проверку и вернуть следующее

 if n%1 != 0:
    return 'Float type'