wx,html 모듈을 이용하는 첫째 소스는 http 프로토콜만 지원하고 https 프로토콜은 지원하지 않습니다.

그러나,  wx,html2 모듈을 이용하는 둘째 소스는 http 프로토콜과 https 프로토콜 모두를 지원합니다.

셋째 소스는 둘째 소스에 네비게이터(뒤로 가기, 앞으로 가기) 가능을 추가한 소스입니다.

[1] wx.html 모듈을 이용한 소스: simple_html_browser.py

# -*- coding: utf-8 -*-
#!/usr/bin/env python

# Filename: simple_html_browser.py
# Execute: python simple_html_browser.py
#    or
# Execute: ./simple_html.browser.py

import wx
import wx.html

class MyHtmlDialog(wx.Dialog):
    def __init__(self, parent, title):
        wx.Dialog.__init__(self, parent, -1, title, size=(600,400))
        html = wx.html.HtmlWindow(self)
        if "gtk2" in wx.PlatformInfo:
            html.SetStandardFonts()

        wx.CallAfter(html.LoadPage, "http://www.google.com")

if __name__ == "__main__":
    app = wx.App()
    dlg = MyHtmlDialog(None, "Simple HTML Browser")
    dlg.ShowModal()
    dlg.Destroy()
    app.MainLoop()

 

[2] wx.html2 모듈을 이용한 소스: simple_html2_browser.py

# -*- coding: utf-8 -*-
#!/usr/bin/env python

# Filename: simple_html2_browser.py
# Execute: python simple_html2_browser.py
#    or
# Execute: ./simple_html2_browser.py

import wx
import wx.html2

class MyHtml2Dialog(wx.Dialog):
    def __init__(self, parent, title):
        wx.Dialog.__init__(self, parent, -1, title, size=(600,400))
        html = wx.html2.WebView.New(self)
        if "gtk2" in wx.PlatformInfo:
            html.SetStandardFonts()

        wx.CallAfter(html.LoadURL, "https://www.google.com")

if __name__ == "__main__":
    app = wx.App()
    dlg = MyHtml2Dialog(None, "Simple HTML2 Browser")
    dlg.ShowModal()
    dlg.Destroy()
    app.MainLoop()

 

 

[3] 위의 둘째 것을 쓸 만 한하게 수정한 웹 브라우저 소스: simple_browser_wk.py

# -*- coding: utf-8 -*-
#!/usr/bin/env python

# Filename: simple_browser_wk.py
#
# Execute: python3 simple_browser_wk.py
#    or
# Execute: pythonw simple_browser_wk.py
#    or
# Execute: ./simple_browser_wk.py
#
# Date: 2020.11.29   Version 0.0.4

import wx 
import wx.html2 

class MyBrowser(wx.Frame): 
    def __init__(self, parent, title): 
        super(MyBrowser, self).__init__(parent, title = title,size = (800,400))  
        sizer = wx.BoxSizer(wx.VERTICAL) 

        hsizer = wx.BoxSizer(wx.HORIZONTAL) 
        emptyText = wx.StaticText(self, -1 , "     ", (10, 10), (10, -1))
        emptyText.SetBackgroundColour('#DDDDDD')
        self.addrText = wx.TextCtrl(self, wx.ID_ANY, value="", size=(300, 30))
        self.addrText.SetFont( wx.Font(12, wx.ROMAN, wx.NORMAL, wx.NORMAL)  )
        self.addrText.SetBackgroundColour('white')
        self.addrText.Bind(wx.EVT_CHAR, self.OnCharEvent)
        self.prevButton = wx.Button(self, 1, '<', (10, 10), (20, -1))
        self.prevButton.Bind(wx.EVT_BUTTON, self.OnPrevButton, id=1)
        self.nextButton = wx.Button(self, 1, '>', (10, 10), (20, -1))
        self.nextButton.Bind(wx.EVT_BUTTON, self.OnNextButton, id=1)
        self.homeButton = wx.Button(self, 1, 'Home', (10, 10), (80, -1))
        self.homeButton.Bind(wx.EVT_BUTTON, self.OnHomeButton, id=1)
        self.exitButton = wx.Button(self, 1, 'Exit', (10, 10), (80, -1))
        self.exitButton.Bind(wx.EVT_BUTTON, self.OnCloseButton, id=1)

        hsizer.Add(self.exitButton, 3, wx.EXPAND, 10) 
        hsizer.Add(self.homeButton, 3, wx.EXPAND, 10) 
        hsizer.Add(self.prevButton, 1, wx.EXPAND, 10) 
        hsizer.Add(self.nextButton, 1, wx.EXPAND, 10) 
        hsizer.Add(self.addrText, 30, wx.EXPAND, 10) 
        hsizer.Add(emptyText, 1, wx.EXPAND, 10) 
        sizer.Add(hsizer, 1, wx.EXPAND, 10) 
        self.browser = wx.html2.WebView.New(self) 
        sizer.Add(self.browser, 20, wx.EXPAND, 10) 
        self.SetSizer(sizer) 
        self.SetSize((800, 700)) 
        self.Bind(wx.html2.EVT_WEBVIEW_NAVIGATED, self.OnNavigated)
        self.OpenWebPage("https://www.google.com")

    def OnCharEvent(self, event):
        keycode = event.GetKeyCode()
        controlDown = event.CmdDown()
        altDown = event.AltDown()
        shiftDown = event.ShiftDown()

        if (not shiftDown) and (not altDown) and (not controlDown) and keycode == 13 :      # [Enter] key
            self.OpenWebPage(self.addrText.GetValue())

    def OnCloseButton(self, event):
        self.Destroy()
        quit()

    def OnHomeButton(self, event):
        self.OpenWebPage("https://scripting.tistory.com")
        event.Skip()

    def OnPrevButton(self, event):
         if self.browser.CanGoBack():
             self.browser.GoBack()
         event.Skip()

    def OnNextButton(self, event):
         if self.browser.CanGoForward():
             self.browser.GoForward()
         event.Skip()

    def OnNavigated(self, event): 
        self.addrText.SetLabel(self.browser.CurrentURL)
        # print(self.browser.CurrentTitle)
        self.SetTitle("SimpleBrowser - {0}".format(self.browser.CurrentTitle))
        event.Skip()

    def OpenWebPage(self, addr): 
        self.browser.LoadURL(addr)
        self.SetTitle("Simpl Browser")
        self.addrText.SetLabel(addr)
        self.Show() 


if __name__ == "__main__":	
    ex = wx.App() 
    f = MyBrowser(None,'Simple Btowser') 
    f.Show()
    ex.MainLoop()
    

 

 

 

 

 

Posted by Scripter

댓글을 달아 주세요

최근(2020년 11월 21일)에 릴리즈 4.1.1이 발표되었습니다.

C++ 언어로 작성된 wxPython은 Python2 와 Python3  모두에 사용가능한

Python의 GUI 래퍼(wrapper)입니다.

 

[1] wxPython 홈페이지

[2] wxPython 4.1.1 설치하기

   처음 설치 명령: pippip install wxPython==4.1.1

   업그레이드 명령: pippip install --upgrade wxPython==4.1.1

 

[3] 설치 후 버전 확인하기

>>> import wx
>>> wx.version()
'4.1.1 msw (phoenix) wxWidgets 3.1.5'
>>> wx.__version__
'4.1.1'

[4] 설치된 wxPython의 버전을 확인하는 GUI 소스

# -*- coding: utf-8 -*-
#!/usr/bin/env python

# Filename: versionGUI.py
#
# Date: 2020.11.28

import wx


class VersionDialog(wx.Dialog):
    def __init__(self, parent, title):
        wx.Dialog.__init__(self, parent, -1, title, size=(475, 240))
        self.sbox = wx.StaticBox(self, -1, 'Version Information', (10, 20), size=(440, 100))        
        self.sbox.SetFont( wx.Font(10, wx.ROMAN, wx.NORMAL, wx.NORMAL)  )
        
        font = wx.Font(11, wx.ROMAN, wx.NORMAL, wx.NORMAL) 
        a = wx.StaticText(self, -1 , "wx.version() = {0}".format(wx.version()), (15, 60))
        a.SetFont( font )
        b = wx.StaticText(self, -1 , "wx.__version__ = %s" % wx.__version__, (15, 85))
        b.SetFont( font )
        
        wx.StaticLine(self, 1,  (15, 145), (430, 2))
        wx.Button(self, 1, 'Okay', (340, 165), (100, -1))
        self.Bind(wx.EVT_BUTTON, self.OnClose, id=1)

    def OnClose(self, event):
        self.Destroy()
        quit()


if __name__ == "__main__":
    app = wx.App()
    dia = VersionDialog(None, "Version of wxPython")
    dia.ShowModal()
    if dia != None:
        dia.Destroy()
    app.MainLoop()

실행 결과:

 

 

 

Posted by Scripter

댓글을 달아 주세요

아래의 글은 MS의 유닛 테스트 적성하기 문서에 오류가 있어 바로 잡기 위한 글입니다.

유닛 테스트하는 도구로는 MSTest, NUnit, xUnit 등 몇 가지가 있는데

이 중에 MSTest를 이용하여 유닛 테스트하는 예를 작성해 보고자 한다.

컨솔 창에 Hello World! 라는 문구가 정상적으로 출력되는지 알아보는 유닛 테스트이다.

Visual Studio 2019 의 메뉴에서 "파일(F)" -> "새로 만들기" -> "프로젝트(P)"를 선택하고, "새 프로젝트 만들기" 창에서아래와 같이 선택하고 "다음(N)" 버큰을 클릭한다.

<새 프로젝트 만들기 창>

 

다음에 프로젝트 이름과 폴토를 선택하는 창에서 아래와 같이 "프로젝트 이름(N)" 입력 난에 HelloWorldTests 라고 입력하고, 그 아래 항목 "위치(L)" 난에서 적당한 폴더를 선택해 준다.

그리고 "다름(N)" 바튼을 클릭하면  Visual Studio 가 소스 작성하는 환경으로 된다.

 

<새 프로젝트 구성 창>

그리고 "다름(N)" 바튼을 클릭하면 Visual Studio 가 소스 작성하는 환경으로 된다.

이제 C# 소스 UnitTest1.cs 를 작성하는 곳의 소스를 다음 처럼 작성한다.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using System;

namespace HelloWorldTests
{
    [TestClass]
    public class UnitTest1
    {
        private const string Expected = "Hello World!";
        [TestMethod]
        public void TestMethod1()
        {
            using (var sw = new StringWriter())
            {
                Console.SetOut(sw);
                HelloWorldTests.Program.SayHello();

                var result = sw.ToString().Trim();
                Assert.AreEqual(Expected, result);
            }
        }
    }

    class Program
    {
        public static void SayHello()
        {
            Console.WriteLine("Hello World!");
        }
    }
}

 

소스기 잘 작성되었으면 Visual Studio 의 메뉴에서 "빌드(B)" -> "솔루션 다시 빌드(R)" 을 선택하여

솔루션을 빌드한다.

빌드가 성공되면 아래 그림 처럼 Visual Studio의 메뉴에서 "테스트(S)" -> "테스트 탐색기(T)"를 선택한다.

<테스트 탐색기(T) 선택 메뉴>

 

아래의 테스트 탐색기 창의 도구바 메뉴 중에 가장 좌측에 있는 도구 버튼을 누르고 참시 기다리면 성공한 결과가 아래 처럼 나온다.

 

<유닛 테스트가 성공한 결과>

Posted by Scripter

댓글을 달아 주세요

 

VisualStudio 2019 의 메뉴에서 "도구(T)" -> "명령줄(L)" -> "개발자 PowerShell(P)" 을 선택하거나

윈도우 10에서 '윈도우 키' + 'R' 을 누른 다음 명령어 입력 난에 powershell 을 입력하여

나타난 PowerShell 창에서 다음을 입력한다.

 

function multarrays($a, $b) {
    $n,$m,$p = ($a.Count - 1), ($b.Count - 1), ($b[0].Count - 1)
    if ($a[0].Count -ne $b.Count) {throw "Multiplication impossible"}
    $c = @(0)*($a[0].Count)
    foreach ($i in 0..$n) {    
        $c[$i] = foreach ($j in 0..$p) { 
            $sum = 0
            foreach ($k in 0..$m){$sum += $a[$i][$k]*$b[$k][$j]}
            $sum
        }
    }
    $c
 }
 
function show($a) { $a | foreach{"$_"}}

 

계속해서 다음을 입력한다.

$a = @(@(1,2),@(3,4))
$b = @(@(5,6),@(7,8))
$c = @(5,6)

 

이제 다음을 한 줄씩 입력하면 각각의 곱셈 결과가 표시된다.

"`$a ="; show $a
""
"`$b ="; show $b
""
"`$c ="; $c
""
"`$a * `$b ="; show (multarrays $a $b)
""
"`$a * `$c ="; show (multarrays $a $c)

 

 

[참고 자료] Rosetta Code - Matrix Mulriplication

Posted by Scripter

댓글을 달아 주세요

 

C 언어나 C++ 언어에는 세제곱근을 구하는 함수 cbrt() 가 기본적으로 제공되어 있다.

소스에서 단지 #include <math.h> 또는 #include <cmath> 를 추가하기만 된다.

그러나 C# 언어에는 이런 함수가 기본적으로 제공되지 있지 않다. (Framework 의 경우)

그런데 Core 3.0 이상의 경우에는 C# 언어에서도 제곱근 함수 Sqrt() 와 세제곱근 함수 Cbrt() 를

기본적으로 사용할 수 있다. 

using System.Math;  구문이 없더라도 쓸 수 있다.

 

Visual Studion 2019에서 "새 프로젝트 만들기" -> "콘솔 앱(.NET Core)" 하고

프로젝트 이름을 적당히 써 주고 C# 소스 Progam.cs 를 편집하는 창에서

Main() 함수 부분을 다음과 같이 수정하고 빌드하여 실행한다.

 

static void Main(string[] args)
{
    // Calculate the cubic root of a single preceson type.
    float x = 27f;
    float y = MathF.Cbrt(x);
    Console.WriteLine("Cube root of {0} is {1}", x, y);
    
    // Calculate the cubic root of a double preceson type.
    double x2 = 0.000000000000125;
    double y2 = Math.Cbrt(x2);
    Console.WriteLine("Cube root of {0:F15} is {1:F5}", x2, y2);
    
    Console.Write("Press any key... ");
    Console.ReadLine();
}

 

그러면 컨솔 창에 실행 결과가 다음 처럼 출력된다.

Cube root of 27 is 3
Cube root of 0.000000000000125 is 0.00005
Press any key...

 

 

 

Posted by Scripter

댓글을 달아 주세요

 

 

원시 피타고라스 삼조(primitive pythagorea triplet)를 생성하는

명령줄 어플(Command Line Application) C# 소스

 

C# 소스:

// Filename: GeneratePrimitivePythagoreanTriplets.cs
//
// Compile: csc GeneratePrimitivePythagoreanTriplets.cs
//
// Execute: GeneratePrimitivePythagoreanTriplets 7

using System;
using System.Collections.Generic;

namespace GeneralCommandLineApp
{
   class Program
    {
    	   public static Int64 GetGCD(Int64 xa, Int64 xb)
    	  {
    	  	  Int64 a = Math.Abs(xa);
    	  	  Int64 b = Math.Abs(xb);
    	  	  Int64 c;
    	  	  if (b > a) {
    	  	  	  c = b;
    	  	  	  b = a;
    	  	  	  a = c;
    	  	  }
    	  	  Int64 r;
    	  	  r = b;
    	  	  while (r > 0)
    	  	  {
    	  	  	  r = a % b;
    	  	  	  a = b;
    	  	  	  b = r;
    	  	  }
    	  	  return a;
    	  }

    	  public static void GeneratePrimitivePythagoreanTriplets(List<PythagoreanTriplet> data, Int64 k)
    	  {
    	  	  for (Int64 m = 2; m <= k; m++)
    	  	  {
    	  	      for (Int64 n = 1; n < m; n++)
    	  	      {
    	  	      	     if (GetGCD(m, n) == 1 && ((m % 2 == 0 && n % 2 != 0) || (m % 2 != 0 && n % 2 == 0))) {
    	  	  	         data.Add(new PythagoreanTriplet(m, n));
    	  	  	     }
    	  	      }
    	  	  }
        }

    	  public static void PrintTripletsAsTableForm(List<PythagoreanTriplet> data)
    	  {
    	  	  Int64 k = data.Count;
    	  	  Int64 a, b, c, m, n;
    	  	  Console.WriteLine("Print out some primitive Pythagorean triplets (a, b, c)\neach of which satisfies a^2 + b^2 = c^2.");
    	  	  Console.WriteLine();
    	  	  Console.WriteLine("      +--------+--------+-----------+-----------+-----------+");
    	  	  Console.WriteLine("      |        |        | m^2 - n^2 |     2mn   | m^2 + n^2 |");
    	  	  Console.WriteLine("      |     m  |     n  |      a    |      b    |      c    |");
    	  	  Console.WriteLine("      +--------+--------+-----------+-----------+-----------+");
    	  	  for (int i = 0; i < k; i++) {
    	  	      a = data[i].GetA();
    	  	  b = data[i].GetB();
    	  	  c = data[i].GetC();
    	  	  m = (Int64) Math.Sqrt((a + c)/2);
    	  	  n = b/(2*m);
    	  	  Console.WriteLine("      | {0, 6} | {1, 6} | {2, 9} | {3, 9} | {4, 9} |", m, n, a, b, c);
               }
               Console.WriteLine("      +--------+--------+-----------+-----------+-----------+");
        }

        static void Main(string[] args)
        {
        	Int64 c;
        	if (args.Length == 1) {
                c = Convert.ToInt64(args[0]);
                if (c < 1) {
                     Console.WriteLine("Sorry, you should a positive integer as an upper boud.");
                     return;
                }
                else {
                    List<PythagoreanTriplet> data = new List<PythagoreanTriplet>();
                    GeneratePrimitivePythagoreanTriplets(data, c);
                    PrintTripletsAsTableForm(data);
                    return;
                }
            }
            else
                Console.WriteLine("Usage:  GeneratePrimitivePythagoreanTriplets [UpperBound]");
        }
    }


     class PythagoreanTriplet {
        Int64 a, b, c;
        public PythagoreanTriplet(Int64 m, Int64 n) {
           	this.a = m*m - n*n;
            	this.b = 2*m*n;;
           	this.c = m*m + n*n;
       }
        public Int64 GetA() {
        	return this.a;
        }
        public Int64 GetB() {
        	return this.b;
        }
        public Int64 GetC() {
        	return this.c;
        }

        public override string ToString() {
        	return "(" + this.a + ", " + this.b + ", " + this.c + ")";
        }

        public bool IsPrimitive(Int64 xa, Int64 xb, Int64 xc)
        {
            return GCD(xa, xb, xc) == 1;
        

        public Int64 GCD(Int64 xa, Int64 xb)
        {
            Int64 a = Math.Abs(xa);
            Int64 b = Math.Abs(xb);
            Int64 c;
            if (b > a) {
                c = b;
                b = a;
                a = c;
            }
            Int64 r;
            r = b;
            while (r > 0)
            {
                r = a % b;
                 a = b;
                b = r;
            }
            return a;
        }

        public Int64 GCD(Int64 xa, Int64 xb, Int64 xc)
        {
            Int64 t = GCD(xa, xb);
            Int64 y = GCD(t, xc);
            return y;
        }
    }
}

 

명령 GeneratePrimitivePythagoreanTriplets 7 에 의한 실행 결과:

Print out some primitive Pythagorean triplets (a, b, c)
each of which satisfies a^2 + b^2 = c^2.

      +--------+--------+-----------+-----------+-----------+
      |        |        | m^2 - n^2 |     2mn   | m^2 + n^2 |
      |     m  |     n  |      a    |      b    |      c    |
      +--------+--------+-----------+-----------+-----------+
      |      2 |      1 |         3 |         4 |         5 |
      |      3 |      2 |         5 |        12 |        13 |
      |      4 |      1 |        15 |         8 |        17 |
      |      4 |      3 |         7 |        24 |        25 |
      |      5 |      2 |        21 |        20 |        29 |
      |      5 |      4 |         9 |        40 |        41 |
      |      6 |      1 |        35 |        12 |        37 |
      |      6 |      5 |        11 |        60 |        61 |
      |      7 |      2 |        45 |        28 |        53 |
      |      7 |      4 |        33 |        56 |        65 |
      |      7 |      6 |        13 |        84 |        85 |
      +--------+--------+-----------+-----------+-----------+

 

Posted by Scripter

댓글을 달아 주세요

C# 소스:

// Filename: GeneratePythagoreanTriplesn.cs
//
// Compile: csc GeneratePythagoreanTriples.cs
//
// Execute: GeneratePythagoreanTriples 40

using System;
using System.Collections.Generic;

namespace GeneralCommandLineApp
{
     class PythagorianTriple {
        Int64 a, b, c;
        public PythagorianTriple(Int64 x) {
             Int64 t;
        	if (x >1 && x % 2 == 1) {
           	    this.a = x;
            	    this.b = (x*x - 1)/2;;
           	    this.c = this.b + 1;;
        	}
        	else if (x >= 2) {
        	    t = x + 2;
            	    this.a = t;
            	    this.b = t*t/4 - 1;
           	    this.c = this.b + 2;;
           	}
       }
        public Int64 GetA() {
        	return this.a;
        }
        public Int64 GetB() {
        	return this.b;
        }
        public Int64 GetC() {
        	return this.c;
        }

        public override string ToString() {
        	return "(" + this.a + ", " + this.b + ", " + this.c + ")";
        }
    }
    
   class Program
    {
         public static void GenerateTriples(List<PythagorianTriple> data, Int64 k)
        {
    	  for (Int64 i = 1; i <= k; i++)
    	  {
    	      data.Add(new PythagorianTriple(2*i + 1));
    	      data.Add(new PythagorianTriple(2*i));
    	  }
        }

        public static void PrintTriplesAsTableForm(List<PythagorianTriple> data)
        {
    	  Int64 c = data.Count;
    	   int j;
              Console.WriteLine("Show Pythagorian triples (a, b, c) each of which satisfies a^2 + b^2 = c^2.");
              Console.WriteLine();
              Console.WriteLine("      +--------+--------+--------+         +--------+--------+--------+");
              Console.WriteLine("      |   Odd  |        |        |         |  Even  |        |        |");
              Console.WriteLine("      |     a  |     b  |     c  |         |     a  |     b  |     c  |");
              Console.WriteLine("      +--------+--------+--------+         +--------+--------+--------+");
               for (int i = 0; i < c; i += 2) {
                   Console.Write("      | {0, 6} | {1, 6} | {2, 6} |", data[i].GetA(), data[i].GetB(), data[i].GetC());
                   j = i + 1;
                   Console.WriteLine("         | {0, 6} | {1, 6} | {2, 6} |", data[j].GetA(), data[j].GetB(), data[j].GetC());
               }
              Console.WriteLine("      +--------+--------+--------+         +--------+--------+--------+");
        }


        static void Main(string[] args)
        {
        	Int64 c;
        	if (args.Length == 1) {
                c = Convert.ToInt64(args[0]);
                if (c < 1) {
                     Console.WriteLine("Sorry, you should a positive integer.");
                     return;
                }
                else {
                    List<PythagorianTriple> data = new List<PythagorianTriple>();
                    GenerateTriples(data, c);
                     PrintTriplesAsTableForm(data);
                     return;
                }
            }
            else
                Console.WriteLine("Usage:  GeneratePyThagoriaTriples  [number]");
        }
    }
}

 

 

 

 

 

실행: 프롬프트> GeneratePythagoreanTriples 40

실행 결과:

더보기

Show Pythagorian triples (a, b, c) each of which satisfies a^2 + b^2 = c^2.

+--------+--------+--------+ +--------+--------+--------+
| Odd | | | | Even | | |
| a | b | c | | a | b | c |
+--------+--------+--------+ +--------+--------+--------+
| 3 | 4 | 5 | | 4 | 3 | 5 |
| 5 | 12 | 13 | | 6 | 8 | 10 |
| 7 | 24 | 25 | | 8 | 15 | 17 |
| 9 | 40 | 41 | | 10 | 24 | 26 |
| 11 | 60 | 61 | | 12 | 35 | 37 |
| 13 | 84 | 85 | | 14 | 48 | 50 |
| 15 | 112 | 113 | | 16 | 63 | 65 |
| 17 | 144 | 145 | | 18 | 80 | 82 |
| 19 | 180 | 181 | | 20 | 99 | 101 |
| 21 | 220 | 221 | | 22 | 120 | 122 |
| 23 | 264 | 265 | | 24 | 143 | 145 |
| 25 | 312 | 313 | | 26 | 168 | 170 |
| 27 | 364 | 365 | | 28 | 195 | 197 |
| 29 | 420 | 421 | | 30 | 224 | 226 |
| 31 | 480 | 481 | | 32 | 255 | 257 |
| 33 | 544 | 545 | | 34 | 288 | 290 |
| 35 | 612 | 613 | | 36 | 323 | 325 |
| 37 | 684 | 685 | | 38 | 360 | 362 |
| 39 | 760 | 761 | | 40 | 399 | 401 |
| 41 | 840 | 841 | | 42 | 440 | 442 |
| 43 | 924 | 925 | | 44 | 483 | 485 |
| 45 | 1012 | 1013 | | 46 | 528 | 530 |
| 47 | 1104 | 1105 | | 48 | 575 | 577 |
| 49 | 1200 | 1201 | | 50 | 624 | 626 |
| 51 | 1300 | 1301 | | 52 | 675 | 677 |
| 53 | 1404 | 1405 | | 54 | 728 | 730 |
| 55 | 1512 | 1513 | | 56 | 783 | 785 |
| 57 | 1624 | 1625 | | 58 | 840 | 842 |
| 59 | 1740 | 1741 | | 60 | 899 | 901 |
| 61 | 1860 | 1861 | | 62 | 960 | 962 |
| 63 | 1984 | 1985 | | 64 | 1023 | 1025 |
| 65 | 2112 | 2113 | | 66 | 1088 | 1090 |
| 67 | 2244 | 2245 | | 68 | 1155 | 1157 |
| 69 | 2380 | 2381 | | 70 | 1224 | 1226 |
| 71 | 2520 | 2521 | | 72 | 1295 | 1297 |
| 73 | 2664 | 2665 | | 74 | 1368 | 1370 |
| 75 | 2812 | 2813 | | 76 | 1443 | 1445 |
| 77 | 2964 | 2965 | | 78 | 1520 | 1522 |
| 79 | 3120 | 3121 | | 80 | 1599 | 1601 |
| 81 | 3280 | 3281 | | 82 | 1680 | 1682 |
+--------+--------+--------+ +--------+--------+--------+

 

 

Posted by Scripter

댓글을 달아 주세요

/**
 * Filename: HelloHangulUTF8.java
 *
 * File Encoding: UTF8
 *
 * Compile: javac HelloHangulUTF8.java
 *
 * Execute: java HelloHangulUTF8]
 *
 * Output:
 *        Hello. world!
 *        안녕하세요?
 *
 * Version
 *     Prompt> java -version
 *        java version "1.8.0_221"
 *        Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
 *        Java HotSpot(TM) Client VM (build 25.221-b11, mixed mode, sharing)
 *
 * os  EnvironmenT: 32but Window 10
 * Installer: jdk-8u221-windows-i586.exe
 *
 * Download: https://java.com/ko/download/help/
 * Document: https://docs.oracle.com/javase/8/docs/
 *
 * Date. 2019. 9. 12
 */
 
public class HelloHangulUTF8 {
    public static void main(String[] args) {
        System.out.println("Hello. world!");
        System.out.println("안녕하세요?");
    }
}

 

32bit 윈도우 10에 최신 안정 버전 JDK 1.8 Update 221 설치하고 UTF8 한글 테스트하기

 

위의 소스를 BOM 없는 UTF8 파일 인코딩으로 저장하면 윈ㄷㅎ우 10의 cmd 터미널에서  컴파일되고 실행된다.

 

 

 

 

 

 

 

Posted by Scripter

댓글을 달아 주세요

다음은 Pythob 2.7.* 에 PyGTK 를 설치하여 실행되는 RPN 계산기 소스이다.

 

#!/usr/bin/env python

# Filename: rpnCalc.py
#           0,3
#
#   RPN Calculator using PyGTK
#   Modified from PyGTK/example/textview-basic.py

import pygtk
pygtk.require('2.0')
import gtk

class TextViewExample:
    def callback(self, widget, data=None):
        print "Hello again - %s was pressed" % data
        if data != None:
            self.textbuffer.insert(self.textbuffer.get_end_iter(), data + "\n")
               
    def enter_callback(self, widget, entry):
        entry_text = entry.get_text()
        print "Entry contents: %s\n" % entry_text
  
    def create_model(self):
        '''create the model - a ListStore'''
        self.store = gtk.ListStore(float)
        return self.store
 
    def create_columns(self, treeView):
        ''' create the columns '''
        rendererText = gtk.CellRendererText()
        rendererText.set_property('xalign', 1.0)   # work for right align
        column = gtk.TreeViewColumn(None, rendererText, text=0)
        column.set_sort_column_id(0)
        column.set_alignment(0.5)   # work for center align

        # append the column
        treeView.append_column(column)

    def reset(self, widget, entry):
        entry.set_text("")

    def calcIt(self, widget, entry):
        CONTINUE_FLAG = 1

        while CONTINUE_FLAG == 1:
            param = entry.get_text()
            tokens = self.tokenize(param)
            token_len = len(tokens)

            self.textbuffer.insert(self.textbuffer.get_end_iter(), "RPN> " + param + "\n")

            for i in range(0, token_len):
                    str = "" + tokens[i]
                    if len(str) == 0:
                        continue

                    a = str[0:1]

                    if a == 'Q' or a == 'q':
                        self.showMessage("Quit")
                        self.clear()
                        CONTINUE_FLAG = 0
                        break

                    if a in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.']:
                            self.push(eval(str))
                    elif a == '+':
                            if len(str) > 1:
                                self.push(eval(str))
                            else:
                                self.push(self.pop() + self.pop())
                    elif a == '-':
                            if len(str) > 1:
                                self.push(eval(str))
                            else:
                                op2 = self.pop();
                                self.push(self.pop() - op2)
                    elif a == '*':
                         if str == "**":
                                op2 = self.pop()
                                self.push(pow(self.pop(), op2))
                         else:
                                self.push(self.pop() * self.pop())
                    elif a == '/':
                            op2 = self.pop()
                            if op2 != 0.0:
                                self.push(self.pop() / op2)
                            else:
                                self.showMessage("zero divisor popped")
                    elif a == '^':
                            op2 = self.pop()
                            self.push(pow(self.pop(), op2))
                    elif a == '=' or a == 'p':
                            listmodel = self.listView.get_model()
                            y = listmodel.get_value(listmodel.get_iter_first(), 0)
                            self.showMessage("%s" % y)
                    elif a == 'c':
                            self.showMessage("Clear")
                            self.clear()
                    else:
                            self.showMessage("Unknown Command: " + a)
            CONTINUE_FLAG = 0
            entry.set_text("")


    # push f onto value stack
    def push(self, f):
        self.store.insert(0, [f])

    # pop top value from stack
    def pop(self):
        try:
             listmodel = self.listView.get_model()
             y = listmodel.get_value(listmodel.get_iter_first(), 0)
             self.store.remove(self.store.get_iter_first())
             return y
        except:
             raise "pop error on empty stack"
        return None

    # clear stack
    def clear(self):
        self.store.clear()


    # Tokenize the input string.
    def tokenize(self, s):
        self.len = len(s)
        t = ""
        tokens = []    # list of tokens

        for i in range(0, self.len):
            c = s[i:i+1]
            if c == ' ' or c == '\t' or c == '\r' or c == '\n':
                    if len(t) > 0:
                            tokens.append(t)
                            t = ""
            elif c == '+' or c == '-':
                    if len(t) > 0:
                            tokens.append(t)
                            t = c
                    elif len(t) == 0:
                            t = c
            elif c == '*':
                    if len(t) > 1:
                            tokens.append(t)
                            tokens.append(c)
                            t = ""
                    elif len(t) == 1:
                         if t == "*":
                                tokens.append("**")
                                t = ""
                         else:
                                tokens.append(t)
                                tokens.append(c)
                                t = ""
                    elif len(t) == 0:
                            t = c
            elif c == '/' or c == '^' or c == '=' or c == 'p' or c == 'q' or c == 'Q':
                    if len(t) > 0:
                            tokens.append(t)
                            tokens.append(c)
                            t = ""
                    elif len(t) == 0:
                            tokens.append(c)
            else:
                    t += c

        if len(t) > 0:
                tokens.append(t)
                t = ""
        return tokens


    def showMessage(self, m):
        if m != None:
            self.textbuffer.insert(self.textbuffer.get_end_iter(), "%s\n" % m)


    def close_application(self, widget):
        gtk.main_quit()

    def __init__(self):
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_resizable(True) 
        window.connect("destroy", self.close_application)
        window.set_title("RPN Calculator")
        window.set_default_size(500, 300)
        window.set_border_width(0)

        box2 = gtk.VBox(False, 10)
        box2.set_border_width(10)
        window.add(box2)
        box2.show()

        hbox1 = gtk.HBox()
        box2.pack_start(hbox1, True, True, 0)
        hbox1.show()


        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        textview = gtk.TextView()
        self.textbuffer = textview.get_buffer()
        sw.add(textview)
        sw.show()
        textview.show()

        hbox1.pack_start(sw, True, True, 10)


        # create a scrollable window and integrate it into the vbox
        sw2 = gtk.ScrolledWindow()
        sw2.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        sw2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
        # create a TreeView object which will work with our model (ListStore)
        store = self.create_model()
        self.listView = gtk.TreeView(store)
        self.listView.set_rules_hint(True)
        self.listView.set_headers_clickable(False)
        self.listView.set_property("headers-visible", False)
 
        # add the TreeView to the scrolled window
        sw2.add(self.listView)
 
        sw2.show()
        self.listView.show()

        # create the columns
        self.create_columns(self.listView)
        sw2.set_size_request(150, 300)
        hbox1.pack_start(sw2, False, False, 10)


        # check button to toggle editable mode
        textview.set_editable(False)
        textview.set_cursor_visible(False)
       
        hbox2 = gtk.HBox()
        box2.pack_start(hbox2, False, True, 0)
        hbox2.show()

        entry = gtk.Entry()
        entry.set_max_length(50)
        entry.connect("activate", self.enter_callback, entry)
        hbox2.pack_start(entry, True, True, 10)
        entry.show()

        hbox3 = gtk.HButtonBox()
        hbox2.pack_start(hbox3, False, False, 0)
        hbox3.show()

        btnCalc = gtk.Button("Calculate")
        btnCalc.connect("clicked", self.calcIt, entry)
        hbox3.pack_start(btnCalc, True, True, 5)
        btnCalc.set_flags(gtk.CAN_DEFAULT)
        btnCalc.grab_default()
        btnCalc.show()
       

        btnReset = gtk.Button("Reset")
        btnReset.connect("clicked", self.reset, entry)
        hbox3.pack_start(btnReset, True, True, 5)
        btnReset.set_flags(gtk.CAN_DEFAULT)
        btnReset.grab_default()
        btnReset.show()

        window.show()

def main():
    gtk.main()
    return 0      

if __name__ == "__main__":
    TextViewExample()
    main()

 

프롬프트> python rpnCalc.py

 

 

 

Posted by Scripter

댓글을 달아 주세요

현재 Python 3.3 의 최신 릴리즈는 3.3.5 이고, Python 3.4 의 최신 릴리즈는 3.3.1 이다. 또한 IPython 의 최신 릴리즈는 2.1.0 이다. 

 

여기서는 윈도우용 Python 3.3.5 를 설치한 후 IPython 2.1.0 을 설치하여 사용하는데 문제가 많아 그 한 해결법을 제시한다.'(윈도우용 Python 3.4.1 의 경우에는 IPython 2.1.0 이 무리 없이 잘 설치된다.)

 

이 글에서 IPython 을 포함하여 모든 Python 확장 모듈의 설치는 모두

Unofficial Windows Binaries for Python Extension Packages

의 것을 내려받아 설치하는 것으로 간주한다.

 

우선 Python 3.3.5 인터프리터를 실행해 본다. 

프롬프트> python
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit() 

이번에는 IPython 인터프리터를 실행해본다.  IPython 의 실행파일은 %PYTHONPATH%\Scripts 폴더에 존재하므로 이 폴더를 환경변수 PATH 에 넣어주어야 한다.

프롬프트> ipython
Traceback (most recent call last):
  File "c:\python335\Scripts\ipython-script.py", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named 'pkg_resources'

 

위의 에러 메시지는 pkg_resources 모듈이 설치되어 있지 않다는 의미이다.

Python 3.4.1 을 설치하여 %PYTHONPATH%\Lib\site_packes 폴더에 있는 pkg_resource.py 파일을 Python 3.3.5 의 해당 폴더에 복사한 후 ipython 릏 다시 실행한다.

프롬프트> ipython
WARNING: Readline services not available or not loaded.
WARNING: Proper color support under MS Windows requires the pyreadline library.
You can find it at:
http://ipython.org/pyreadline.html
Gary's readline needs the ctypes module, from:
http://starship.python.net/crew/theller/ctypes
(Note that ctypes is already part of Python versions 2.5 and newer).

Defaulting color scheme to 'NoColor'
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC v.1600 32 bit (In
tel)]
Type "copyright", "credits" or "license" for more information.

IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: exit()

 

이번에는 IPython 이 실행은 되었지만 색상이 지원되지않는다. 그래서 PyReadline 을 설치하고 다시 ipython 을 실행한다.


프롬프트> ipython
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC v.1600 32 bit (In
tel)]
Type "copyright", "credits" or "license" for more information.

IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: exit()

위와 같이 IPython 2.1.0 이 잘 실행되었음을 알 수 있다.

 

64비트용 Python 3,3,5 의 경우에도 위와 같은 방법으러  IPython 2,1,9 을 설치하여 사용할 수 있다.

 

Python 3,4,1 의 경우 IPython 2.1.0 이 설치와 실행은 잘 되지만, 역시 색상은 지둰되지 않는다.

이 경우 PyReadline 을 설치하는 방법은

프롬프트> set PATH=%PYTHTHON341PATH%;%PYTHON341PATH%\Scripts;%PATH%

한 후 pip 명령으로 pyreadline 을 설치한다.

프롬프트> pip ionstall pyreadline

만일 pip 명렬으로 pyreadline 이 설치되지 않으면 Download PyReadline 에서 직법 내려받아 설치해도 된다. (32bit 용 Python 3.4.1 의 경우 이렇게 하여 성공적으로 설치하였다.)

 

참고로, Matplotlib 를 이용하기 위해서는 numpy, python-dateutil, pytz, pyparsing, six, pillow, pycairo, tornado, pyside, pyq 들이 먼저 설치되어 있어야 한다.

이제 Matplotlib 가 잘 설치되었는지 IPython 으로 테스트해 보자.

 

프롬프트> ipython -pylab

 WARNING: `-pylab` flag has been deprecated.
    Use `--matplotlib <backend>` and import pylab manually.
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AM
D64)]
Type "copyright", "credits" or "license" for more information.

IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
Using matplotlib backend: TkAgg

In [1]: x = randn(10000)

In [2]: hist(x, 100)
Out[2]:
(array([   1.,    0.,    0.,    0.,    0.,    1.,    1.,    3.,    1.,
           2.,    3.,    2.,    2.,    5.,    6.,    4.,    5.,   10.,
           8.,   20.,   27.,   16.,   25.,   34.,   30.,   26.,   51.,
          60.,   70.,   66.,   86.,   97.,   88.,  108.,  118.,  140.,
         151.,  158.,  156.,  175.,  189.,  215.,  220.,  255.,  251.,
         273.,  267.,  260.,  295.,  285.,  314.,  320.,  298.,  285.,
         310.,  327.,  299.,  281.,  246.,  260.,  247.,  277.,  190.,
         199.,  186.,  187.,  206.,  139.,  135.,  131.,  126.,  100.,
         119.,   74.,   71.,   67.,   67.,   42.,   27.,   34.,   29.,
          30.,   24.,   15.,    8.,   13.,   12.,   11.,    3.,    7.,
           4.,    0.,    2.,    2.,    5.,    1.,    2.,    1.,    0.,    1.]),
 array([-3.96240846, -3.8868053 , -3.81120214, -3.73559898, -3.65999581,
        -3.58439265, -3.50878949, -3.43318633, -3.35758317, -3.28198001,
        -3.20637685, -3.13077368, -3.05517052, -2.97956736, -2.9039642 ,
        -2.82836104, -2.75275788, -2.67715471, -2.60155155, -2.52594839,
        -2.45034523, -2.37474207, -2.29913891, -2.22353574, -2.14793258,
        -2.07232942, -1.99672626, -1.9211231 , -1.84551994, -1.76991678,
        -1.69431361, -1.61871045, -1.54310729, -1.46750413, -1.39190097,
        -1.31629781, -1.24069464, -1.16509148, -1.08948832, -1.01388516,
        -0.938282  , -0.86267884, -0.78707567, -0.71147251, -0.63586935,
        -0.56026619, -0.48466303, -0.40905987, -0.3334567 , -0.25785354,
        -0.18225038, -0.10664722, -0.03104406,  0.0445591 ,  0.12016226,
         0.19576543,  0.27136859,  0.34697175,  0.42257491,  0.49817807,
         0.57378123,  0.6493844 ,  0.72498756,  0.80059072,  0.87619388,
         0.95179704,  1.0274002 ,  1.10300337,  1.17860653,  1.25420969,
         1.32981285,  1.40541601,  1.48101917,  1.55662233,  1.6322255 ,
         1.70782866,  1.78343182,  1.85903498,  1.93463814,  2.0102413 ,
         2.08584447,  2.16144763,  2.23705079,  2.31265395,  2.38825711,
         2.46386027,  2.53946344,  2.6150666 ,  2.69066976,  2.76627292,
         2.84187608,  2.91747924,  2.99308241,  3.06868557,  3.14428873,
         3.21989189,  3.29549505,  3.37109821,  3.44670137,  3.52230454,
         3.5979077 ]),
 <a list of 100 Patch objects>)

 

 

 

-pylab 옵션이 deprecate 되었다고 하니 이번에는 옵션--matplotlib 으로 실행해 보자.

프롬프트> ipython --matplotlib
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AM
D64)]
Type "copyright", "credits" or "license" for more information.

IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
Using matplotlib backend: TkAgg

In [1]: from pylab import *

In [2]: x = randn(10000)

In [3]: hist(x, 100)
Out[3]:
(array([   2.,    1.,    1.,    1.,    1.,    3.,    7.,    5.,    1.,
           4.,   11.,   13.,   15.,   16.,   20.,   21.,   27.,   25.,
          31.,   34.,   47.,   47.,   62.,   70.,   68.,   79.,   98.,
         101.,  123.,  121.,  145.,  142.,  142.,  168.,  172.,  193.,
         212.,  235.,  229.,  227.,  240.,  236.,  296.,  286.,  259.,
         276.,  285.,  274.,  302.,  308.,  284.,  286.,  288.,  255.,
         251.,  234.,  215.,  198.,  216.,  183.,  192.,  175.,  175.,
         156.,  130.,  133.,  102.,  101.,   90.,   95.,   79.,   54.,
          63.,   57.,   50.,   32.,   36.,   33.,   24.,   21.,   23.,
          16.,    9.,    6.,   12.,    7.,    6.,    6.,    5.,    4.,
           1.,    4.,    2.,    2.,    2.,    1.,    3.,    0.,    0.,    1.]),
 array([-3.40718204, -3.33556225, -3.26394247, -3.19232268, -3.1207029 ,
        -3.04908311, -2.97746333, -2.90584354, -2.83422376, -2.76260398,
        -2.69098419, -2.61936441, -2.54774462, -2.47612484, -2.40450505,
        -2.33288527, -2.26126548, -2.1896457 , -2.11802592, -2.04640613,
        -1.97478635, -1.90316656, -1.83154678, -1.75992699, -1.68830721,
        -1.61668742, -1.54506764, -1.47344785, -1.40182807, -1.33020829,
        -1.2585885 , -1.18696872, -1.11534893, -1.04372915, -0.97210936,
        -0.90048958, -0.82886979, -0.75725001, -0.68563023, -0.61401044,
        -0.54239066, -0.47077087, -0.39915109, -0.3275313 , -0.25591152,
        -0.18429173, -0.11267195, -0.04105216,  0.03056762,  0.1021874 ,
         0.17380719,  0.24542697,  0.31704676,  0.38866654,  0.46028633,
         0.53190611,  0.6035259 ,  0.67514568,  0.74676546,  0.81838525,
         0.89000503,  0.96162482,  1.0332446 ,  1.10486439,  1.17648417,
         1.24810396,  1.31972374,  1.39134353,  1.46296331,  1.53458309,
         1.60620288,  1.67782266,  1.74944245,  1.82106223,  1.89268202,
         1.9643018 ,  2.03592159,  2.10754137,  2.17916115,  2.25078094,
         2.32240072,  2.39402051,  2.46564029,  2.53726008,  2.60887986,
         2.68049965,  2.75211943,  2.82373921,  2.895359  ,  2.96697878,
         3.03859857,  3.11021835,  3.18183814,  3.25345792,  3.32507771,
         3.39669749,  3.46831728,  3.53993706,  3.61155684,  3.68317663,
         3.75479641]),
 <a list of 100 Patch objects>)

 

 

 

이제 32비트용 Python 3.4.1 에서 Matplotlib 를 사용해 보자.

32비트용 Python 3.4.1 이 폴더 C:\Python34-32 에 설치된 것으로 간주한다.

먼저 명령 프롬프트에서 환경변수 PATH 를 설정한다.

프롬프트> pythonset PATH=C:\Python34-32;C:\Python34-32\Scripts;%PATH%

Pyhon 인터프리터를 실행하여 간단한 코드

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()

를 입력한다.

프롬프트> python
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "c:\python34-32\lib\site-packages\matplotlib\__init__.py", line 111, in <
module>
    import dateutil
ImportError: No module named 'dateutil'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python34-32\lib\site-packages\matplotlib\__init__.py", line 113, in <
module>
    raise ImportError("matplotlib requires dateutil")
ImportError: matplotlib requires dateutil
>>> plt.plot([1,2,3,4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'plt' is not defined
>>> plt.ylabel('some numbers')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'plt' is not defined
>>> plt.show()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'plt' is not defined
>>> exit()


위의 에러 메시징[서 보다 시피, 모듈 dateutil 이 없다는 에러다.

이번에는 IPython 을 실행해 본다.

프롬프트> ipython
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (In
tel)]
Type "copyright", "credits" or "license" for more information.

IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: exit()

IPython 은 정상적으로 잘 실행된다.

pip 명령으로 python-dateutil 을 설치한다.

프롬프트> pip install python-dateutil
Downloading/unpacking python-dateutil
  Running setup.py (path:C:\Users\ph\AppData\Local\Temp\pip_build_ph\python-date
util\setup.py) egg_info for package python-dateutil

Requirement already satisfied (use --upgrade to upgrade): six in c:\python34-32\
lib\site-packages (from python-dateutil)
Installing collected packages: python-dateutil
  Running setup.py install for python-dateutil

Successfully installed python-dateutil
Cleaning up...

 

다시 Pyhon 인터프리터를 실행하여 앞에서 제시했던 간단한 코드를 입력해 본다.

프롬프트> python
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "c:\python34-32\lib\site-packages\matplotlib\__init__.py", line 125, in <
module>
    import pyparsing
ImportError: No module named 'pyparsing'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python34-32\lib\site-packages\matplotlib\__init__.py", line 127, in <
module>
    raise ImportError("matplotlib requires pyparsing")
ImportError: matplotlib requires pyparsing
>>> plt.plot([1,2,3,4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'plt' is not defined
>>> plt.ylabel('some numbers')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'plt' is not defined
>>> plt.show()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'plt' is not defined
>>> exit()

 

위의 에러 메시징[서 보다 시피, 이번에는 모듈 pyparsing 이 없다는 에러다.

그래서 pip 명령으로 pyparsing 을 설치한다.

프롬프트> pip install pyparsing
Downloading/unpacking pyparsing
  Running setup.py (path:C:\Users\ph\AppData\Local\Temp\pip_build_ph\pyparsing\s
etup.py) egg_info for package pyparsing

Installing collected packages: pyparsing
  Running setup.py install for pyparsing

Successfully installed pyparsing
Cleaning up...

 

python-dateutil 과 ptparsing 이 설치되었으니 다시 Pyhon 인터프리터를 실행하여 앞에서 제시했던 간단한 코드를 입력해 본다.

프롬프트> python
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3,4])
[<matplotlib.lines.Line2D object at 0x045BE530>]
>>> plt.ylabel('some numbers')
<matplotlib.text.Text object at 0x047160B0>
>>> plt.show()

위의 명령이 모두 수행되어 아래 처럼 Matplotlib 에 의한 그래프 창이 성공적으로 뜬다.

 


 

이번에는 좌표평면의 네 점 (1, 1), (2, 4), (3, 9), (4, 16) 에 (속이 채워진) 뿕은 색의 굵은 점을 찍어본다.

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3,4], [1,4,9,16], 'ro')
[<matplotlib.lines.Line2D object at 0x042EE3B0>]
>>> plt.axis([0, 6, 0, 20])
[0, 6, 0, 20]
>>> plt.show()

 

 

 

이번에는 NumPy 모듈을 이용하여, 한 좌표평면의 세 함수 y = x, y = x^2, y = x^3 의 그래프를 그려 보자.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> t = np.arange(0., 5., 0.2)
>>> plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
[<matplotlib.lines.Line2D object at 0x04716410>, <matplotlib.lines.Line2D object
 at 0x047169F0>, <matplotlib.lines.Line2D object at 0x047160F0>]
>>> plt.show()

 

 

 

* 이 외에도 Matplotlib 튜토리얼의 다른 예제 들도 잘 실행됨을 확인하였다.

 

 

Posted by Scripter

댓글을 달아 주세요