python でのユーザー入力の受け取り方、整数、少数、分数、複素数

Python

ではユーザーの入力を受け取るプログラムを書いてみます。

ユーザーさんが入力で困らないように、指示ができるようにするのが目的です。

この記事は以下のような人におすすめ。

  • ユーザ入力の基本が知りたい
  • ユーザー入力を指定したい
  • 分数の入力を受け取りたい
  • 複素数の実装に応用したい

プログラミング無料体験はこちら↓↓↓


ユーザー入力の基本

まずは変数nameに「あや」という名前を格納しましょう。

 

name = "あや" 

print(name) 
あや

これではユーザーさんに名前を入れてもらうという本来の目的を達成できません。

そこでinput()関数を使って、ユーザーさんに好きな名前を入れてもらいましょう。

name = input() 

print(name) 
あや 

あや

変数ネームをinput()関数で定義すると、ユーザー7入力ができるようになるので、そこに任意の名前を入れればOK。

ユーザー入力を指定する

もう少しユーザーが入力しやすいように、input()関数を使ってプログラムを書いてみましょう。

input() 関数のカッコ内に、ユーザーへの支持を入力します。

name = input("名前を入力してください: ") 

print(name) 

名前を入力してください: あや 

あや

「名前を入力してください」という指示をプログラムに組み込むことで、ユーザーへの指示を表現することができます。

名前だけではなく、数字でも行うことができます。

number = input("数字を入力してください: ") 

print(number) 数字を入力してください: 65 
65

ではこの変数number を使った足し算はできるのでしょうか?

足し算の答えをansという変数に定義して計算してみましょう。

ans = number + 10 
--------------------------------------------------------------------------- 
TypeError                             Traceback (most recent call last) 
<ipython-input-26-5ab6ac469f14> in <module> ----> 
1 ans = number + 10 

TypeError: can only concatenate str (not "int") to str

エラーのタイプは「TypeError」で「can only concatenate str (not “int”) to str」。

つまり「integer(整数)」どうしでなければ、連結できないと言っていますね。

そのため「numer」をint型に変換してあげる必要があります。

number = int(input('数値を入力してください:')) # integer(整数)に定義
数値を入力してください。65             # 任意の数を入力
65
ans = number +10
print(ans)
75

無事に計算できました。

次は、整数および浮動小数点数が入った数字を入れられるようにしてみましょう。

その場合、float 型で定義します。

number = float(input('数値を入力してください: ')) 
数値を入力してください: 65.5 
65.5 

ans = number +10 
print(ans) 
75.5

では、浮動小数点数ではなく整数を入力してみましょう。

整数65を入力しても、float型の出力を定義しているので出力は65.0とfloat型になります。

number = float(input('数値を入力してください: ')) 
数値を入力してください: 65
65.0 

ans = number + 10 
print(ans)  
75.0

そして計算自体もエラーが出ませんね。

分数の入力を受け取る

では、分数をいきなり入れるとどうなるかを見てみましょう。

number = input("数値を入力してください:") 
print(number) 

数値を入力してください:3/4 
3/4

普通にinput()関数だけを使って、ユーザー入力を指定すると3/4のようなstr型(文字列)として入出力が可能になります。

しかし、整数(int型)で定義すると割り切れる分数だとしてもエラーが出ます。

number = int(input("数値を入力してください:")) 
print(number) 数値を入力してください:2/4 

--------------------------------------------------------------------------- 
ValueError                                Traceback (most recent call last) <ipython-input-35-23a87a2e94ac> in <module> 
----> 1 number = int(input("数値を入力してください:")) 
    2 print(number) 

ValueError: invalid literal for int() with base 10: '2/4'

ではflot型にした場合どうなるかを見てみましょう。

number = float(input("数値を入力してください:")) print(number) 数値を入力してください:3/4 

--------------------------------------------------------------------------- 
ValueError                                Traceback (most recent call last) <ipython-input-36-a55739ca0a50> in <module> 
----> 1 number = float(input("数値を入力してください:")) 
   2 print(number) 

ValueError: could not convert string to float: '3/4'

こちらもやっぱりエラーが出ました。

その場合「try…except」ブロックを使って下記のように記述し、整数 (integer) または 浮動小数点数(float)以外が入力された場合、入力者に間違いを知らせます。

try: 
  a = float(input('数値を入力してください: ')) 
except ValueError: 
  print ('無効な数値が入力されました: ')

では実際に、入力してみましょう。

 

try: 
  a = float(input('数値を入力してください:')) 
except ValueError: 
  print('無効な値が入力されました') 

数値を入力してください:3/4 
無効な値が入力されました

 

3/4の入力は無効というメッセージが出ましたね。

3/4などの分数を入力する場合は「fractions」モジュールから「Fraction」をインポートします。

from fractions import Fraction 
number=Fraction(input('分数を入力して下さい:')) 
分数を入力して下さい:3/5 
3/5

基本的な記述は同じですが、Fractionクラスを使うことで分数を無事格納できました。

では同じく、Fractionクラスを使って、3/0を格納できるかやってみましょう。

number=Fraction(input('分数を入力してください:'))
分数を入力してください:3/0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
 in 
----> 1 b=Fraction(input('分数を入力してください:'))

~\anaconda3\lib\fractions.py in __new__(cls, numerator, denominator, _normalize)
    176 
    177         if denominator == 0:
--> 178             raise ZeroDivisionError('Fraction(%s, 0)' % numerator)
    179         if _normalize:
    180             if type(numerator) is int is type(denominator):

ZeroDivisionError: Fraction(3, 0)

当然できないわけですね。

「ZeroDivisionError」が出たのですが、この場合も「try…except」で入力者に間違いを知らせます。

try:
    b=Fraction(input('分数を入力してください: '))
except ZeroDivisionError:
    print('無効な値です。')

分数を入力してください: 3/0
無効な値です。

というように、3/0は無効な値と知らせることができるようになりました。

複素数への応用

同じように、複素数にも応用できますね。

numker=complex(input('複素数を入力してください: '))
print(number)
複素数を入力してください: 3+2j
(3+2j)

複素数の数字と記号、文字の間などにスペースがあると「ValueError」が出るので、間違いを指摘するように記述します。

try:
    c=complex(input('複素数を入力してください: '))
except ValueError:
    print ('無効な値です。数字間のスペースなどを見直してください。')

複素数を入力してください: 3 + 2j
無効な値です。数字間のスペースなどを見直してください。

こんな感じで、ユーザー入力でした。

プログラミング無料体験はこちら↓↓↓



関連記事↓↓↓

Python でラベル付けと分数計算をやってみた。
Pythonを使って数学の勉強をしてみようということで、この記事では名前と数の割り当て、分数の実装の仕方について、書いています。この記事でわかること 名前と数の割り当て 数値型の確認 分数の実装の仕方名前と数の割り当て数学では名前に数
Python でデータ分析:DataFrameの整理とデータ型の変換
Python でCSVファイルを読みこんでもこのままでは分析に使えないので、データの整形が必要になります。この記事は以下のような人におすすめ。 pandas で不要なヘダーの削除方法を知りたい numpyを使ってセル内の不要な記号を消し

コメント

タイトルとURLをコピーしました