[解決済み] ValueError: 基数が10のint()のリテラルは無効です。
質問
を解くプログラムを書きました。
y = a^x
を解き、それをグラフに投影するプログラムを書きました。問題は
a < 1
というエラーが出ることです。
ValueError: 基数10を持つint ()のリテラルが無効です。
何か提案はありますか?
トレースバックはこちらです。
Traceback (most recent call last):
File "C:\Users\kasutaja\Desktop\EksponentfunktsioonTEST - koopia.py", line 13, in <module>
if int(a) < 0:
ValueError: invalid literal for int() with base 10: '0.3'
1より小さく0より大きい数字を入れるたびに問題が発生します。この例では0.3でした。
これは私のコードです。
# y = a^x
import time
import math
import sys
import os
import subprocess
import matplotlib.pyplot as plt
print ("y = a^x")
print ("")
a = input ("Enter 'a' ")
print ("")
if int(a) < 0:
print ("'a' is negative, no solution")
elif int(a) == 1:
print ("'a' is equal with 1, no solution")
else:
fig = plt.figure ()
x = [-2,-1.75,-1.5,-1.25,-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1,1.25,1.5,1.75,2]
y = [int(a)**(-2),int(a)**(-1.75),int(a)**(-1.5),int(a)**(-1.25),
int(a)**(-1),int(a)**(-0.75),int(a)**(-0.5),int(a)**(-0.25),
int(a)**(0),int(a)**(0.25),int(a)**(0.5),int(a)**(0.75),
int(a)**1,int(a)**(1.25),int(a)**(1.5),int(a)**(1.75), int(a)**(2)]
ax = fig.add_subplot(1,1,1)
ax.set_title('y = a**x')
ax.plot(x,y)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.spines['left'].set_smart_bounds(True)
ax.spines['bottom'].set_smart_bounds(True)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.savefig("graph.png")
subprocess.Popen('explorer "C:\\Users\\kasutaja\\desktop\\graph.png"')
def restart_program():
python = sys.executable
os.execl(python, python, * sys.argv)
if __name__ == "__main__":
answer = input("Restart program? ")
if answer.strip() in "YES yes Yes y Y".split():
restart_program()
else:
os.remove("C:\\Users\\kasutaja\\desktop\\graph.png")
どのように解決するのですか?
回答
トレースバックでは
int()
は整数を取りますが、あなたは小数を指定しようとしています。
float()
:
a = float(a)
これは期待通りに動作するはずです。
>>> int(input("Type a number: "))
Type a number: 0.3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0.3'
>>> float(input("Type a number: "))
Type a number: 0.3
0.3
コンピュータは様々な方法で数値を記憶しています。Pythonには主に2つのものがあります。整数(Ȓ)を格納する整数と、実数(ℝ)を格納する浮動小数点数です。必要なものに基づいて、正しいものを使用する必要があります。
(注意点として、Pythonはこの抽象化においてかなり優れています。他のほとんどの言語は、例えば倍精度浮動小数点数を持っていますが、あなたはそれを心配する必要はありません。3.0以降、Pythonは整数を割ると自動的に浮動小数点に変換もしてくれるので、実はとても扱いやすいのです)
トレースバックがある前の答えの推測。
あなたの問題は、あなたが入力しているものは何でも数字に変換することができないことです。これは、たとえば、多くのことが原因である可能性があります。
>>> int(input("Type a number: "))
Type a number: -1
-1
>>> int(input("Type a number: "))
Type a number: - 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '- 1'
の間にスペースを追加する。
-
と
1
を使用すると、文字列が正しく解析されずに数値に変換されません。もちろん、これは単なる例であり、何が問題なのかを確実に説明するためには、どのような入力を行っているのかを教えていただく必要があります。
コードのスタイルに関するアドバイス。
y = [int(a)**(-2),int(a)**(-1.75),int(a)**(-1.5),int(a)**(-1.25),
int(a)**(-1),int(a)**(-0.75),int(a)**(-0.5),int(a)**(-0.25),
int(a)**(0),int(a)**(0.25),int(a)**(0.5),int(a)**(0.75),
int(a)**1,int(a)**(1.25),int(a)**(1.5),int(a)**(1.75), int(a)**(2)]
これは本当に悪いコーディング習慣の一例です。何かを何度も何度もコピーしているところですが、何かが間違っています。まず、あなたは
int(a)
を何度も使っていますが、これを行う場所では、代わりに変数に値を代入し、それを代わりに使うことで、何度も値を入力する(そしてコンピューターに計算させる)のを避けるべきです。
a = int(a)
この例では、値を
a
に戻して、古い値を新しい値で上書きしています。
y = [a**i for i in x]
このコードは、同じことを何度も書き出すという大衆的なことをせずに、上のモンスターと同じ結果を生み出します。これは単純な
リスト内包
. これはまた、もしあなたが
x
を編集しても
y
に何もしなくても、自然にそれにあわせて更新されます。
また、以下のことに注意してください。 PEP-8、Pythonスタイルガイド , は、関数を呼び出すときに識別子と括弧の間にスペースを残さないことを強く勧めています。 .
関連
-
[解決済み] 2進数の文字列をint型に変換する
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜ「eval」を使うのは悪い習慣なのか?
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Django filter queryset __in for *every* item in list