.. title:: Pythonã§å¿ƒç†å®Ÿé¨“ - 例題5-1 例題5-1:繰り返ã—使ã†å‡¦ç†ã‚’ã¾ã¨ã‚ã‚‹(1) ============================================ **B:** よã—ã€å®Ÿè¡Œã£ã¨ã€‚…。んん? ã‚れ? **A:** (部屋ã«å…¥ã£ã¦ãã¦) よã£ã€‚ã¾ã 帰ã£ã¦ãªã‹ã£ãŸã®ã‹ã€‚夜ã®é…ãã¾ã§é ‘å¼µã£ã¦ã‚‹ã。 **B:** ã‚ー。ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ を完æˆã•ã›ãŸã‚‰å¸°ã‚ã†ã¨æ€ã£ã¦ãŸã‚“ã§ã™ãŒâ€¦ã€‚今ã¡ã‚‡ã†ã©ã€Œã§ããŸï¼ã€ã¨æ€ã£ã¦å®Ÿè¡Œã—ãŸã‚‰ ã‚ー入力ãŒã†ã¾ãã„ã‹ãªãã¦ã€‚ **A:** ãµã†ã‚“。今日ã¯ã‚‚ã†ä»•事ã—ãªã„ã‹ã‚‰è¦‹ã¦ã‚ã’るよ。ã©ã‚Œã©ã‚Œã€‚ **B:** ãˆãˆã¨ã§ã™ãã€ã¾ãšã“ã“ã§æ³¨è¦–点を表示ã—ã¦ã§ã™ã… *------------------------------ çœç•¥ ------------------------------* **A:** ãµã‚€ã€‚ã“ã“ãŒé–“é•ã£ã¨ã‚‹ãªã€‚ã“ã®76行目ã‹ã‚‰80行目ã¨â€¦ .. code-block:: python :linenos: :lineno-start: 76 waitingKeyPress = True while waitingKeyPress: #スペースã‚ãƒ¼ãŒæŠ¼ã•れるã®ã‚’待㤠for e in event.get(): if e.type == KEYDOWN and e.key == K_SPACE: waitingKeyPress = False **A:** 119行目ã‹ã‚‰128行目をよã見ãŸã¾ãˆã€‚ .. code-block:: python :linenos: :lineno-start: 119 # ã“ã“ã‹ã‚‰å応ã®è¨˜éŒ² while waitingKeyPress: # Xã‚ーã‹Cã‚ãƒ¼ãŒæŠ¼ã•れるã®ã‚’待㤠for e in event.get(): if e.type == KEYDOWN if e.key == K_X: response = 'X' waitingKeyPress = False elif e.key == K_C response = 'C' waitingKeyPress = False **A:** 120行目ã€whileループãŒå§‹ã¾ã‚‹æ™‚ã«waitingKeyPressã«ã¯ä½•ãŒæ ¼ç´ã•れã¦ã„る? **B:** ã¸ï¼Ÿ **A:** 76行目ã§ã‚¹ãƒšãƒ¼ã‚¹ã‚ーを待ã¤ãŸã‚ã«waitingKeyPressã«Trueã‚’æ ¼ç´ã—ã¦ã€77行目ã‹ã‚‰ã®whileループã§ã‚¹ãƒšãƒ¼ã‚¹ã‚ãƒ¼ãŒæŠ¼ã•ã‚ŒãŸæ™‚点ã§Falseã‚’æ ¼ç´ã—ã¦ã„る。 ãã®ã¾ã¾120行目ã¾ã§waitingKeyPressã«ä½•も代入ã—ã¦ã„ãªã„ã‚“ã ã‹ã‚‰ã€120行目ã®whileループã¯ã„ããªã‚ŠwaitingKeyPressãŒFalseã®çŠ¶æ…‹ã‹ã‚‰å§‹ã¾ã‚‹ã€‚ **B:** ã‚ãï¼ **A:** 120行目ã®whileループã«å…¥ã‚‹å‰ã«waitingKeyPressã«Trueを代入ã—ã¦ã„ãªã‹ã£ãŸã®ãŒå¤±æ•—ã ã。 **B:** ã†ãƒ¼ã€‚リーディングスパンテストã®ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰ã‚³ãƒ”ーã—ã¦ããŸæ™‚ã«1行コピーã—忘れã¦ã¾ã—ãŸã€‚ **A:** ã¯ã¯ã€‚よãã‚るミスã 。一度書ã„ãŸãƒ—ãƒã‚°ãƒ©ãƒ ã¯ã©ã‚“ã©ã‚“使ãˆã£ã¦æ•™ãˆãŸã‘ã©ã€ã‚³ãƒ”ー&ペーストをã™ã‚‹ã¨æ™‚々ã“ã†ã„ã†å¤±æ•—ã‚’ã™ã‚‹ã‚“ã よãªã€‚ å¿…è¦ãªè¡Œã‚’コピーã—忘れãŸã‚Šã€ã‚³ãƒ”ー元ã¨ã‚³ãƒ”ー先ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§åŒã˜åå‰ã®å¤‰æ•°ã‚’é•ã†ç”¨é€”ã§ä½¿ã£ã¦ã„ãŸã‚Šã€‚åŒã˜åå‰ã‚’é•ã†ç”¨é€”ã§ã£ã¦ãƒŸã‚¹ã¯aã¨ã‹xã¿ãŸã„ãª1æ–‡å—ã®å¤‰æ•°ã‚„tempã¿ãŸã„㪠一時的ã«ä½¿ã†å¤‰æ•°ã§ã‚ˆãã‚るパターンã 。 **B:** ã†ã†ã€‚119行目㫠waitingKeyPress = True ã‚’è¿½åŠ ã—ãŸã‚‰ã†ã¾ãå‹•ãã¾ã—ãŸâ€¦ã€‚ **A:** ã“れã‹ã‚‰ã¯æ°—ã‚’ã¤ã‘ãªã•ã„…ã¨ã„ã†ã®ã¯ç°¡å˜ã ãŒã€ä½•カ月もå‰ã«æ›¸ã„ãŸãƒ—ãƒã‚°ãƒ©ãƒ ã®è©³ç´°ãªã‚“ã¦è¦šãˆã¦ã„られるã‚ã‘ã‚‚ãªã„ã—ã€ã§ãã‚‹ã ã‘é–“é•ãˆã«ãã„よã†ã«ãƒ—ãƒã‚°ãƒ©ãƒ を工夫ã™ã‚‹ã®ãŒæ£ã—ã„。 **B:** 工夫ã£ã¦ã€å…·ä½“çš„ã«ã©ã†ã™ã‚‹ã‚“ã§ã™ã‹ã€‚ **A:** ã¾ã‚ãã“ãŒå•題ãªã‚“ã ãŒã€‚今回ã¯é–¢æ•°ã®ä½œã‚Šæ–¹ã‚’æ•™ãˆã¦ãŠã“ã†ã‹ã€‚よãä½¿ã†æ©Ÿèƒ½ã‚’関数ã«ã¾ã¨ã‚ã¦ãŠãã¨ã€ä»Šå›žã®ã‚ˆã†ãªé–“é•ã„ã¯å°‘ãªããªã‚‹ã€‚ **B:** 関数? 関数ã£ã¦è‡ªåˆ†ã§ä½œã‚Œã‚‹ã‚“ã§ã™ã‹ï¼Ÿ **A:** 最åˆã«èª¬æ˜Žã—ãªã‹ã£ãŸã£ã‘ã‹ã€‚Bå›ãŒãƒ—ãƒã‚°ãƒ©ãƒ ã§ä½¿ã£ã¦ã„る関数ã¯ã¿ã‚“ãªèª°ã‹ãŒä½œã£ã¦ãれãŸã‚ã‘ã§ã€èª°ã§ã‚‚関数を作るã“ã¨ãŒå‡ºæ¥ã‚‹ã€‚pythonã§é–¢æ•°ã‚’作るã«ã¯defã¨ã„ã†äºˆç´„語を使ã†ã€‚ :: def 関数å( 引数 ): # 関数ã®å‡¦ç†å†…容 **B:** …ã“れã ã‘? **A:** ãã†ã€‚ã“れã ã‘。簡å˜ãªä¾‹ã‚’出ãã†ã‹ã€‚「xã®4ä¹—ã¨yã®2ä¹—ã®å’Œã‚’計算ã™ã‚‹ã€é–¢æ•°ã‚’作ã£ã¦ã¿ã‚ˆã†ã€‚ **B:** ã“れã¾ãŸå–ã£ã¦ã¤ã‘ãŸã‚ˆã†ãªä¾‹ã§ã™ã。発想ãŒè²§å›°ãªã€‚ **A:** ã»ã£ã¨ã‘。 .. code-block:: python :linenos: # -*- coding:shift_jis -*- import time def foo(x,y): ans = x**4 + y**2 return ans x = 3 y = 4 print u'%dã®4ä¹—ã¨%dã®2ä¹—ã®å’Œã¯%fã§ã™ã€‚' % (x, y, foo(x,y)) time.sleep(5.0) **A:** ä»®ã«ã‚µãƒ³ãƒ—ル1ã¨ã—ã¦ãŠã“ã†ã‹ãªã€‚çŸã„プãƒã‚°ãƒ©ãƒ ãªã®ã§ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¯ç”¨æ„ã—ã¦ãªã„。自分ã§å…¥åŠ›ã—ã¦ã¿ã‚‹ã“ã¨ã€‚Unixç³»OSãªã©ã§æ–‡å—コードãŒShift-JISã˜ã‚ƒãªã„人ã¯1行目を変更ã—ã¦ã。 **B:** 11行目ã®time.sleep(5.0)ã£ã¦ä½•ã§ã™ã‹ï¼Ÿ **A:** å¼•æ•°ã§æŒ‡å®šã—ãŸæ™‚é–“ã ã‘プãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œã‚’åœæ¢ã—ãªã•ã„ã¨ã„ã†é–¢æ•°ã 。å˜ä½ã¯ç§’。 **B:** ã‚れã€å‰ã«ã‚‚ãã‚“ãªé–¢æ•°ã‚りã¾ã›ã‚“ã§ã—ãŸã£ã‘。 **A:** pygame.time.wait( )関数ã®ã“ã¨ã‹ãª(注:例題02-2)。引数ã®å˜ä½ãŒé•ã†ãŒã¾ã‚ä¼¼ãŸã‚ˆã†ãªã‚‚ã‚“ã 。 多分pygame.time.wait()ã®æ–¹ãŒç²¾åº¦ãŒé«˜ã„ã¨æ€ã†ã‚“ã ãŒã€ç¢ºèªã—ãŸã“ã¨ã¯ãªã„ãªã€‚今回ã¯ã‚ã–ã‚ã–pygameã‚’importã™ã‚‹ã¾ã§ã‚‚ãªã„ã®ã§time.sleep()を使ã£ã¦ã¿ãŸã€‚ **B:** ã†ãƒ¼ã‚“ã€ãã®åŒã˜ã“ã¨ã‚’ã™ã‚‹ã®ã™ã‚‹æ–¹æ³•ãŒä½•通りもã‚ã‚‹ã£ã¦ã®ãŒæœªã ã«ãªã˜ã‚ã¾ã›ã‚“。 **A:** ã¾ã‚ãã†è¨€ã†ãªã€‚ã¨ã«ã‹ãã“ã®ã‚µãƒ³ãƒ—ル1ã§é‡è¦ãªã®ã¯4行目ã‹ã‚‰6行目。4行目㮠**def** foo(x,y): ã¨ã„ã†ã®ãŒã€Œã“れã‹ã‚‰fooã¨ã„ã†é–¢æ•°ã‚’定義ã—ã¾ã™ã€ã¨ã„ã†å®£è¨€ã 。 **B:** fooã£ã¦ã¾ãŸãƒ†ã‚トーãªâ€¦ **A:** ã„ã‚„ã€ã¾ã˜ã‚ãªè©±ã€ã“ã†ã„ã†ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ ã§ã¯æ„味ã‚りã’ãªåå‰ã‚’使ã†ã¨ã‹ãˆã£ã¦æ··ä¹±ã™ã‚‹ã®ã§ã€ ç„¡æ„味ãªå˜èªžã¨ã—ã¦fooやらbarやらを使ã†äº‹ãŒä¸€èˆ¬çš„ãªã‚“ã 。興味ãŒã‚ã£ãŸã‚‰ã€ŒRFC3092ã€ã¨ã‹ã€Œãƒ¡ã‚¿æ§‹æ–‡å¤‰æ•°ã€ã§æ¤œç´¢ã—ã¦ã¿ãŸã¾ãˆã€‚ **B:** ã¸ãƒ¼ã€‚ **A:** 脱線ã—ã¦ã—ã¾ã£ãŸãªã€‚話を戻ã™ã¨ã€defã®æ¬¡ã«ç¶šã語ãŒé–¢æ•°ã®åå‰ã€ã‚«ãƒƒã‚³ã®ä¸ãŒå¼•æ•°ã 。ã ã‹ã‚‰ã“ã“ã§å®šç¾©ã•れる関数fooã¯xã¨yã¨ã„ã†äºŒã¤ã®å¼•æ•°ã‚’æŒã¤ã“ã¨ã«ãªã‚‹ã€‚ **B:** ãµã‚€ãµã‚€ã€‚ **A:** 5行目ã‹ã‚‰ãŒé–¢æ•°ãŒå‘¼ã³å‡ºã•ã‚ŒãŸæ™‚ã«è¡Œã†å‡¦ç†ã 。forã¨ã‹whileã¨ã„ã£ãŸæ§‹æ–‡ã¨åŒã˜ã‚ˆã†ã«ã€defæ–‡ã®ç›´å¾Œã®å—下ã’ã•れãŸè¡Œã‚’関数ã®ä¸èº«ã¨ã—ã¦è§£é‡ˆã™ã‚‹ã€‚ã“ã®ã‚µãƒ³ãƒ—ルã§ã¯6行目ã¾ã§ã ãªã€‚ 5行目ã§xã®4ä¹—ã¨yã®2乗を計算ã—ã¦ã€ansã¨ã„ã†å¤‰æ•°ã«æ ¼ç´ã—ã¦ã„る。6行目㮠**return** ansã¯å¤‰æ•°ansã‚’fooã®æˆ»ã‚Šå€¤ã¨ã—ã¦é–¢æ•°fooã®å‡¦ç†ã‚’終了ã—ãªã•ã„ã¨ã„ã†æŒ‡ç¤ºã 。 **B:** 関数を終了ã™ã‚‹ã«ã¯returnを使ãˆã°ã„ã„ã‚“ã§ã™ã。 **A:** ã„ã‚„ã€æˆ»ã‚Šå€¤ãŒå¿…è¦ãªã‘れã°returnã¯ãªãã¦ã‚‚ã„ã„。defã«ç¶šãå—下ã’ã•れãŸè¡Œã®å‡¦ç†ã‚’ã™ã¹ã¦çµ‚ãˆãŸã‚‰é–¢æ•°ã¯è‡ªå‹•çš„ã«çµ‚了ã™ã‚‹ã€‚ ã¤ã„ã§ã«è©±ã—ã¦ãŠãã¨ã€ä»Šã¾ã§ã®ã‚µãƒ³ãƒ—ルã§swap_buffers()ãªã©å¼•æ•°ãŒãªã„関数ãŒãŸãã•ん出ã¦ããŸãŒã€å¼•æ•°ãŒãªã„関数を定義ã™ã‚‹å ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ã«é–¢æ•°åã«ç¶šã( )ã®ä¸ã‚’空白ã«ã—ã¦ãŠã‘ã°ã„ã„。 :: def bar(): # 関数barã®å‡¦ç† **A:** 以上をè¸ã¾ãˆã¦ã€ã‚µãƒ³ãƒ—ル1ã®å‡¦ç†ã®æµã‚Œã‚’図ã«ã™ã‚‹ã¨ã“ã‚“ãªæ„Ÿã˜ã‹ãªã€‚ .. figure:: img/05-1-01.png **B:** 今ã¾ã§ã¯1行目ã‹ã‚‰é †ã«é€²ã‚“ã§ã„ãã ã‘ã ã£ãŸã®ã«ã€æˆ»ã‚‹ã‚“ã§ã™ã。ã¡ã‚‡ã£ã¨ã‚„ã‚„ã“ã—ãã†ã€‚ **A:** ã¾ã‚今ã¾ã§ã‚‚whileæ–‡ãªã©ã§ã¯å‡¦ç†ãŒå‰ã®è¡Œã¸æˆ»ã£ã¦ã„ãŸã‚ã‘ã ãŒã。確ã‹ã«ä»Šã¾ã§ã®ãƒ—ãƒã‚°ãƒ©ãƒ より処ç†ã®æµã‚Œã¯è¤‡é›‘ã«ãªã‚‹ã€‚ ã“ã“ã§ã¤ã„ã§ã«è¨€ã£ã¦ãŠãã¨ã€pythonã§ã¯é–¢æ•°fooãŒå‘¼ã³å‡ºã™å‰ã«ã€pythonインタプリタãŒã™ã§ã«fooã¨ã„ã†é–¢æ•°ãŒã©ã“ã«å®šç¾©ã•れã¦ã„ã‚‹ã®ã‹çŸ¥ã£ã¦ã„ãªã‘れã°ã„ã‘ãªã„。 ã ã‹ã‚‰ã€ã“ã®ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ ã§4ã‹ã‚‰6行目ã®é–¢æ•°ã®å®šç¾©ã‚’10行目より後ã‚ã«æŒã£ã¦ãã‚‹ã¨ã€ã€Œfooãªã‚“ã¦é–¢æ•°ã¯çŸ¥ã‚‰ãªã„ã€ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒå‡ºã‚‹ã€‚ 難ã—ã„ã¨æ€ã†ã‹ã‚‚ã—れãªã„ãŒã€å¤‰æ•°ã«å€¤ã‚’代入ã™ã‚‹å‰ã«å‚ç…§ã—よã†ã¨ã—ãŸã‚‰ã€Œãã‚“ãªå¤‰æ•°ã¯çŸ¥ã‚‰ãªã„ã€ã¨æ€’られるã®ã¨åŒã˜ã“ã¨ã 。 **B:** ãªã‚‹ã»ã©ã€‚ **A:** ã•ã¦ã€ã“ã“ã‹ã‚‰ãŒã„よã„よ本題ã 。 **関数ã®ä¸ã§å®£è¨€ã•れãŸå¤‰æ•°ã¯ã€é–¢æ•°ã®ä¸ã§ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã‚りã€é–¢æ•°ã®å¤–部ã«å½±éŸ¿ã‚’åŠã¼ã•ãªã„** 。 変数ãŒãƒ—ãƒã‚°ãƒ©ãƒ ã®ã©ã®éƒ¨åˆ†ã‹ã‚‰åˆ©ç”¨å¯èƒ½ã§ã‚ã‚‹ã‹ã¨ã„ã†ç¯„囲を変数㮠**スコープ(scope)** ã¨ã„ã†ã€‚ **B:** ã¸ï¼Ÿï¼Ÿï¼Ÿ ãªã‚“ã§ã™ã‹ã€ã„ããªã‚Šã€‚ **A:** 関数fooã®ä¸ã§ä½¿ã‚れã¦ã„ã‚‹xã€yã€ansã¨ã„ã†å¤‰æ•°ã¯fooã®ä¸ã§ã ã‘æœ‰åйã§ã‚りã€fooã®å¤–ã§xã€yã€ansã¨ã„ã†å¤‰æ•°ãŒä½¿ã‚れã¦ã„ã¦ã‚‚ã€ãã®å€¤ã«å½±éŸ¿ã‚’åŠã¼ã•ãªã„ã¨ã„ã†ã“ã¨ã 。 ã‚ã‹ã‚Šã«ãã„ã¨æ€ã†ã®ã§ã‚µãƒ³ãƒ—ルプãƒã‚°ãƒ©ãƒ ã‚’ã¡ã‚‡ã£ã¨ã„ã˜ã£ã¦ã¿ã‚ˆã†ã€‚サンプル2ã。 .. code-block:: python :linenos: # -*- coding:shift_jis -*- import time def foo(x,y): ans = x**4 + y**2 print u'fooã®å†…部: x=%d, y=%d, ans=%d' % (x,y,ans) return ans x = 0; y=2; ans = 4 print u'fooã®å‘¼ã³å‡ºã—å‰: x=%f, y=%f, ans=%f' % (x,y,ans) foo(7, 6) print u'fooã®å‘¼ã³å‡ºã—後: x=%f, y=%f, ans=%f' % (x,y,ans) time.sleep(5.0) **A:** 主ãªå¤‰æ›´ç‚¹ã¯6行目ã€10行目ã€14行目ã§å¤‰æ•°ã«æ ¼ç´ã•れãŸå€¤ã‚’printæ–‡ã§å‡ºåŠ›ã—ã¦ã„ã‚‹ã“ã¨ã€‚ ãã—ã¦12行目ã§foo()を呼ã³å‡ºã™ã¨ãã«ã€xã«7ã€yã«6を与ãˆã¦ã„ã‚‹ã“ã¨ã 。実行ã—ã¦ã¿ãªã•ã„。 **B:** ãˆãˆã¨ã€‚ :: fooã®å‘¼ã³å‡ºã—å‰: x=0, y=2, ans=4 fooã®å†…部: x=7, y=6, ans=2437 fooã®å‘¼ã³å‡ºã—後: x=0, y=2, ans=4 **A:** OK。サンプル2ã§ã¯9行目ã§x=0, y=2, ans=4ã¨ä»£å…¥ã—ã¦ã„ã‚‹ã‚“ã ã‹ã‚‰ã€ fooを呼ã³å‡ºã™å‰ã§ã‚ã‚‹10行目ã§ã“れらã®å¤‰æ•°ã®å€¤ã‚’printã—ãŸã‚‰x=0, y=2, ans=4ã¨å‡ºåŠ›ã•れる。ã“れã¯å½“ç„¶ã ã。 å•é¡Œã¯æ¬¡ã ãŒã€12行目ã§x=7ã€y=6ã®å¼•æ•°ã§é–¢æ•°fooを呼ã³å‡ºã—ã€4行目ã«å‡¦ç†ãŒç§»ã‚‹ã€‚5行目ã§x**4+y**2ãŒè¨ˆç®—ã•れるã‚ã‘ã ãŒã€ ã“ã®xã¨yã¯ãれãžã‚Œfooã®å‘¼ã³å‡ºã—ã®æ™‚ã«æ¸¡ã•れãŸ7ã¨6ãªã®ã§ã€7**4+2**2ã¨ãªã£ã¦ç”ãˆã¯2437。ã—ãŸãŒã£ã¦ansã¯2437。 **B:** 7**4+2**2ã‚’æš—ç®—ã§ãã‚‹ãªã‚“ã¦ã€Aã•ん変人ã§ã™ã‹ï¼Ÿ **A:** æš—ç®—ã‚‚ãªã«ã‚‚ã€å‡ºåŠ›çµæžœã«ans=2437ã£ã¦å‡ºã¦ã‚‹ã˜ã‚ƒãªã„ã‹ã€‚ã¨ã‚‚ã‹ãã€7行目ã§returnã—ã¦12è¡Œç›®ã«æˆ»ã‚‹ã€‚ ãã—ã¦14行目ã§ã¾ãŸxã€yã€ansã®å€¤ã‚’出力ã™ã‚‹ã‚ã‘ã ãŒã€ã•ã£ã言ã£ãŸã‚ˆã†ã«fooã®ä¸ã§xã€yã€ansã«åŠ ãˆãŸå¤‰æ›´ã¯fooã®å¤–ã«å½±éŸ¿ã—ãªã„。 ã ã‹ã‚‰fooãŒå‘¼ã³å‡ºã•れるå‰ã«x=0, y=2, ans=4ã¨ä»£å…¥ã—ã¦ãŠã„ãŸã‚‚ã®ãŒãã®ã¾ã¾ã®æ®‹ã£ã¦ã„る。ã ã‹ã‚‰printã«ã‚ˆã‚‹å‡ºåŠ›ã¯fooã®å‘¼ã³å‡ºã—å‰ã¨å¤‰åŒ–ã—ã¦ã„ãªã„。 **B:** ã†ãƒ¼ã‚“。ã‚ã‹ã£ãŸã‚ˆã†ãªã‚ã‹ã‚‰ãªã„よã†ãªã€‚ **A:** ãµã‚€ã€‚ã©ã†è¨€ãˆã°ã‚ã‹ã‚Šã‚„ã™ã„ã ã‚ã†ãªã€‚マンションãŒä½•棟ã‹ã‚ã£ã¦ã€1å·é¤¨ã®305å·å®¤ã«è·ç‰©ã‚’é‹ã³è¾¼ã‚“ã§ã‚‚2å·é¤¨ã‚„3å·é¤¨ã®305å·å®¤ã«ã¯ä½•も影響ãŒãªã„ã ã‚? 関数ã¨ã„ã†ã®ã¯ã€ãれãžã‚Œãƒžãƒ³ã‚·ãƒ§ãƒ³ã®åˆ¥ã®æ£Ÿã®ã‚ˆã†ãªã‚‚ã®ãªã‚“ã よ。fooã¨ã„ã†é–¢æ•°ã®å¤‰æ•°xã¨ã€barã¨ã„ã†é–¢æ•°ã®å¤‰æ•°xã¯ã€1å·é¤¨ã®201å·å®¤ã¨2å·é¤¨ã®201å·å®¤ã®ã‚ˆã†ãªã‚‚ã®ã§ã€ åŒã˜ã€Œxã€ã§ã‚‚å…¨ã別ã®ã‚‚ã®ãªã‚“ã 。 **B:** ãµã‚€ãµã‚€ã€‚ **A:** ãã—ã¦ã€æ–‡è„ˆä¸Š4å·é¤¨ã®è©±ã‚’ã—ã¦ã„ã‚‹ã®ãŒæ˜Žã‚‰ã‹ãªã‚‰ã€ã€Œ203å·å®¤ã€ã¨è¨€ã£ãŸã‚‰4å·é¤¨ã®203å·å®¤ã‚’指ã—ã¦ã„ã‚‹ã®ã¨åŒã˜ã‚ˆã†ã«ã€ プãƒã‚°ãƒ©ãƒ ã®ä¸ã§ã¯å˜ã«å¤‰æ•°xã¨è¨€ãˆã°ã€ã©ã“ã®xãªã®ã‹ãŒæ–‡è„ˆã§æ±ºã¾ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„る。ã‚る関数ã®å†…部ã«ã„る時ã«ã€ãã®é–¢æ•°ã®å†…部ã ã‘ã§é€šç”¨ã™ã‚‹å¤‰æ•°ã‚’ **ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°** ã¨è¨€ã„〠プãƒã‚°ãƒ©ãƒ ã®å…¨åŸŸã§é€šç”¨ã™ã‚‹å¤‰æ•°ã‚’ **ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°** ã¨è¨€ã†ã€‚ã“ã®æ–‡è„ˆãŒã•ã£ã言ã£ãŸã€Œã‚¹ã‚³ãƒ¼ãƒ—ã€ã«è©²å½“ã™ã‚‹ã‹ãªã€‚ .. figure:: img/05-1-02.png **B:** ã¶ã€æ–‡è„ˆã§ã™ã‹ï¼Ÿ ã¾ãŸã‚ã‹ã‚‰ãªããªã£ã¦ããŸã‚ˆã†ãªâ€¦ **A:** 通常ãªã‚‰ã“ã“ã§ã€Œã‚¹ã‚³ãƒ¼ãƒ—ã¨ã„ã†ã®ã¯â€¦ã€ã¨èª¬æ˜Žã‚’ç¶šã‘ãŸã„ã¨ã“ã‚ã ãŒã€æ£ç›´pythonã®ã‚¹ã‚³ãƒ¼ãƒ—ã¯ã¡ã‚‡ã£ã¨ã‚„ã‚„ã“ã—ã„ã®ã§ã€ã“ã“ã§ã¯ãã¡ã‚“ã¨èª¬æ˜Žã—ãªã„。 機会ãŒã‚れã°ã„ãšã‚Œãã¡ã‚“ã¨èª¬æ˜Žã™ã‚‹ã‘ã©ã€æ°—ã«ãªã‚‹ã‚“ãªã‚‰ãƒžãƒˆãƒ¢ãªpythonã®æ•™ç§‘書をèªã‚“ã§ãれãŸã¾ãˆã€‚ **B:** ã‚ã€ä¹…々ã«ç„¡è²¬ä»»ç™ºè¨€ãŒå‡ºã¾ã—ãŸã。 **A:** ã¾ã‚ **ä»–ã®ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã§ã‚¹ã‚³ãƒ¼ãƒ—ã®çŸ¥è˜ãŒã‚る人å‘ã‘** ã«ç°¡å˜ã«è¨€ã£ã¦ãŠãã¨ã€ pythonã§ã¯é–¢æ•°ã‚’実行ã™ã‚‹ã¨ãã«é–¢æ•°å†…ã§ãƒãƒ¼ã‚«ãƒ«ã«å®šç¾©ã•れã¦ã„ãªã„変数xã‚’å‚ç…§ã—よã†ã¨ã™ã‚‹ã¨ã€ãã®å¤‰æ•°ã¯ã‚°ãƒãƒ¼ãƒãƒ«ãªå¤‰æ•°ã§ã‚ã‚‹ã¨è§£é‡ˆã•れる。 ãŸã ã—ã€é–¢æ•°å†…ã§å¤‰æ•°xã«å¯¾ã—ã¦ä»£å…¥ãŒè¡Œã‚れã¦ã„ã‚‹å ´åˆã€ãã®å¤‰æ•°ã¯ãƒãƒ¼ã‚«ãƒ«ã§ã‚ã‚‹ã¨è§£é‡ˆã•れる。ã ã‹ã‚‰ã€é–¢æ•°å†…ã§xã«ä»£å…¥ã‚’行ã£ã¦ã„ã‚‹ã®ã«ã€ãã®ä»£å…¥ã®å‰ã« xã‚’å‚ç…§ã—よã†ã¨ã™ã‚‹ã¨ã€Œxã¨ã„ã†ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°ã¯å˜åœ¨ã—ãªã„ã€ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã€‚ã©ã†ã—ã¦ã‚‚関数内ã§ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã¸ä»£å…¥ã‚’行ã„ãŸã„時ã¯globalã¨ã„ã†äºˆç´„語を使ã£ã¦ãã®å¤‰æ•°ãŒã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã§ã‚ã‚‹ã“ã¨ã‚’宣言ã—ãªã‘れã°ã„ã‘ãªã„。 **B:** … (ã½ã‹ãƒ¼ã‚“) **A:** ã“れã‹ã‚‰ãƒ—ãƒã‚°ãƒ©ãƒ ã‚’å¦ã¶äººå‘ã‘ã«è¨€ã†ã¨ã€ **関数内ã§ä½¿ã†å¤‰æ•°ã¯ã™ã¹ã¦ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°ã«ã™ã‚‹ã¤ã‚‚りã§ã„ãªã•ã„** 。 ã‚‚ã¨ã‚‚ã¨ä»Šå›žã®è©±ã¯ã€Œæ–°ã—ãプãƒã‚°ãƒ©ãƒ ã‚’æ›¸ãæ™‚ã«ã€ä»¥å‰æ›¸ã„ãŸãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰å®‰å…¨ã«ã‚³ãƒ”ーã—ã¦ãã‚‹ã€ã¨ã„ã†ã¨ã“ã‚ã‹ã‚‰å§‹ã¾ã£ãŸã‚ã‘ã ã‘ã©ã€ ã“ã®ç›®çš„ã«é–¢ã—ã¦è¨€ãˆã°ã€é–¢æ•°ã®å¤–ã«ã‚る変数ã«ä½•ãŒåŽã‚られã¦ã„ã‚‹ã‹ã‚’剿ã¨ã—ãŸãƒ—ãƒã‚°ãƒ©ãƒ ã¯ã‚³ãƒ”ーã®å¤±æ•—ã‚’æ‹›ãã‚„ã™ã„。ã©ã®å¤‰æ•°ã‚’一緒ã«ã‚³ãƒ”ーã—ãªã„ã¨ã„ã‘ãªã„ã‹ã‚’ 覚ãˆã¦ãŠã‹ãªã„ã¨ã„ã‘ãªã„ã‚ã‘ã ã‹ã‚‰ã。ãれã«ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã‚’使ã‚ãªã„ã¨æ›¸ã‘ãªã„よã†ãªãƒ—ãƒã‚°ãƒ©ãƒ ã¯åˆç´šãƒ¬ãƒ™ãƒ«ã§ã¯ã¾ãšå‡ºã¦ã“ãªã„ã ã‚ã†ã—。 **B:** (æ„è˜ã‚’失ã„ã¤ã¤ã‚ã‚‹) **A:** …ã£ã¨ã€‚ã¤ã„具体的ãªå¿ƒç†å®Ÿé¨“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®è©±ã‹ã‚‰é›¢ã‚Œã™ãŽãŸã‹ãªã€‚ãŠãƒ¼ã„ã€‚çœ ã„ã‚“ãªã‚‰ä»Šæ™©ã¯ã“ã“ã§çµ‚ã‚りã«ã—ã¦å¸°ã‚‹ã‹ãƒ¼ï¼Ÿ **B:** ã¯ã£ã€‚ã‚‚ã†å°‘ã—ã§å¯ã‚‹ã¨ã“ã§ã—ãŸã€‚明日ã¯è¬›ç¾©ã‚‚ãƒã‚¤ãƒˆã‚‚ãªã„ã‚“ã§æ™‚é–“ã¯å¤§ä¸ˆå¤«ã§ã™ãŒã€å°é›£ã—ã„話ã¯ãƒ€ãƒ¡ã‹ã‚‚知れã¾ã›ã‚“… **A:** ãµã‚€ã€‚å¿…è¦æœ€å°é™ã®è©±ã¯ã™ã‚“ã ã®ã§ã€å®Ÿéš›ã«Bå›ã®ã‚ー入力待ã¡ãƒ—ãƒã‚°ãƒ©ãƒ を関数ã«ã—ã¦ã¿ã‚ˆã†ã‹ã€‚ **B:** ã‚ã€ãれãªã‚‰æ„è˜ã‚’ä¿ã¦ãã†ã§ã™ã€‚ **A:** よã£ã—ゃ。ã˜ã‚ƒã‚ã‚ー入力待ã¡ã®éƒ¨åˆ†ã‚’æ–°ã—ã„ファイルã«ã‚³ãƒ”ーã—ã¦ã€ã¨ã€‚ã‚ã¨pygameã¨pygame.localsãŒå¿…è¦ã«ãªã‚‹ã‹ã‚‰importã—ã¦ãŠãã‹ã€‚サンプル3。 サンプル3(ãã®1) .. code-block:: python :linenos: #!/usr/bin/env python # -*- coding:shift_jis -*- from pygame import * from pygame.locals import * waitingKeyPress = True while waitingKeyPress: #スペースã‚ãƒ¼ãŒæŠ¼ã•れるã®ã‚’待㤠for e in event.get(): if e.type == KEYDOWN and e.key == K_SPACE: waitingKeyPress = False **A:** ã•ã¦ã€ã“れを関数ã«ã™ã‚‹ã‚ã‘ã ãŒã€é–¢æ•°ã«ã¯æ™®é€šåå‰ãŒå¿…è¦ã 。pythonã§ã¯åå‰ã®ãªã„関数(注:lambda関数)も使ãˆã‚‹ãŒã€ å˜ç´”ãªå¿ƒç†å®Ÿé¨“ã®ãƒ—ãƒã‚°ãƒ©ãƒ を書ãé™ã‚Šã¯ã¾ãšå¿…è¦ãªã„ã¨æ€ã†ã®ã§ãƒ‘ス。åå‰ã¯ä½•ã«ã—よã†ã‹ï¼Ÿ **B:** ãˆã€ã¼ããŒæ±ºã‚ã‚‹ã‚“ã§ã™ã‹ï¼Ÿ ãˆãƒ¼ã¨ã€ã˜ã‚ƒã‚waitkeyã§ã€‚ **A:** waitkeyã。ã§ã¯7行目ã®å‰ã«1è¡Œè¿½åŠ ã—ã¦def waitkey():ã¨å…¥åŠ›ã™ã‚‹ã€‚waitkeyã¨ã„ã†é–¢æ•°ã‚’定義ã™ã‚‹ãžã¨pythonã«æ•™ãˆã¦ã‚„ã‚‹ã‚ã‘ã ã。 ãã—ã¦é–¢æ•°ã®ä¸èº«ã«ã—ãŸã„処ç†ã‚’å—下ã’ã™ã‚‹ã€‚ サンプル3(ãã®2) .. code-block:: python :linenos: #!/usr/bin/env python # -*- coding:shift_jis -*- from pygame import * from pygame.locals import * def waitkey(): waitingKeyPress = True while waitingKeyPress: #スペースã‚ãƒ¼ãŒæŠ¼ã•れるã®ã‚’待㤠for e in event.get(): if e.type == KEYDOWN and e.key == K_SPACE: waitingKeyPress = False **B:** ãµã‚€ãµã‚€ã€‚ **A:** 以上。ã“れã§waitkey関数ã®å®Œæˆã 。 **B:** ã¸ï¼Ÿ ã“れã ã‘? **A:** ã“れã ã‘。動作確èªã®å‡¦ç†ã‚‚è¿½åŠ ã—ã¦ãŠãã‹ã€‚13行目ã‹ã‚‰16行目ãŒè¿½åŠ éƒ¨åˆ†ã 。 サンプル3(完æˆ) .. code-block:: python :linenos: #!/usr/bin/env python # -*- coding:shift_jis -*- from pygame import * from pygame.locals import * def waitkey(): waitingKeyPress = True while waitingKeyPress: #スペースã‚ãƒ¼ãŒæŠ¼ã•れるã®ã‚’待㤠for e in event.get(): if e.type == KEYDOWN and e.key == K_SPACE: waitingKeyPress = False init() display.set_mode((256,256)) waitkey() **B:** init()ã¨display.set_mode((256,256))ã£ã¦ãªã‚“ã§ã™ã‹ï¼Ÿ **A:** ãれãžã‚Œæ£å¼ã«ã¯pygame.init()ã¨pygame.display.set_mode()。10行目ã®event.get()ã¯pygameã®é–¢æ•°ã§ã€pygameã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒé–‹ã„ã¦ã„ãªã„ã¨ä½¿ãˆãªã„。 VisionEggを使ã£ã¦ã„ã‚‹ã¨ãã¯ã€VisionEggãŒpygameã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãれるんã ãŒã€ä»Šå›žã®ã‚µãƒ³ãƒ—ルã§ã¯ã‚ã–ã‚ã–VisionEggを使ã†ã¾ã§ã‚‚ãªã„ã®ã§pygameã®é–¢æ•°ã‚’直接使ã£ãŸã®ã•。 **B:** ã§ã¯ã€ã¨ã‚Šã‚ãˆãšå®Ÿè¡Œã—ã¦ã¿ã¾ã™ã。 .. figure:: img/05-1-03.png **B:** ãªã‚“ã‹çœŸã£é»’ãªå°ã•ã„ウィンドウãŒå‡ºã¦ãã¾ã—ãŸãŒã€‚ **A:** ã“れãŒpygameã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã ã。画é¢ã«ä½•ã‚‚æã‹ãšã«ãŸã スペースã‚ãƒ¼ãŒæŠ¼ã•れるã®ã‚’å¾…ã£ã¦ã‚‹ã®ã•。スペースã‚ーを押ã—ã¦ã¿ãªã•ã„。 **B:** ã‚ã€æ¶ˆãˆã¡ã‚ƒã„ã¾ã—ãŸã€‚ **A:** プãƒã‚°ãƒ©ãƒ 16行目ã®waitkey()ãŒçµ‚了ã—ãŸã‹ã‚‰ãƒ—ãƒã‚°ãƒ©ãƒ 全体ãŒçµ‚了ã—ãŸã®ã•。ã“れã§ãŠã—ã¾ã„。 **B:** ãªã‚“ã ã‹ç´ ã£æ°—ãªã„ã§ã™ã。 **A:** ç”»é¢ã«ã€Œã‚¹ãƒšãƒ¼ã‚¹ã‚ーを押ã—ã¦ãã ã•ã„ã€ã¨ã‹æã‘ã°ã„ã„ã‚“ã ã‚ã†ã‘ã©ã。ãã“ã¾ã§ã‚„ã‚‹ã¨é–¢æ•°ã®ä½œã‚Šæ–¹ä»¥å¤–ã®è§£èª¬ã‚‚ã—ãªãゃã„ã‘ãªããªã‚‹ã‹ã‚‰ãªã€‚ Bå›ã¯ã™ã§ã«VisionEggã®åŸºæœ¬çš„ãªä½¿ã„方を知ã£ã¦ã„ã‚‹ã‚“ã ã‹ã‚‰ã€pygameã˜ã‚ƒãªãã¦VisionEggを使ã£ã¦ã€Œã‚¹ãƒšãƒ¼ã‚¹ã‚ーを押ã—ã¦ãã ã•ã„ã€ã¨ç”»é¢ã«æ›¸ã„ã¦ã‹ã‚‰waitkey()ã™ã‚‹ã‚ˆã†ã«ãƒ—ãƒã‚°ãƒ©ãƒ を書ããªãŠã›ã°ã„ã„。 ã“れ練習å•題ã。 **B:** ã†ã’ー。藪蛇藪蛇。 **A:** ã•ã¦ã€ã“れã ã‘ã§ã¯ã¤ã¾ã‚‰ã‚“ã‹ã‚‰ã€å¼•æ•°ã¨æˆ»ã‚Šå€¤ã®ç·´ç¿’ã‚‚å…¼ãã¦waitkey()関数を拡張ã—よã†ã€‚ ãã‚ãã‚分é‡ã‚‚多ããªã£ã¦ãã¦ãƒ–ラウザã§èªã‚“ã§ãã ã•ã£ã¦ã‚‹æ–¹ã«ã¯ä¸ä¾¿ã ã‚ã†ã‹ã‚‰ã€ã„ã£ãŸã‚“ã“ã“ã§åŒºåˆ‡ã£ã¦ç¶šãã¯ä¾‹é¡Œ5-2ã¨ã—よã†ã€‚ *------------------------------ ã¤ã¥ã ------------------------------*