質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

516閲覧

関数のグラフ描くプログラムを作っているのですが、エラーが出て困っています。

cand

総合スコア65

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/04/19 09:27

python

1import sys 2import pygame 3from pygame.locals import QUIT 4 5pygame.init() 6window=pygame.display.set_mode((400,300)) 7pygame.display.set_caption("関数のグラフ") 8fpsclock=pygame.time.Clock() 9 10func=input("f(x)=x") 11 12def main(): 13 while True: 14 for event in pygame.event.get(): 15 if event.type==QUIT: 16 pygame.quit() 17 sys.exit() 18 19 window.fill((0,0,0)) 20 21 pygame.draw.line(window,(255,255,255),(0,150),(400,150)) 22 pygame.draw.line(window,(255,255,255),(200,0),(200,300)) 23 24 x=200 25 y=150 26 while x<=400: 27 x+=0.1 28 y=eval('x'+func) 29 pointlist1 = [] 30 pointlist1.append((x,y)) 31 pygame.draw.lines(window,(255,255,255),False,pointlist1) 32 if x==400: 33 break 34 35 x=200 36 y=150 37 pointlist2 = [] 38 while x>=0: 39 x-=0.1 40 y=eval('x'+func) 41 pointlist2.append((x,y)) 42 pygame.draw.lines(window, (255, 255, 255), False, pointlist2) 43 if x==0: 44 break 45 46 pygame.display.update() 47 fpsclock.tick(3) 48 49if __name__=='__main__': 50 main() 51 52

これを実行すると
line 31, in main
pygame.draw.lines(window,(255,255,255),False,pointlist1)
ValueError: points argument must contain more than 1 points

というエラーが出てしまいます。
ポイントリストに点の位置を代入しているはずなのに、こんなエラーが出るのは
なぜなのでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ループの1回目ではリストの要素が1つしかないので、2点以上ないと描画できないlinesはエラー吐いて落ちます。
pygame.draw.lines()をwhileのブロックの外に出してあげてください。

投稿2018/04/19 09:43

hayataka2049

総合スコア30933

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

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

cand

2018/04/19 10:17

import sys import pygame from pygame.locals import QUIT pygame.init() window=pygame.display.set_mode((400,300)) pygame.display.set_caption("関数のグラフ") fpsclock=pygame.time.Clock() func=input("f(x)=x") def main(): while True: for event in pygame.event.get(): if event.type==QUIT: pygame.quit() sys.exit() window.fill((0,0,0)) pygame.draw.line(window,(255,255,255),(0,150),(400,150)) pygame.draw.line(window,(255,255,255),(200,0),(200,300)) x=200 y=150 pointlist1 = [] while x<=400: x+=0.01 y=eval('x'+func) pointlist1.append((x,y)) if x==400: break pygame.draw.lines(window, (255, 255, 255), False, pointlist1) x=200 y=150 pointlist2 = [] while x>=0: x-=0.01 y=eval('x'+func) pointlist2.append((x,y)) if x==0: break pygame.draw.lines(window, (255, 255, 255), False, pointlist2) pygame.display.update() fpsclock.tick(3) if __name__=='__main__': main() ご回答ありがとうございます。上記のように修正してみました。エラーは出ないようになりましたが、 うまくはいきません。私のwhile分の外への出し方の解釈が間違っているのでしょうか?
cand

2018/04/19 10:18

見づらくてすみません
hayataka2049

2018/04/19 10:21 編集

見づらいと言うか「見えない」ので、質問へ追記してコードブロックが反映されるようにしてください また、「うまくはいかない」についてどのような挙動でどのような問題があるのかちゃんと説明してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問