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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1308閲覧

python3でprintする際、長い文字列の途中に変数を含め、読みやすくしたい。

teityura

総合スコア84

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/27 14:52

bashで、

bash

1#!/bin/bash 2 3set -eu 4SQL=" 5SELECT 6 col_a, 7 col_b 8FROM 9 table ; 10" 11echo -e " 12SQL: 13${SQL} 14" 15exit 0

のような書き方に慣れてしまったので、
python3でも下記のような書き方をしたいのですが、可能でしょうか。
下記のようでなくとも、分かりやすい、読みやすい書き方があれば教えてください。

python3

1#!/usr/bin/python3 みたいな書き方はできるのでしょうか? 2 3import os 4import sys 5 6if sys.version_info[0] == 2: 7 print(""" 8 python2系で実行されています。 9 python3系で実行してください。 10 ex1: python3 """{}""" 11 ex2: python3.6 """{}""" 12 """.format(os.path.basename(__file__), os.path.basename(__file__))) 13 sys.exit() 14 15def f(): 16 try: 17 a = input("type a number: ") 18 b = input("type another: ") 19 a = int(a) 20 b = int(b) 21 print(a / b) 22 except (ZeroDivisionError, ValueError): 23 print("Invalid input.") 24 25f()

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

ご質問のタイトルは

python3でprintする際、長い文字列の途中に変数を含め、読みやすくしたい。

とのことですが、Python 3.6 以降を使っている場合であれば、formatted string literal(f-string) を使って、たとえば以下のようなことができます。

python3

1lang = 'ja' 2title = 'sample' 3value = 100 4 5html = f'''\ 6<!DOCTYPE html> 7<html lang="{lang}"> 8<head> 9 <meta charset="UTF-8"> 10 <title>{title}</title> 11</head> 12<body> 13 <form> 14 <input value="{value}" /> 15 </form> 16</body> 17</html>\ 18''' 19 20print(html) 21

上記をPython3.6以上で実行すると、{lang}{title}{value} がそれぞれ変数の値に置き換えられて、以下が出力されます。

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>sample</title> 6</head> 7<body> 8 <form> 9 <input value="100" /> 10 </form> 11</body> 12</html>

ただし、ご質問に挙げられているコードはPythonバージョン2系で実行された場合のメッセージの作成という趣旨のものと思われるので、ご質問の目的として Python2系で出来ることをお求めでしたら、上記のf-stringは使えません。

以上、参考になれば幸いです。

投稿2018/10/27 15:42

編集2018/10/28 02:13
jun68ykt

総合スコア9058

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

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

teityura

2018/10/28 01:27

回答ありがとうございます。 私が知りたかったのはf-stringのような機能ですが、 Python2系で使えないのが少し残念ですね。 2系でメッセージを表示する場合、 文字列リテラルを並べて書き、 .formatで変数を指定するのが無難かもしれません。
guest

0

とりあえず、かっこの中(()の他にdictやsetの{}やlistの[]なども含む)では改行可能です。

文字列に関しては"""'''で囲まれたものは複数行に渡って書けますが、インデントのスペースがそのまま入ったりするので、ちょっと使いづらいでしょう。

python

1if True: 2 s = """ 3 hoge 4 fuga 5 """ 6 print(s) 7 8""" => 9 10 hoge 11 fuga 12 13"""

文字列リテラルを並べて書くと自動的に連結されるので、それを使うのも手です。

python

1if True: 2 s = ("hoge" 3 "fuga") 4 5 print(s) 6 7""" => 8hogefuga 9"""

改行は入らないので、これで改行入りの文字列を表現したいなら明示的に\nを入れないと駄目ですね。

質問文のコードだとこんな感じでしょうか。

python

1import os 2import sys 3 4if sys.version_info[0] == 2: 5 print("python2系で実行されています。\n" 6 "python3系で実行してください。\n" 7 "ex1: python3 {}\n" 8 "ex2: python3.6 {}".format( 9 os.path.basename(__file__), os.path.basename(__file__))) 10 sys.exit()

投稿2018/10/27 15:17

hayataka2049

総合スコア30933

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

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

teityura

2018/10/28 01:28

回答ありがとうございます。 python2系で動作させることを前提としていたので、 最後のサンプルコードのように文字列リテラルを並べて書き、 .formatで変数を指定して、実装してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問