🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

518閲覧

私が書いたコードのエラーを教えて下さい。

hirahashi

総合スコア38

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/12/23 06:38

編集2019/12/23 07:18

前提・実現したいこと

Jason R.Briggs著の『たのしいプログラミング pythonではじめよう!』
の第13章「Bounce!ゲームを作ってみよう」をやっております。ものに
当たると跳ね返るボールをラケットで打ち返すという内容のゲームを作
っております。

コードを全て書き実行したのですが、エラーがでます。
初心者でどのようなエラーなのか分かりません。
エラーの改善方法を教えていただけませんか?

発生している問題・エラーメッセージ

Traceback (most recent call last):
File "C:\Users\AppData\Local\Programs\Python\Python36-32\Bounce.py", line 5, in <module>
class Ball:
File "C:\Users\AppData\Local\Programs\Python\Python36-32\Bounce.py", line 38, in Ball
ball = Ball(canvas, 'red')
NameError: name 'Ball' is not defined

上記はエラーメッセージなのですが、「Game」の枠は一応出てきます。
スクリーンショットに2枚目を参照ください。

該当のソースコード

ここに言語名を入力
python
ソースコード
from tkinter import *
import random
import time

class Ball:
def init(self, canvas, color):
self.canvas = canvas
self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
self.canvas.move(self.id, 245, 100)
starts = [-3, -2, -1, 1, 2, 3]
random.shuffle(starts)
self.x = starts[0]
self.y = -3
self.canvas_height = self.canvas.winfo_height()
self.canvas_width = self.canvas.winfo_width()

def draw(self): self.canvas.move(self.id, self.x, self.y) pos = self.canvas.coords(self.id) if pos[1] <= 0: self.y = 3 if pos[3] >= self.canvas_height: self.y = -3 if pos[0] <=0: self.x = 3 if pos[2] >=self.canvas_width: self.x = -3 tk = Tk() tk.title("Game") tk.resizable(0, 0) tk.wm_attributes("-topmost", 1) canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) canvas.pack() tk.update() ball = Ball(canvas, 'red') while True: ball.draw() tk.update_idletasks() tk.update() time.sleep(0.01)

試したこと

5行目のclass周辺に全角などの空白がないかチェックしました。

補足情報(FW/ツールのバージョンなど)

Python-shell-で実行しました。
ファイル名はBounce.pyです。

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yodel

2019/12/23 09:59

ソースコードは、他の方に見やすいように下記のように、```で囲って記載すると良いです。 ```コード```
guest

回答2

0

ベストアンサー

Python

1tk = Tk() 2tk.title("Game") 3tk.resizable(0, 0) 4tk.wm_attributes("-topmost", 1) 5canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) 6canvas.pack() 7tk.update() 8 9ball = Ball(canvas, 'red') 10 11while True: 12 ball.draw() 13 tk.update_idletasks() 14 tk.update() 15 time.sleep(0.01)

この部分その本だと Ball classの外に記述してあるように見えます

投稿2019/12/23 07:18

azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirahashi

2019/12/23 07:25

ご回答ありがとうございます。 Ball Classの外に記述する方法を教えていただけませんか? まだClassの概念について理解ができておりません。
hirahashi

2019/12/23 07:31

コードの前の空白を消したのですがエラーがでます。
azuapricot

2019/12/23 07:34

エラーが出るのにBA選んじゃっていいんです?
hirahashi

2019/12/23 07:39

赤い球が動いているのは見えて、 「回答者さんに感謝しなきゃ」という気持ちでいっぱいでした。  実は言うと、エラーが出ております。 本の写真にあるようなラケットも見えません。
azuapricot

2019/12/23 07:41

一応動いたけど今度は別のエラーが出るということでしょうか?
hirahashi

2019/12/23 07:44

はい。エラーの行が違うのでおそらくそうだと思います。 今度は自分で改善できるよう頑張ります。
hirahashi

2019/12/23 07:50

ごめんなさい。ラケットは次の14章でした。 本当にありがとうございました。
guest

0

def init(self, canvas, color):
のところ、

def __init__(self, canvas, color):

としたら動きました。

投稿2019/12/23 06:53

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirahashi

2019/12/23 07:01

ご回答ありがとうございます。 コピーさせていただいたのですが、 私の方は実行できません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問