2017-12-17 19 views
1

私はPythonとプログラミング一般にはとても新しいので、コードがひどく、問題はむしろ簡単に解決できれば嬉しいです。整数範囲間の文字列を印刷する方法 - Python 3

私は、ユーザーが従業員のデータを3つの異なる入力に基づいて印刷することを許可するコードを作成しました。これらの入力から選択することができます。 ユーザーが使用できるオプションは、給与計算番号に基づいて従業員を選ぶことです。最低および最高給与範囲。彼らの仕事のタイトル。

私は書式設定のために2つの関数を作成しました。最初のものはテキストファイルの行をリストに変換し、2つ目の関数はそれらの個々のリストを取得してフォーマットします。

コードは、ユーザーにファイル名の入力を要求します。ファイルが見つからない場合、ファイルは再試行されます。それが正しければ、ファイルが読み込まれ、次に機能を実行してきれいな表を印刷します。

次に、特定の従業員を選択するためにどの方法を選択するか尋ねられます。彼らは4つのオプションが与えられ、3つは最初に言及され、4つ目はプログラムを終了することです。

私は、プログラムを終了するための4番目のオプションと同じように、面倒なく従業員を印刷するための最初のオプションを正常に取得できました。私はほぼ3番目のものを完成させました。名前をカンマなしで印刷する方法を見つける必要があります。 私の問題は2番目の選択肢の中にあります。従業員とその詳細が、 '£'記号を含む必要があるため、範囲が整数でない場合、ユーザーが入力した最小給与範囲と最大給与範囲の間にある場合、 ?

ここにコードがあります。私はちょうどそれが正常に動作させるためにどのよう見当もつかないので、それはプログラムの最大のチャンクだ -

def detailsPrint(field) : #takes tuple and prints 
print("{:30}" "{:6}" "{:15}" "{:7}".format(field[3] + ", " + field[4], field[0], field[2], "£" + field[1])) 

if display == 2 : 
     maxSalary = "£1000000" 
     minpay = input("Enter the minimum pay : ") 
     maxpay = input("Enter the maximum pay : ") 
     if len(minpay) and len(maxpay) < maxSalary : 
      for s in employeeList : 
       if s[1] >= minpay : 
        detailsPrint(s) 

結果がminpayは£50000であることをした場合(例)Simpson, Bart 12345 Consultant £55000ようなものになると£60000

をmaxpay必要があります

編集:それを機能させるために管理されます。ここでは、文字列の「」への標識をすべてを置き換える「£」でしたコード

if display == 2 : 
     x = False 
     maxSalary = 1000000 
     minpay = int(input("Enter the minimum pay: ")) 
     maxpay = int(input("Enter the maximum pay: ")) 
     if int(minpay) > int(maxSalary) or int(maxpay) > int(maxSalary) : 
      x = False 
      print("No employees earn over £1000000. Try again.") 
     if int(minpay) or int(maxpay) < int(maxSalary) : 
      for s in employeeList : 
       if int(s[1]) >= minpay and int(s[1]) <= maxpay : 
        detailsPrint(s) 
        x = True 
     if x == False : 
      print("No employees could be found within that range. Try again") 
      print("\n") 
+2

あなたの質問にはmcveが含まれていなければなりません。あなたは[here](https://stackoverflow.com/help/mcve)について読むことができます。また、 'salary'は' int'でもかまいません。それを 'str'に変換し、それを印刷したいときに関連するシンボルを追加するだけです。 – jjj

+0

もし私が間違っていたら私を訂正してください。もしあなたが期待している通りに 'len(minpay)またはlen(maxpay)> maxSalary:'が解決するとは思いません。'if valueOne> maxLimitやvalueTwo> maxLimitのように、それぞれの値を別々にチェックする必要があります。' –

+0

コードスニペットを少しコンパクトにして読みやすくするために、私は試しました。前回のこと全部をコピーして申し訳ありません。 – deiviux90

答えて

2

最も簡単な解決策:あなたの条件で動作するソリューションは、ラインに

のようなもので

if len(minpay) or len(maxpay) > maxSalary :

を変更することです£炭のため;-)

を聞きません

if int(minpay[1:]) > int(maxSalary[1:]) or int(maxpay[1:]) > int(maxSalary[1:]) :

文字列の数値をチェックします(あなたの状態はどうにか私には間違っているようです)

+0

そのビットは間違った答えが入力されないようにするだけで、あまり心配していません。正確な従業員を見つけて印刷するはずのセクションの詳細は – deiviux90

+0

です。len(minpay)とlen(maxpay)というエラーが出ない場合は、 Integerを返し、文字列に対して尋ねる。私のマシン上のPython intepreterはこの条件を嫌っています(TypeError: '<'は 'int'と 'str'のインスタンス間ではサポートされません) ) – Gianluca

関連する問題