2011-08-29 6 views
0

나는 어려운 길을 배우고 파이썬을 배우려고 노력하고 있는데, 은 단지 망치가 아니라을 이해하고있다.총 파이썬 놈 : 왜 작동하지 않습니까?

Very basic Python question (strings, formats and escapes)

하지만, 난 여전히이 방법이 작동하지 않는 이유를 알아 내기 위해 노력하고있어 : 이미 논의 된 바와 같이 나는 그래서 여기에, 운동 (16)에 붙어있어

from sys import argv 

script, filename = argv 


print "Attempting to open the file now." 
print open(filename).read() 

print "We're going to erase %r." % filename 
print "If you don't want that, hit CTRL-C." 

print "If you do want that, hit RETURN." 

raw_input("?") 

print "Opening the file..." 
target = open(filename, 'w') 

print "Truncating the file. Goodbye!" 
target.truncate() 

print "Now I'm going to ask you for three lines." 

line1 = raw_input("line 1: ") 
line2 = raw_input("line 2: ") 
line3 = raw_input("line 3: ") 

print "I'm going to write these to the file." 

linebreak = "\n" 
target.write("%s %s %s %s %s %s") % (line1, linebreak, line2, linebreak, line3, linebreak) 

target.write("the ending line") 

print "And finally, we close it." 
target.close() 

내가 설립했다 linebreak 값이며, target.write 명령에서 line1, line2 및 linebreak 값을 % s와 (과) 호출하고 있습니다. 읽어야 할 때 "line1 \ n line2 \ n line3 \ n"으로 구문 분석하지 않아야합니까?

이것은 아마도 하늘에서 무엇인가를 유지할 것인지 묻는 것과 같습니다. 두꺼운 것에 사과드립니다. 감사!

+2

당신이 "작동하지 않습니다"에 자세히 설명 할 수 있습니까? 예외가 있습니까? 그렇다면 제공하십시오. 그렇지 않다면, 당신이 기대하고있는 것과 실제로 받고있는 것을 설명하십시오. –

+0

이것은 어떤 방법으로 실패합니까? –

+1

그리고 그 기회를 놓치지 않고 추측 할 수 있습니다. 사용중인 편집기가 개행 문자로 \ n을 인식하지 못하고 파일 내용을 확인하기 위해 파일을 다시 열 때 사실'\ r \ n' (캐리지 리턴 + 줄 바꿈)을 찾으십니까? 이는 Windows의 메모장에서 일반적으로 발생합니다. –

답변

9
target.write("%s %s %s %s %s %s") % (line1, linebreak, line2, linebreak, line3, linebreak) 

target.write("%s %s %s %s %s %s" % (line1, linebreak, line2, linebreak, line3, linebreak)) 

해야하지만, 더 나은로 기록 될 것입니다 :

target.write(' '.join(line1, linebreak, line2, linebreak, line3, linebreak)) 
+0

또는'target.write (linebreak.join ([line1, line2, line3]))' –

7

당신이 필요로하는 무엇

TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple' 

을 받고 있다는 것을 가정하는 것은

target.write("%s %s %s %s %s %s" % (line1, linebreak, line2, linebreak, line3, linebreak)) 

, 당신은하지 target.write()의 결과에 문자열에 % 연산자를 사용합니다. target.write()이 유형 인 None을 반환한다는 것을 알게되면 오류 메시지가 더 이해 될 수 있습니다.

0

나는이 몇 일 전, 운동 22 년에 그는 모든 것을 당신을 적어하도록 요청합니다 않았다 지금까지 배운 것을 암기.

더 일찍 그는 그가하는 일을 설명하기 위해 모든 라인에 주석을달라고 요청했습니다. 선에 대해 생각할 필요없이 선이 무엇을하는지 알 때까지는 아마 좋은 습관 일 것입니다.

상태를 어떻게 유지하는지주의하십시오.

프로그래머가되고 싶다면 어휘를 사용하고 어휘를 사용해야합니다.

line1, line2, line3, linebreak를 변수라고합니다. 임시 변수를 지정하거나 = (대입 연산자)를 사용하여 값을 할당합니다.

쓰기는 하나의 기능입니다. 파이썬의 함수는 그 사이에 인수를 취합니다(). 인수의 모든은() 안에 있어야합니다. 예를 들어 당신이 이것을 썼다면 나는 이 당신을 트립하지 않았을 것이라고 확신합니다.

stuffIWantToPrint = line1 + lb + line2 + lb+ line3 + lb #all strings together 
target.write(stuffIWantToPrint) #pass the big string to write 
0

나는 매우 늦었하지만,이 수행 target.write("{line1}\n{line2}\n{line3}\n").format(line1=line1,line2=line2,line3=line3)

관련 문제