2016-07-16 3 views
0

파일에 쓰는 문장을 추가 할 때까지 제대로 작동하는 일부 코드 (아래)를 작성했습니다.TypeError : 인쇄 할 때 파일에 쓰지 않는 경우에만 지원되지 않습니다.

내가 오류는 형식 오류입니다 : 지원되지 않는 피연산자 유형 (들) %를 : 라인에서 발생하는 'NoneType'과 '플로트'43

무엇 나를 혼란 것은 포기하지 않는다는 사실이다

이 오류는 내가 쓸 때만 똑같은 명령문을 사용하여 인쇄 할 때 발생합니다. 나는이 실수로 다른 사람들을 쳐다 보았지만 내 경우에는 무슨 일이 일어나지 않을 수 있습니다.

필자는 각 줄을 통해 각 쓰기 문을 통해 널리 퍼져 있는지 살펴보기 위해 노력했습니다.

누구든지 올바른 방향으로 나를 지적하면 큰 감사를드립니다.

import time 

timeOfday = int((time.strftime("%H"))) 

if timeOfday < 11: 
    meal = "Breakfast" 
elif timeOfday >=11 and timeOfday <= 5: 
    meal = "Lunch" 
else: 
    meal = "Dinner" 

fileName = meal + " " + (time.strftime("%d%m%Y")) +".txt" 

print "Hello, Please let us know how much your bill was" 
billAmount = float(raw_input(">>")) 

print "How much would you like to tip?" 
tipAmount = float(raw_input(">>")) 

print "How many people are paying?" 
peopleAmount = float(raw_input(">>")) 

if tipAmount > 1: 
    tipAmount = tipAmount/100 

billAndTip = ((billAmount*tipAmount)+billAmount) 
finalTip = (billAmount * tipAmount) 
billDivided = (billAndTip/peopleAmount) 

print "The total bill is %r" % (billAndTip) 
print "Of which %r is the tip" % (finalTip) 

if peopleAmount == 1: 
    print"Looks like you are paying on your own" 

else: 

    print "Each Person is paying: %r" % (billDivided) 


target = open(fileName, 'w') 
# target.write("The bill was %r before the tip \n You tipped %r% \n The total bill was %r \n Split between %r people it was %r each") % (billAmount, tipAmount*100, billAndTip, peopleAmount, billDivided) 
target.write("The bill was %r before the tip") % (billAmount) 
target.write("\n") 
target.write("You tipped %r%") % (tipAmount) 
target.write("\n") 
target.write("The total bill was %r") % (billAndTip) 
target.write("\n") 
target.write("Split between %r people it was %r each") % (peopleAmount, billDivided) 
target.close() 

print "This info has now been saved for you in the file %r" % (fileName) 
+0

'write'의 리턴을 포맷하려고합니다. 'billAmount'를 호출 괄호로 옮깁니다 –

+1

위의 주석을 보내 주셔서 감사합니다. 이 문제가 해결 될 다른 오류가 있지만 해결되었습니다 :) – ImNewToThis

답변

0

난 당신이 그것에게 이중의 %를 만들어 여기에 % 기호를 벗어날 필요가 있다고 생각 :

target.write("The bill was %r before the tip \n You tipped %r%% \n The total bill was %r \n Split between %r people it was %r each") % (billAmount, tipAmount*100, billAndTip, peopleAmount, billDivided) 

@LPK 더 큰 문제를 지적 ("You tipped %r%% \n" 참고.). 이 같은 라인의 각 :

target.write("You tipped %r%") % (tipAmount) 

이 할 필요가 : 여기

target.write("You tipped %r%" % (tipAmount)) 
+0

지금은 해당;) –

+0

안녕하세요 당신이 제공 한 수정 시도했지만 여전히 다음과 같이 오류가보고 :
추적 (가장 최근에 마지막 호출) : 파일 "calc (billAmount) TypeError : %에 대한 지원되지 않는 피연산자 유형 : 'NoneType'및 'float' – ImNewToThis

+0

@ 에서 % ImNewToThis LPK의 의견, 다른 대답 및 방금 만든 편집을 보았습니까? – smarx

0
target.write("The bill was %r before the tip") % (billAmount) 

당신이 target.write(...)의 결과로 % 연산자를 사용하고 있습니다. target.write(...)None을 반환하므로 오류가 무엇을 말하고 있는지 설명합니다.

아마 에 금액을 보간하고target.write(...)으로 전달하고 싶을 것입니다. 그렇게해라!

즉, 쓰기 전에 보간을 수행하기 때문에 쓰기 호출에 괄호 안에 들어갑니다.

+0

안녕하세요 킨들, 의견을 주셔서 감사합니다 위의 smarx의 의견과 함께 귀하의 의견을 많이 설명했다. 모든 작은 도움이됩니다! – ImNewToThis