2014-12-24 4 views
1

지금은 텍스트 파일에 변수 세트를 저장하고 있습니다. 나는 내 코드가 작동하는지 확인하기 위해 다음과 같은 작업을하고 있지만 10과 같이 두 자리 숫자를 사용할 때마다이 숫자를 최대 숫자로 인쇄하지는 않습니다.최대 숫자가 두 자리 숫자를 무시하는 이유는 무엇입니까?

내 텍스트 파일이 이렇게 보입니다.

tom:5 
tom:10 
tom:1 

최대 값을 5로 출력합니다.

name = input('name') 
score = 4 
if name == 'tom': 
    fo= open('tom.txt','a') 
    fo.write('Tom: ') 
    fo.write(str(score)) 
    fo.write("\n") 
    fo.close() 

if name == 'wood': 
    fo= open('wood.txt','a') 
    fo.write('Wood: ') 
    fo.write(str(score)) 
    fo.write("\n") 
    fo.close() 

tomL2 = [] 
woodL2 = [] 

fo = open('tom.txt','r') 
tomL = fo.readlines() 
tomLi = tomL2 + tomL 
fo.close 
tomLL=max(tomLi) 
print(tomLL) 


fo = open('wood.txt','r') 
woodL = fo.readlines() 
woodLi = woodL2 + woodL 
fo.close 
woodLL=max(woodLi) 
print(woodLL) 
+0

문자열이 아닌 숫자를 비교합니다. 'max'를 사용하기 전에 그것들을'float'으로 변환 할 필요가 있습니다. – Rufflewind

+0

Ok 이렇게하면 다음과 같습니다 : keys.sort (key = float) – pythonlegend232

+0

그렇게 간단한 것은 아닙니다. 파이썬에 관한 한, 문자열은 단지 비 순차적 인 문자 시퀀스입니다. 사람이 읽을 수있는 숫자가 있는지 여부를 이해하지 못합니다. 해당 숫자를 추출하려면 문자열을 명시 적으로 [구문 분석] (https://en.wikipedia.org/wiki/Parsing)해야합니다. – Rufflewind

답변

1

문자열이 아닌 숫자를 비교합니다. max을 사용하기 전에 번호로 변환해야합니다. 예를 들어, 당신은 :

tomL = fo.readlines() 

이 문자열의 목록을 포함합니다 :

['tom:5\n', 'tom:10\n', 'tom:1\n'] 

문자열이 lexicographically을 정렬 (많은 단어를 영어 사전에 주문할 수 얼마나처럼). 당신이 숫자를 비교하려면 먼저 숫자로를 설정해야합니다

는 구문 분석은 다음과 같은 방법으로 이루어집니다
tomL_scores = [int(s.split(':')[1]) for s in tomL] 

:

  • ….split(':')이 같은 콜론을 사용하여 부분으로 문자열을 분리 구분 :

    'tom:5\n'['tom', '5\n']

  • …[1]이를 선택하게된다 목록에서 소자 :

    '5\n'5

  • 목록 이해 [… for s in tomL]가 동작의 시퀀스에 적용된다 :

    ['tom', '5\n']'5\n'

  • int(…)된다 정수에 캐릭터 변환 목록의 모든 요소. int (또는 유사 float이)가 수용 것에 대해 다소 까다 롭고 있습니다

하는 것으로 : 허용 선행과 후행 공백 있지만 (이 유효한 숫자 리터럴의 형식이어야합니다 또는 오류로 거부됩니다). 따라서 ….split(':')[1] 문자열을 받아 들일 수있는 형태로 마사지해야합니다.

이 산출됩니다

[5, 10, 1] 

을 이제, 가장 큰 점수를 얻을 max을 적용 할 수 있습니다.그것은 실제로 전화 기능을 수행하기 때문에 사이드 참고로

, 문은

fo.close 

, 파일을 닫지 것입니다. 함수를 호출하려면 인수가없는 경우에도 인수를 괄호로 묶어야합니다.

fo.close() 
관련 문제