Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python ValueError:数学ドメインエラーソリューション

数学では、負の数やゼロの数では機能しない操作があります。たとえば、平方根について考えてみます。負の数の平方根は見つかりません。 Pythonは、すべての操作が負の数またはゼロの数で機能するわけではないことを認識しています。

Pythonは、負の数をサポートしていない操作で負の数を使用しようとすると、エラーを発生させます。このガイドでは、ValueError: math domain errorの原因について説明します。 。ガイドの最後に、この問題の解決策を説明します。

ValueError:数学ドメインエラー

Python ValueError: math domain error 数学演算でサポートされていない数値を使用すると、が発生します。このエラーは通常、sqrt()で発生します メソッドとlog() 方法。

ValueErrorは、その演算では機能しない値に対して数学演算を実行していることを示すタイプのエラーです。 「数学ドメインエラー」の場合、負の数またはゼロの数を使用しているはずです。

ValueError: math domain errorの例を見てみましょう。 実行中の問題。

シナリオ例

与えられた数の平方根を計算するプログラムを構築しています。このプログラムは、学生が平方根の知識を修正するのに役立つように設計されています。

与えられた数の平方根を計算するプログラムを書いてみましょう。平方根を計算するために必要な数学ライブラリをインポートすることから始めます。

import math

次に、ユーザーから番号を収集します。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

number = input("Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: ")

私たちのプログラムは人々が自分の答えをチェックするのを助けるように設計されているので、私たちはユーザーに自分で答えを見つけてみるように促します。次に、ユーザーが挿入した値の平方根を見つけます。

answer = math.sqrt(int(number))

ユーザーが平方根を求めている数値を格納する「数値」の値を整数に変換します。これが必要なのは、input() 前述の数値を収集するために使用したメソッドは、文字列を返します。文字列値の平方根が見つかりません。

最後に、コンソールへの回答を印刷しましょう。

print("The square root of {} is {}.".format(number, answer))

format()を使用します 文字列に数値を追加するステートメント。文字列は次のように表示されます。

"The square root of [Number user inserted] is [The square root our program calculated]"

負の数でプログラムをテストしてみましょう。

Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: -16
Traceback (most recent call last):
  File "test.py", line 5, in <module>
	answer = math.sqrt(int(number))
ValueError: math domain error

-16を挿入しました 私たちのプログラムに。コードがエラーを返しました。

このエラーを修正しましょう。

ソリューション

このエラーを修正するには、math.sqrt()を実行する前に、負の数の平方根を計算できないことをユーザーに通知する必要があります。 関数。

これを実現するためにコードを修正しましょう。

import math

number = input("Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: ")

if int(number) >= 0:
answer = math.sqrt(int(number))
print("The square root of {} is {}.".format(number, answer))
else:
	print("You cannot find the square root of a number less than 0.")

ifを使用します ユーザーがプログラムに挿入する数がゼロ以上であるかどうかを確認するステートメント。数がこの基準を満たしている場合、ifの内容 ステートメント実行。それ以外の場合は、else ステートメントが実行され、無効な番号を挿入したというメッセージが表示されます。

プログラムをもう一度実行してみましょう。プログラムが返されます:

Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: -16
You cannot find the square root of a number less than 0.

コードは正常に機能します。

結論

ValueError: math domain error 計算できない負の数またはゼロの数に対して数学関数を実行すると、が発生します。このエラーを解決するには、使用している数学関数に有効な数値を使用していることを確認してください。

Pythonでのコーディングについて詳しく知りたい場合は、Pythonの学習方法ガイドをご覧ください。このガイドには、Pythonプログラミング言語を学習している人向けに設計された多数の学習リソース、コース、および書籍が含まれています。


  1. Pythonで数の累乗を見つける方法は?

    数値の累乗は2つの方法で計算できます。 math.pow()関数の使用 >>> math.pow(10,2) 100.0 べき乗演算子の使用 >>> 10**2 100

  2. Pythonで数値の自然対数を計算する方法は?

    数学モジュールでは、対数値を計算するための2つの関数が定義されています。 log()関数は数値の自然対数を返しますが、log10()は標準の対数、つまり基数10を計算します log()関数は、数値と底の2つの引数を取ります import math print ("math.log(100.12) : ", math.log(100.12)) print ("math.log(100.72) : ", math.log(100.72)) print ("math.log(math.pi) : ", math.log(math.pi))