Python Code Example with Syntax Highlighting

excel_to_html_editer

  • sample code
    身長を入力して、CSVで出力するフォーム/excel_to_html_editer.html
  • 二分探索木の実装(テスト)

    
    # ノードクラス
    class Node:
        def __init__(self, key):
            self.left = None
            self.right = None
            self.val = key
    
    # 二分探索木クラス
    class BinarySearchTree:
        def __init__(self):
            self.root = None
    
        def insert(self, key):
            if self.root is None:
                self.root = Node(key)
            else:
                self._insert(self.root, key)
    
        def _insert(self, current_node, key):
            if key < current_node.val:
                if current_node.left is None:
                    current_node.left = Node(key)
                else:
                    self._insert(current_node.left, key)
            else:
                if current_node.right is None:
                    current_node.right = Node(key)
                else:
                    self._insert(current_node.right, key)
    
        def search(self, key):
            return self._search(self.root, key)
    
        def _search(self, current_node, key):
            if current_node is None or current_node.val == key:
                return current_node
            if key < current_node.val:
                return self._search(current_node.left, key)
            else:
                return self._search(current_node.right, key)
    
        def inorder(self):
            self._inorder(self.root)
    
        def _inorder(self, current_node):
            if current_node:
                self._inorder(current_node.left)
                print(current_node.val, end=" ")
                self._inorder(current_node.right)
    
        def print_tree(self, node, level=0, prefix="Root: "):
            if node is not None:
                print(" " * (level * 4) + prefix + str(node.val))
                if node.left:
                    self.print_tree(node.left, level + 1, "L--- ")
                if node.right:
                    self.print_tree(node.right, level + 1, "R--- ")
    
    bst = BinarySearchTree()
    keys = [20, 10, 30, 5, 15, 25, 35]
    
    for key in keys:
        bst.insert(key)
    
    bst.print_tree(bst.root)
    

    二分探索木、xlsxデータ取り込みツリー表示

    
      import pandas as pd
    
      # ノードクラス
      class Node:
          def __init__(self, key, name, gender):
              self.left = None
              self.right = None
              self.val = key
              self.people = [(name, gender)]  # 名前と性別をタプルで保持
      
      # 二分探索木クラス
      class BinarySearchTree:
          def __init__(self):
              self.root = None
      
          # ノードを挿入する関数
          def insert(self, key, name, gender):
              if self.root is None:
                  self.root = Node(key, name, gender)
              else:
                  self._insert(self.root, key, name, gender)
      
          def _insert(self, current_node, key, name, gender):
              if key == current_node.val:
                  # 同じキーの場合は名前と性別のペアを追加
                  current_node.people.append((name, gender))
              elif key < current_node.val:
                  if current_node.left is None:
                      current_node.left = Node(key, name, gender)
                  else:
                      self._insert(current_node.left, key, name, gender)
              else:
                  if current_node.right is None:
                      current_node.right = Node(key, name, gender)
                  else:
                      self._insert(current_node.right, key, name, gender)
      
          # 二分探索木内の探索
          def search(self, key):
              return self._search(self.root, key)
      
          def _search(self, current_node, key):
              if current_node is None:
                  return None
              if current_node.val == key:
                  return current_node.people  # 名前と性別のリストを返す
              if key < current_node.val:
                  return self._search(current_node.left, key)
              else:
                  return self._search(current_node.right, key)
      
          # 中間順巡回(in-order traversal)
          def inorder(self):
              self._inorder(self.root)
      
          def _inorder(self, current_node):
              if current_node:
                  self._inorder(current_node.left)
                  for person in current_node.people:
                      print(f"{current_node.val}: {person[0]} ({person[1]})", end=" ")  # 名前と性別を表示
                  self._inorder(current_node.right)
      
          # 木の分岐構造を表示する関数
          def print_tree(self, node, level=0, prefix="Root: "):
              if node is not None:
                  print(" " * (level * 4) + prefix + str(node.val) + " " + ", ".join([f"{name} ({gender})" for name, gender in node.people]))
                  if node.left:
                      self.print_tree(node.left, level + 1, "L--- ")
                  if node.right:
                      self.print_tree(node.right, level + 1, "R--- ")
      
      # エクセルファイルからデータを読み込む
      excel_file_path = 'your_excel_file_path.xlsx'  # 実際のエクセルファイルパスに変更
      df = pd.read_excel(excel_file_path)
      
      # DataFrameの指定した列だけをリストに変換
      keys_and_people = df[['Key', 'Name', 'Gender']].values.tolist()
      
      # 二分探索木の動作テスト
      bst = BinarySearchTree()
      
      # ノードを挿入
      for key, name, gender in keys_and_people:
          bst.insert(key, name, gender)
      
      # 木の構造を表示
      print("\n二分探索木の分岐構造:")
      bst.print_tree(bst.root)
      
      # 中間順巡回の結果
      print("\n二分探索木の中間順巡回 (数値、名前、性別の対応):")
      bst.inorder()
      
      # ユーザー入力による探索
      search_value = int(input("\n探索したい数値を入力してください: "))
      result = bst.search(search_value)
      if result:
          print(f"{search_value} に対応する人物:")
          for name, gender in result:
              print(f"名前: {name}, 性別: {gender}")
      else:
          print(f"{search_value} に対応する人物は見つかりません。")