「Pythonの基礎 - キーボード」の版間の差分
ページの作成:「== 概要 == input関数は、キーボードで情報を入力させて、その情報を集めて利用する関数である。<br> <br><br> == input関数で入力 ==…」 |
細 Wiki がページ「Pythonの基礎 - キーボード入力」を「Pythonの基礎 - キーボード」に、リダイレクトを残さずに移動しました |
||
| (同じ利用者による、間の4版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
input関数は、キーボードで情報を入力させて、その情報を集めて利用する関数である。<br> | input関数は、キーボードで情報を入力させて、その情報を集めて利用する関数である。<br> | ||
入力された値は常に文字列型として返される。<br> | |||
<br><br> | <br><br> | ||
| 6行目: | 7行目: | ||
input関数では、なんらかの値を入力した時は文字列型で出力される。<br> | input関数では、なんらかの値を入力した時は文字列型で出力される。<br> | ||
これは、数値を入力しても文字列型が返るということである。<br> | これは、数値を入力しても文字列型が返るということである。<br> | ||
< | <syntaxhighlight lang="python"> | ||
print(input()) | print(input()) | ||
</ | </syntaxhighlight> | ||
<br> | |||
# 実行例 : | |||
Hello World | |||
Hello World | |||
<br> | <br> | ||
また、input関数に引数を与えて入力を促すメッセージを入れることができる。<br> | また、input関数に引数を与えて入力を促すメッセージを入れることができる。<br> | ||
< | <syntaxhighlight lang="python"> | ||
input("何か入力してください。: ") | input("何か入力してください。: ") | ||
</ | </syntaxhighlight> | ||
<br> | |||
# 実行例 : | |||
何か入力してください。: テスト | |||
'テスト' | |||
<br><br> | <br><br> | ||
| 19行目: | 30行目: | ||
以下の例では、input関数と条件分岐を組み合わせている。<br> | 以下の例では、input関数と条件分岐を組み合わせている。<br> | ||
入力した値は文字列型になるので、int関数でキャストして整数に変更して、その値を2019と比較している。<br> | 入力した値は文字列型になるので、int関数でキャストして整数に変更して、その値を2019と比較している。<br> | ||
< | <br> | ||
<syntaxhighlight lang="python"> | |||
year = input("令和元年は西暦何年?:") | year = input("令和元年は西暦何年?:") | ||
int_year = int(year) | int_year = int(year) | ||
if int_year == 2019: | if int_year == 2019: | ||
print("正解") | |||
else: | else: | ||
print("間違い") | |||
</ | </syntaxhighlight> | ||
<br> | |||
# 実行例 1 : | |||
令和元年は西暦何年?:2019 | |||
正解 | |||
# 実行例 2 : | |||
令和元年は西暦何年?:2020 | |||
間違い | |||
<br><br> | <br><br> | ||
== input関数と反復処理 == | == input関数と反復処理 == | ||
以下の例では、while文で無限ループさせることで質問を繰り返し、正解した時にbreak文で反復処理を抜ける。<br> | |||
< | <br> | ||
<syntaxhighlight lang="python"> | |||
while True: | |||
year = input("令和元年は西暦何年?:") | |||
int_year = int(year) | |||
if int_year == 2019: | |||
print("正解") | |||
break | |||
print("間違い") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
令和元年は西暦何年?:2020 | |||
間違い | |||
令和元年は西暦何年?:2018 | |||
間違い | |||
令和元年は西暦何年?:2019 | |||
正解 | |||
<br><br> | |||
== 複数の値を入力する == | |||
split関数を使用することで、1行で複数の値を入力することができる。<br> | |||
<br> | |||
split関数は、文字列を指定した区切り文字で分割してリストとして返す。<br> | |||
引数を省略すると、空白文字 (スペース、タブ、改行など) で分割される。<br> | |||
<br> | |||
以下の例では、スペース区切りで複数の値を入力している。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
values = input("3つの値をスペース区切りで入力してください: ") | |||
val1, val2, val3 = values.split() | |||
print(f"1つ目: {val1}") | |||
print(f"2つ目: {val2}") | |||
print(f"3つ目: {val3}") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
3つの値をスペース区切りで入力してください: apple banana orange | |||
1つ目: apple | |||
2つ目: banana | |||
3つ目: orange | |||
<br> | |||
以下の例では、カンマ区切りで数値を入力して、整数に変換している。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
numbers = input("3つの数値をカンマ区切りで入力してください: ") | |||
num1, num2, num3 = map(int, numbers.split(',')) | |||
print(f"合計: {num1 + num2 + num3}") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
3つの数値をカンマ区切りで入力してください: 10,20,30 | |||
合計: 60 | |||
<br><br> | |||
== 数値入力のエラー処理 == | |||
input関数で数値を入力する場合、ユーザが数値以外を入力する可能性がある。<br> | |||
try-except文を使用することで、エラーを安全に処理できる。<br> | |||
<br> | |||
==== 基本的なエラー処理 ==== | |||
以下の例では、数値以外が入力された場合にエラーメッセージを表示している。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
try: | |||
age = int(input("年齢を入力してください: ")) | |||
print(f"あなたは{age}歳です") | |||
except ValueError: | |||
print("エラー: 数値を入力してください") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 1 : | |||
年齢を入力してください: 25 | |||
あなたは25歳です | |||
# 実行例 2 : | |||
年齢を入力してください: abc | |||
エラー: 数値を入力してください | |||
<br> | |||
==== 正しい入力があるまで繰り返す ==== | |||
以下の例では、正しい数値が入力されるまで繰り返し入力を求めている。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
while True: | |||
try: | |||
age = int(input("年齢を入力してください: ")) | |||
if age < 0 or age > 150: | |||
print("エラー: 0から150の範囲で入力してください") | |||
continue | |||
print(f"あなたは{age}歳です") | |||
break | |||
except ValueError: | |||
print("エラー: 数値を入力してください") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
年齢を入力してください: abc | |||
エラー: 数値を入力してください | |||
年齢を入力してください: -5 | |||
エラー: 0から150の範囲で入力してください | |||
年齢を入力してください: 25 | |||
あなたは25歳です | |||
<br><br> | |||
== パスワード入力 (getpass関数) == | |||
getpass関数を使用すると、入力内容を画面に表示せずに入力を受け取ることができる。<br> | |||
パスワードやその他の機密情報を入力する際に使用する。<br> | |||
<br> | |||
getpass関数を使用するには、getpassモジュールをインポートする必要がある。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import getpass | |||
password = getpass.getpass("パスワードを入力してください: ") | |||
print(f"パスワードの長さ: {len(password)}文字") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
パスワードを入力してください: | |||
パスワードの長さ: 8文字 | |||
<br> | |||
<u>※注意</u><br> | |||
<u>入力中は画面に何も表示されない。</u><br> | |||
<u>これにより、周囲の人にパスワードが見られることを防ぐことができる。</u><br> | |||
<br> | |||
以下の例では、ユーザー名とパスワードを入力して認証を行っている。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import getpass | |||
username = input("ユーザ名: ") | |||
password = getpass.getpass("パスワード: ") | |||
if username == "admin" and password == "secret": | |||
print("ログイン成功") | |||
else: | |||
print("ログイン失敗") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
ユーザ名: admin | |||
パスワード: | |||
ログイン成功 | |||
<br><br> | |||
== sys.stdinを使った入力 == | |||
sys.stdinを使用することで、複数行の入力や大量データの入力を効率的に処理できる。<br> | |||
<br> | |||
==== 複数行の入力を一度に読み込む ==== | |||
以下の例では、sys.stdinを使用して複数行の入力を一度に読み込んでいる。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import sys | |||
print("複数行を入力してください (Ctrl+Dで終了):") | |||
lines = sys.stdin.readlines() | |||
print(f"入力された行数: {len(lines)}") | |||
for i, line in enumerate(lines, 1): | |||
print(f"{i}行目: {line.strip()}") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
複数行を入力してください (Ctrl+Dで終了): | |||
Python | |||
Java | |||
C++ | |||
入力された行数: 3 | |||
1行目: Python | |||
2行目: Java | |||
3行目: C++ | |||
<br> | |||
==== 1行ずつ効率的に読み込む ==== | |||
以下の例では、sys.stdinを反復処理して1行ずつ読み込んでいる。<br> | |||
大量のデータを処理する際に効率的である。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import sys | |||
print("文字列を入力してください (空行で終了):") | |||
for line in sys.stdin: | |||
line = line.strip() | |||
if not line: | |||
break | |||
print(f"入力: {line}") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
文字列を入力してください (空行で終了): | |||
Hello | |||
入力: Hello | |||
World | |||
入力: World | |||
<br><br> | |||
== 入力値の検証 == | |||
ユーザからの入力を受け取る際は、入力値が期待する形式かどうかを確認することが重要である。<br> | |||
<br> | |||
==== 文字列の長さを検証する ==== | |||
以下の例では、入力された文字列の長さをチェックしている。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
while True: | |||
name = input("名前を入力してください (2文字以上): ") | |||
if len(name) >= 2: | |||
print(f"ようこそ、{name}さん") | |||
break | |||
print("エラー: 名前は2文字以上で入力してください") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
名前を入力してください (2文字以上): A | |||
エラー: 名前は2文字以上で入力してください | |||
名前を入力してください (2文字以上): Alice | |||
ようこそ、Aliceさん | |||
<br> | |||
==== 正規表現で検証する ==== | |||
以下の例では、正規表現を使用してメールアドレスの形式を確認している。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import re | |||
while True: | |||
email = input("メールアドレスを入力してください: ") | |||
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' | |||
if re.match(pattern, email): | |||
print(f"メールアドレス: {email}") | |||
break | |||
print("エラー: 正しいメールアドレスの形式で入力してください") | |||
</syntaxhighlight> | |||
<br> | |||
# 実行例 : | |||
メールアドレスを入力してください: test | |||
エラー: 正しいメールアドレスの形式で入力してください | |||
メールアドレスを入力してください: test@example.com | |||
メールアドレス: test@example.com | |||
<br> | |||
==== 選択肢から選ばせる ==== | |||
以下の例では、あらかじめ定義された選択肢の中から選ばせている。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
choices = ['python', 'java', 'c++', 'javascript'] | |||
while True: | while True: | ||
language = input("好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): ").lower() | |||
if language in choices: | |||
print(f"選択: {language}") | |||
break | |||
print("エラー: 選択肢から選んでください") | |||
</syntaxhighlight> | |||
</ | <br> | ||
# 実行例 : | |||
好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): Ruby | |||
エラー: 選択肢から選んでください | |||
好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): Python | |||
選択: python | |||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Python,input,キーボード入力,標準入力,getpass,sys.stdin,入力検証,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Python]] | [[カテゴリ:Python]] | ||
2026年2月1日 (日) 07:50時点における最新版
概要
input関数は、キーボードで情報を入力させて、その情報を集めて利用する関数である。
入力された値は常に文字列型として返される。
input関数で入力
input関数では、なんらかの値を入力した時は文字列型で出力される。
これは、数値を入力しても文字列型が返るということである。
print(input())
# 実行例 : Hello World Hello World
また、input関数に引数を与えて入力を促すメッセージを入れることができる。
input("何か入力してください。: ")
# 実行例 : 何か入力してください。: テスト 'テスト'
input関数と条件分岐
以下の例では、input関数と条件分岐を組み合わせている。
入力した値は文字列型になるので、int関数でキャストして整数に変更して、その値を2019と比較している。
year = input("令和元年は西暦何年?:")
int_year = int(year)
if int_year == 2019:
print("正解")
else:
print("間違い")
# 実行例 1 : 令和元年は西暦何年?:2019 正解 # 実行例 2 : 令和元年は西暦何年?:2020 間違い
input関数と反復処理
以下の例では、while文で無限ループさせることで質問を繰り返し、正解した時にbreak文で反復処理を抜ける。
while True:
year = input("令和元年は西暦何年?:")
int_year = int(year)
if int_year == 2019:
print("正解")
break
print("間違い")
# 実行例 : 令和元年は西暦何年?:2020 間違い 令和元年は西暦何年?:2018 間違い 令和元年は西暦何年?:2019 正解
複数の値を入力する
split関数を使用することで、1行で複数の値を入力することができる。
split関数は、文字列を指定した区切り文字で分割してリストとして返す。
引数を省略すると、空白文字 (スペース、タブ、改行など) で分割される。
以下の例では、スペース区切りで複数の値を入力している。
values = input("3つの値をスペース区切りで入力してください: ")
val1, val2, val3 = values.split()
print(f"1つ目: {val1}")
print(f"2つ目: {val2}")
print(f"3つ目: {val3}")
# 実行例 : 3つの値をスペース区切りで入力してください: apple banana orange 1つ目: apple 2つ目: banana 3つ目: orange
以下の例では、カンマ区切りで数値を入力して、整数に変換している。
numbers = input("3つの数値をカンマ区切りで入力してください: ")
num1, num2, num3 = map(int, numbers.split(','))
print(f"合計: {num1 + num2 + num3}")
# 実行例 : 3つの数値をカンマ区切りで入力してください: 10,20,30 合計: 60
数値入力のエラー処理
input関数で数値を入力する場合、ユーザが数値以外を入力する可能性がある。
try-except文を使用することで、エラーを安全に処理できる。
基本的なエラー処理
以下の例では、数値以外が入力された場合にエラーメッセージを表示している。
try:
age = int(input("年齢を入力してください: "))
print(f"あなたは{age}歳です")
except ValueError:
print("エラー: 数値を入力してください")
# 実行例 1 : 年齢を入力してください: 25 あなたは25歳です # 実行例 2 : 年齢を入力してください: abc エラー: 数値を入力してください
正しい入力があるまで繰り返す
以下の例では、正しい数値が入力されるまで繰り返し入力を求めている。
while True:
try:
age = int(input("年齢を入力してください: "))
if age < 0 or age > 150:
print("エラー: 0から150の範囲で入力してください")
continue
print(f"あなたは{age}歳です")
break
except ValueError:
print("エラー: 数値を入力してください")
# 実行例 : 年齢を入力してください: abc エラー: 数値を入力してください 年齢を入力してください: -5 エラー: 0から150の範囲で入力してください 年齢を入力してください: 25 あなたは25歳です
パスワード入力 (getpass関数)
getpass関数を使用すると、入力内容を画面に表示せずに入力を受け取ることができる。
パスワードやその他の機密情報を入力する際に使用する。
getpass関数を使用するには、getpassモジュールをインポートする必要がある。
import getpass
password = getpass.getpass("パスワードを入力してください: ")
print(f"パスワードの長さ: {len(password)}文字")
# 実行例 : パスワードを入力してください: パスワードの長さ: 8文字
※注意
入力中は画面に何も表示されない。
これにより、周囲の人にパスワードが見られることを防ぐことができる。
以下の例では、ユーザー名とパスワードを入力して認証を行っている。
import getpass
username = input("ユーザ名: ")
password = getpass.getpass("パスワード: ")
if username == "admin" and password == "secret":
print("ログイン成功")
else:
print("ログイン失敗")
# 実行例 : ユーザ名: admin パスワード: ログイン成功
sys.stdinを使った入力
sys.stdinを使用することで、複数行の入力や大量データの入力を効率的に処理できる。
複数行の入力を一度に読み込む
以下の例では、sys.stdinを使用して複数行の入力を一度に読み込んでいる。
import sys
print("複数行を入力してください (Ctrl+Dで終了):")
lines = sys.stdin.readlines()
print(f"入力された行数: {len(lines)}")
for i, line in enumerate(lines, 1):
print(f"{i}行目: {line.strip()}")
# 実行例 : 複数行を入力してください (Ctrl+Dで終了): Python Java C++ 入力された行数: 3 1行目: Python 2行目: Java 3行目: C++
1行ずつ効率的に読み込む
以下の例では、sys.stdinを反復処理して1行ずつ読み込んでいる。
大量のデータを処理する際に効率的である。
import sys
print("文字列を入力してください (空行で終了):")
for line in sys.stdin:
line = line.strip()
if not line:
break
print(f"入力: {line}")
# 実行例 : 文字列を入力してください (空行で終了): Hello 入力: Hello World 入力: World
入力値の検証
ユーザからの入力を受け取る際は、入力値が期待する形式かどうかを確認することが重要である。
文字列の長さを検証する
以下の例では、入力された文字列の長さをチェックしている。
while True:
name = input("名前を入力してください (2文字以上): ")
if len(name) >= 2:
print(f"ようこそ、{name}さん")
break
print("エラー: 名前は2文字以上で入力してください")
# 実行例 : 名前を入力してください (2文字以上): A エラー: 名前は2文字以上で入力してください 名前を入力してください (2文字以上): Alice ようこそ、Aliceさん
正規表現で検証する
以下の例では、正規表現を使用してメールアドレスの形式を確認している。
import re
while True:
email = input("メールアドレスを入力してください: ")
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if re.match(pattern, email):
print(f"メールアドレス: {email}")
break
print("エラー: 正しいメールアドレスの形式で入力してください")
# 実行例 : メールアドレスを入力してください: test エラー: 正しいメールアドレスの形式で入力してください メールアドレスを入力してください: test@example.com メールアドレス: test@example.com
選択肢から選ばせる
以下の例では、あらかじめ定義された選択肢の中から選ばせている。
choices = ['python', 'java', 'c++', 'javascript']
while True:
language = input("好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): ").lower()
if language in choices:
print(f"選択: {language}")
break
print("エラー: 選択肢から選んでください")
# 実行例 : 好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): Ruby エラー: 選択肢から選んでください 好きなプログラミング言語を入力してください (Python/Java/C++/JavaScript): Python 選択: python