2017-12-17 9 views
0

私はユーザーが変換に対応する数値を入力する変換プログラムを作成しました。例えば。ユーザーが1を入力すると、コードはkmからマイルへの変換を実行します。文字列入力を評価して関数を実行する

if choice == 1: km = float(input("Enter the amount of kilometres: ")) print(str(kmtomiles(km))+" miles")

私が悪いと、あなたのコードを壊すするので、多くの可能な方法があるので、それが正しい変換を行います

+0

ユーザーは「25cm to inches」という文章全体を入力しますか? –

+0

はい、または12キロメートルからキロメートルのような他の変換@ Ramesh-X – Richard

+0

入力文字列を分割することでこれを行うことができます。しかし、ユーザーが単語のスペルを間違えた場合、コードは機能しません。したがって、ユーザーが最初に必要とする変換のタイプをユーザーに要求してから、値を入力するように要求するとよいでしょう。 –

答えて

1

入力検証が難しいものであることをユーザが25cm to inchesに入るので、もしこれを作りたいです入力。良いコードは、物事がうまくいかない可能性のあるすべての方法を考慮する必要があります。特定のユースケースの場合、目的の入力が「25cm〜インチ」、またはいくつかのバリエーションがある場合は、という名前のグループをpython regexモジュールとという名前のグループを使用して関連フィールドを抽出できます。例を以下に示します。おそらくこれをtry exceptブロックに入れて、一致するものが見つからなければ、再びユーザーにプロンプ​​トを出すか、またはそこから抜け出すようにしてください。これは、構築するための最小限の例に過ぎません。辞書fieldsには、別のコンバータ機能で使用する関連情報が含まれています。

#input.py 
import re 

pattern = "(?P<num>[0-9]+)\s*(?P<current_unit>\w+) to (?P<desired_unit>\w+)" 

while True: 
     try: 
      convert_string = input("What to you want to convert? (press(q) to quit): ") 
      if convert_string == 'q' or convert_string == 'Q': 
       break 
      m = re.search(pattern, convert_string) 
      fields = m.groupdict() 
     except AttributeError: 
      print("Sorry, invalid input, please try again(or enter q to quit): ") 
      continue 
     if convert_string == 'q' or convert_string == 'Q': 
      break 
     if fields is None: 
      continue 
     else: 
      print("You want %(num)s %(current_unit)s to be converted to %(desired_unit)s" % fields) 
      break 

$ python3.4 input.py 
What to you want to convert? (press(q) to quit): 25cm to inches 
You want 25 cm to be converted to inches 
$ python3.4 input.py 
What to you want to convert? (press(q) to quit): 340lb to kgs 
You want 340 lb to be converted to kgs 
$ python3.4 input.py 
What to you want to convert? (press(q) to quit): lb to kgs 
Sorry, invalid input, please try again(or enter q to quit): 
What to you want to convert? (press(q) to quit): q 
$ python3.4 input.py 
What to you want to convert? (press(q) to quit): lb to kgs 
Sorry, invalid input, please try again(or enter q to quit): 
What to you want to convert? (press(q) to quit): 240 lb to kgs    
You want 240 lb to be converted to kgs 
+0

パターン文字列を説明できますか? – Richard

+0

カッコ内の任意の式は、キャプチャしたい一致した文字列の特定の部分を表します。これらはグループと呼ばれます。自分の位置でキャプチャするか、ここで行ったように名前を付けることができます。名前付きグループは?P で始まります。 "name"は辞書のキーになります。 [0-9] +は任意の桁数を取り込み、少なくとも1回は(+)表示されなければならないため、入力に数字がない場合は一致しません。 \ s *は0個以上の空白にマッチし、\ w +は1個以上の単語にマッチします。正の整数には\ d +、浮動小数点数には\ d +(\。\ d *)?\。\ d +を使用することもできます。 – SigmaPiEpsilon

関連する問題