2017-12-17 4 views
1

저는 코드가 끔찍하고 해결하기가 쉽지 않은 경우에 대단히 파이썬과 프로그래밍에 익숙합니다.Integer Range 사이에서 문자열을 출력하는 방법 - Python 3

나는 사용자가 선택할 수있는 3 가지 입력을 기반으로 직원 데이터를 인쇄 할 수 있도록 코드를 작성했습니다. 사용자가 사용할 수있는 옵션은 급여 번호를 기준으로 직원을 선택하는 것입니다. 최소 및 최대 급여 범위; 그들의 직책.

서식을 지정하는 데 두 가지 기능을 사용했습니다. 첫 번째는 텍스트 파일의 줄을 목록으로 변환 한 다음 두 번째 기능은 개별 목록을 가져 와서 형식을 지정합니다.

그런 다음 코드는 사용자에게 파일 이름을 입력하도록 요청합니다. 파일을 찾을 수 없으면 다시 시도합니다. 올 Y 르면 파일이로드 된 후 함수를 통해 실행되어 깔끔한 표를 인쇄합니다.

그런 다음 특정 직원을 선택하기 위해 어떤 방법을 선택할지 묻는 메시지가 표시됩니다. 그들은 4 가지 옵션이 주어지며 처음에는 3 가지가 언급되고 4 번은 프로그램을 끝내는 것입니다.

프로그램을 끝내기위한 네 번째 옵션과 동일하게 번거롭지 않게 직원을 인쇄하는 첫 번째 옵션을 성공적으로 얻을 수있었습니다. 거의 세 번째가 완성되었으므로 쉼표없이 이름을 인쇄하는 방법을 찾아야합니다. 내 문제는 두 번째 옵션 내에 있습니다 : '£'기호를 포함해야하므로 범위가 정수가 아닌 경우 사용자가 입력 한 최소 및 최대 급여 범위 사이에있는 직원 및 해당 세부 사항을 인쇄하는 방법 ?

다음은 코드입니다. minpay가 £ 50,000하고 £ 60000

을 maxpay한다면

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) 

결과는 (예) 같은 Simpson, Bart 12345 Consultant £55000해야 - 난 그냥 단서가 없기 때문에 그것이 제대로 작동하는 방법을 프로그램에서 가장 큰 덩어리입니다

편집 : 작동되도록 관리했습니다. 코드는 다음과 같습니다.

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가 포함되어야합니다. [여기] (https://stackoverflow.com/help/mcve)에 대한 내용을 읽을 수 있습니다. 또한 '급여'는 'int'가 될 수 있습니다. 'str'으로 변환하고 인쇄 할 때 관련 기호를 추가하십시오. – jjj

+0

내가 틀렸다면 나를 정정하십시오.하지만 len (minpay) 또는 len (maxpay)> maxSalary :'당신이 예상하는대로 해결할 것이라고 생각하지 않습니다.'valueOne> maxLimit 또는 valueTwo> maxLimit :' –

+0

과 같이 각 값을 별도로 확인해야합니다. 코드 스 니펫을 좀 더 작고 읽기 쉽게 만들려고했습니다. 지난 시간 전체를 복사하는 것에 대해 미안합니다. – deiviux90

답변

0

문자열의 모든 "£"기호를 ""로 바꿀 수 있습니다.

YourString.replace("£", "") 
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) 오류가 발생하지 않는 경우 해당 비트가 다음 for 루프의 실행을 막을 수 있습니다. Integer를 반환하면 문자열에 대해 물음표를 표시합니다. 내 컴퓨터의 파이썬 intepreter는이 조건에 만족하지 않습니다 (TypeError : '<'는 'int'와 'str'인스턴스간에 지원되지 않습니다) ) – Gianluca

관련 문제