Pythonのエラーの原因と対処法

このQ&Aのポイント
  • Pythonのプログラムでエラーが発生した場合、原因を特定するのは困難です。
  • エラーの原因を特定するためには、試行錯誤やデバッグが必要です。
  • Pythonのエラーにはさまざまな原因がありますが、一般的な対処法もあります。
回答を見る
  • ベストアンサー

パイソンのエラーの原因と対処法を教えてください。2

以下のようなPythonのプログラムを組んだのですが、 エラーが出てきてしまいます。試行錯誤してみましたが、 素人の僕には原因が全く分かりません。 これが完成した暁には、発想力の補助をする システムとして利用可能なレベルにまで アップデートしていきたいと思っていたのですが、 無情にもエラーが出てきます。 どうしたらいいですか。 a = {"人工筋肉は圧力で作動する柔らかい動力だ", "ガウス加速器は磁力で加速する", "プロペラは風を生んだ反動で動力を生む", "磁力と静電気力はほぼ同じ数式で表せる", "飛行機の翼はベルヌーイの定理により圧力差を生む", "羽がない扇風機は風を生む"} s = input("Enterキーを押せ!") ss = set(s) while True: from random import randint num = randint(1,3) int_num = int(num) if ss<=a[int_num]: print(a[int_num]) break else: continue Enterキーを押せ!磁力 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-17-e0e40144b34d> in <module> 8 num = randint(1,3) 9 int_num = int(num) ---> 10 if ss<=a[int_num]: 11 print(a[int_num]) 12 break TypeError: 'set' object is not subscriptable

  • Python
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.1

>どうしたらいいですか。 TypeError: 'set' object is not subscriptable がどういったエラーなのか調べてみてください。

hf-sbf5
質問者

お礼

お礼が遅れた申し訳ありません。 回答ありがとうございました。

関連するQ&A

  • パイソンの参考書のプログラムを写したのにエラーが…

    初期化メソッドを持つクラスの定義について、 パイソンの参考書のプログラムを写しただけなのに 何度やっても、どこを探しても原因が分かりません。 プログラムの内容とは別の部分がおかしいんですかね? #以下、問題のプログラムの内容とエラーメッセージ class MyClass2: def _init_(self): self.value = 0 print("a") i3 = MyClass2() i3.value --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-35-d4a47ea99c81> in <module> 5 6 i3 = MyClass2() ----> 7 i3.a AttributeError: 'MyClass2' object has no attribute 'a'

  • エラーのチェックについて

    1~10の数字以外が出たら、再入力を促すようにしたいのですが、上手くいかないので教えてください。 int main(void) { char buf[MAX], moji[MAX]; int n, num; printf("1から10の番号を入力してください:"); while (1) { fgets(buf, MAX, stdin); // 文字列の読み込み n = sscanf(buf, "%d%s", &num, moji); // 文字列から変換 if (num >= 1 && num <= 10 && n == 1) { // 範囲外のエラーチェック break; // 正なら終了 } else { // 間違っていたら入力し直し printf("1から10の番号を入力してください:"); } } 以上のようにして、aや11, ctrlキー+zを入力してEnterを押したときは良いのですが、aの後に続けてctrlキー+zを入力してEnterを押したらelseのprintfがずっと出力され続けてしまいます。それ以外に自分で試した入力の中にはエラーは出ませんでした。ctrlキー+zのことを良く理解していないということもあるのかもしれません。

  • Python 構文のミスについて。

    プログラミングの初心者です。 下のプログラミングですが、どこが間違えているのでしょうか? まず数字を入力して、それがコンピュータがランダムに選んだ数字と同じ であれば、あたりが表示され、ちがうのであればはずれと表示するのですが、 何回数字を入力しても、はずれしか表示されません、どうしてでしょうか、 ご指摘よろしくお願いします。 #coding:shift-jis import random try: while True: num_1 = range(10) num_2 = raw_input('数字を入力してください\n') if len(num_2) == 0: break if num_2 == random.randint(num_1): print('あたりです') else: print('はずれです') except: print('error!') print('終わり')

  • Pythonのプログラムが狙い通りに動きません

    学習目的で下記のようなプログラムを 組んだのですが、試行錯誤を繰り返しても 絶対ありえない結果ばかりが出力されたり、 謎のメモリーエラーが出たりします。(白目 実行すると画面に入力フォームが表示され、 例えば 80 と打ち込むと、1~80 までの 数の中にいくつ素数がいくつ含まれているかを 確率論的に予測するシステムプログラムです。 乱数 = (a_num) を出し、(1<a_num<serch_range) その整数を(num)で割って、(1<num<a_num) 割り切れたらリストに何もせず、 そうでなければ(1/1000 ) を加える という工程を 1000 回繰り返したのち、 リストの合計に 100 を掛けた数を 表示させるシステムを作ろうとしました。 str_serch_range = input("Enterキーを押せ!") serch_range = int(str_serch_range) list_num = [] def sosuu_kuzi(): while True: for cnt in range(1000): from random import randint a_num = randint(2,serch_range) for num in range(2,a_num): if a_num % num == 0: break else: list_num.append(1%1000) sosuu_kuzi() print(sum(list_num)*100) こんなコードでメモリ不足とか、 絶対おかしいと思うんですが…

  • パイソンのエラーの原因と対処法を教えて下さい。

    写真のようなパイソンの プログラムを組んだのですが、 エラーが出てきてしまいます。 試行錯誤しましたが素人の 僕には原因が全く分かりません。 以下に、作ろうとしていた プログラムの内容を示します。 (num_num)は試行回数です。 生成した乱数が素数か否か判定し 素数でなかった場合は 0を、 素数ならば1/(num_num)を 足し合わせていく・・・ という試行の中で何回素数が 出たか表示するプログラムです。 これが完成した暁には、 C P Uに膨大な回数を試行させ、 1~1000000000000000000・・・ までの数の中に素数がいくつ 含まれているかを確率論的に 推測してみよう、という 魂胆だったのですが、無情にも エラーが出てきてしまいます。 という訳で、エラーの原因と 修正法を教えて下さい。

  • 次のcgiファイルを開くには?

    すみません。初心者です。 001.cgi というファイルで フォーム に 正解を入力して Enterキー を 押したら 次の 002.cgi を 開く(実行する)ようにするには どうしたらよいでしょうか? 今は↓このようにして 「次のファイルへ」をクリックしてもらっています。 Enterキーを押すだけで 次の002.cgi (=$num2.cgi)へ行きたいのです。よろしく、お願いいたします。 #-------- if (param('answer') eq $ans){ print ('正解'); print ("<a href=$num2.cgi accesskey=]>次のcgiファイルへ (Alt+])</a> "); #--------

    • ベストアンサー
    • Perl
  • 現在学校のjavaの課題電卓を作っています

    import java.io.*; class dentaku { public static void main(String[] args)throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); System.out.print("式を入力"); String input = r.readLine(); String sum[] = new String[input.length()]; String number = ""; int s = 0; int goukei =0; char enzan = ' '; for(int i=0; i < input.length(); i++) { //System.out.print(str[i]); //文字列から1文字ずつ抽出 char num = input.charAt(i); if(i == input.length()-1) { sum[s] = number; } else { if(num == '+' || num == '-'|| num == '*'|| num == '/') { //配列sumに代入 sum[s] = number; s++; sum[s] = String.valueOf(num); s++; } else { //変数numberにnumを代入 number = number + num; } } } for(int j=0; j<sum.length; j++) { if(sum[j] == null) { break; } if(j == 0) { goukei = Integer.parseInt(sum[j]); } else { if(sum[j].equals("+") || sum[j].equals("-")|| sum[j].equals("*")|| sum[j].equals("/")) { enzan = sum[j].charAt(0); } else { switch(enzan) { case '+': goukei += Integer.parseInt(sum[j]); break; case '-': goukei -= Integer.parseInt(sum[j]); break; case '*': goukei *= Integer.parseInt(sum[j]); break; case '/': goukei /= Integer.parseInt(sum[j]); break; } } } } System.out.print(goukei); } } までできたのですが 実行し 実際に 1+1+1とうってみると答えが23になってしまいます。 どのようにしたらいいのでしょうか

    • ベストアンサー
    • Java
  • Cプログラミング 

    素数を判定するプログラミングの作成で以下のプログラミングを作成したのですが、すべて 素数でないとでてしまいます。どなたか間違いをおしえていただけませんでしょうか。 #include<stdio.h> int main(void) { int num,i; printf("Please input a number:"); scanf("%d",&num); for (i=2; i < num ; i++){num % i; if (num % i == 0) break; } if (num % i == 0) printf("%d is not prime. \n" ,num); else printf("%d is prime. \n" ,num); return 0; }

  • do-while 文でコンパイルエラーがでます。。

    下記グローバル関数Run内のdo-while文で、 error C2059: syntax error : '}' というコンパイルエラーが起きるのですが、どうしても理由がわかりません; do-whileをコメントアウトしコンパイルしてみたところ正常に動くので、そこがおかしいのは間違いないと思います。 どなたかお力添えをお願いいたします。。 #include <iostream> #include "BinaryTree.cpp" using namespace std; void Run(); int main() { Run(); return 0; } void Run() { BinaryTree<int> *bt; char input; do { cout<<"Menu Display"<<endl; cout<<"---------------------"<<endl; cout<<"1> Enter data"<<endl; cout<<"2> Print Tree"<<endl; cout<<"3> Reverse Tree"<<endl; cout<<"4> Quit"<<endl; cout<<"Enter your choice: "; cin>>input; switch (input) { case '1': int elem; cout<<"Enter data for tree: "; cin>>elem; if (bt == NULL) bt = new BinaryTree<int>(elem); else bt->Insert(elem); break; case '2': if (bt == NULL) cout<<"The tree is empty."<<endl; else { cout<<"Tree size = "<<bt->Size(bt)<<endl; cout<<"---------------------"<<endl; bt->Inorder(bt); } break; case '3': if (bt == NULL) cout<<"The tree is empty."<<endl; bt->Reverse(bt); break; }while (input != '4'); } }

  • if-else文および標準演算子(*/+-%)の入力方法

    度々失礼します。 C言語超初心者のものです。QNo.3392139(回答してくださった皆さんありがとうございます。)でも質問させていただきましたが、詳細が足りないようなので、 ここで再度質問をさせていただきます。 プログラミング内容 (1)Enter first integer: 17 [好きな数値選択] (2)Enter operator:(*/+-%) [好きな演算子選択] (3)Enter second integer:5 [好きな数値選択] というように数字・標準演算子・数字の順でキーボードから入力し、 (4)17 / 5 = 3 を(1)~(4)までDOS画面?上に表示させるものです。 そして、if-else文を作成して、以下のようにプログラムを組んでみたのですが(標準演算子は”/”を選択するようにしています)、 else文のところで”parse erro before 'else' ”というエラーが出てしまいます。このエラーがなくなれば、プログラムはうまく起動すると思うのですが・・・。 どこが悪いのでしょうか? まあ、超初心者なので、使える言語はint、float、char、そして関数はscanf、if-else文、位です。 int main() { int num1, num2, num4, num5, num6; char chr; printf("Enter the first integer: "); scanf("%d",&num1); scanf("%c",&num5); printf("Enter an operator (* / + - %): "); scanf("%c",&chr); scanf("%c",&num6); printf("Enter the second integer: "); scanf("%d",&num2); if(chr == '/') num4 = num1 / num2; printf("%d / %d = %d\n", num1, num2, num4); else printf("Can not\n"); system("pause"); return 0; } 大変皆さんお忙しいとは思いますが、出来たらお願いします。 査閲ありがとうございます。

専門家に質問してみよう