改行やインデントを含む文字列をexecする方法


Pythonで以下のようなコードを書いてみて、一応正しく実行されたのですが  
改行やインデント、変数を含む文字列をexecする場合、このような書き方で良いのでしょうか。  
それとも、もっと良い書き方がありますでしょうか？

[code]

    test_str = ''
    for i in range(10):
        test_str += 'i = '+str(i) + '\n'
        test_str += 'if i%2==0:'+ '\n'
        test_str += '   if i%3==0:'+ '\n'
        test_str += '      print("'+str(i)+'")'+ '\n'
    exec(test_str)
    
[/code]

上記のコードは、0から9までの値をforループで回して  
2で割り切れる数かつ3で割り切れる数をprintするだけの内容です。  
if文にandを使っていないのは、2段階のif文でも問題なく動くか確かめるためです。




string formattingを使えば、クオートを書く回数が減ります。  
<https://realpython.com/python-string-formatting/>

また、複数行にまたがる文字列を書く場合は、トリプルクオートを使うことが可能です。  
<https://docs.python.org/3/tutorial/introduction.html#strings>

[code]

    template = """
    i = {INDEX}
    if i%2==0:
        if i%3==0:
            print("{INDEX}")
    """
    
    test_str = ""
    for i in range(10):
        test_str += template.format(INDEX=i)
    
    exec(test_str)
    
[/code]




string formattingを使えば、クオートを書く回数が減ります。  
<https://realpython.com/python-string-formatting/>

また、複数行にまたがる文字列を書く場合は、トリプルクオートを使うことが可能です。  
<https://docs.python.org/3/tutorial/introduction.html#strings>

[code]

    template = """
    i = {INDEX}
    if i%2==0:
        if i%3==0:
            print("{INDEX}")
    """
    
    test_str = ""
    for i in range(10):
        test_str += template.format(INDEX=i)
    
    exec(test_str)
    
[/code]

