2014-09-08 2 views
0

나는 러시아와 미국 리프터의 다양한 연구에서 경험적 데이터를 기반으로 엘리트 수준의 역도의 예상 피로 수준을 계산하는 코드를 작성하려고 해요Python2.7 : raw_input을 수학

프로그램.

이러한 모든 계산은 리프터 중 중량이 해제 된 것을 기반으로합니다. 이것은 최대 운동량이 심하게 들리면 강도가 높아서 회복 과정을 방해하지 않으므로 훈련 중에 항상 쉽게 검사되는 것은 아닙니다. 이러한 이유로 프로그램의 일부는 단일 세트를 기반으로 한 최대 반복 횟수를 예측할 수 있어야합니다.

문제

완벽하게 돌아갑니다 '의 경우'. 모든 elif는 * 뒤에 소수점을 인쇄하고 menu()를로드합니다. 나는 float() 및 int()를 시도했지만 프로그래밍 능력이 부족한 것 같습니다.

나는 필자의 글이 매우 비효율적이라는 것을 확신한다.

def repmax(): 
clear() 
while True: 
    print "Weight lifted?\n" 
    weight = int(raw_input("> ")) 
    print "\nRepetitions done?\n" 
    reps = int(raw_input("> ")) 
    print "\n" 
    if reps == 1: 
     print "Your estimated 1RM is %s.\n" % weight * 1 
     menu() 
    elif reps == 2: 
     print "Your estimated 1RM is %s." % weight * 0,95 
     menu() 
    elif reps == 3: 
     print "Your estimated 1RM is %s." % weight * 0,90 
     menu() 
    elif reps == 4: 
     print "Your estimated 1RM is %s." % weight * 0,88 
     menu() 
    elif reps == 5: 
     print "Your estimated 1RM is %s." % weight * 0,86 
     menu() 

답변

1

당신은 당신의 부동 소수점 숫자가 잘못된 쉼표 대신 소수점 를 사용하게 : 당신은 괄호 안에 계산을 둘 필요가

print "Your estimated 1RM is %s." % (weight * 0.95) 

참고; 그렇지 않으면 파이썬은 "Your estimated 1RM is %s." % weight의 결과를 곱하려고 시도합니다. 데모 :

>>> "Your estimated 1RM is %s." % (weight * 0.95) 
'Your estimated 1RM is 76.0.' 

실제로 코드를 다소 최적화 할 수 있습니다.

reps_to_factor = [1, 0.95, 0.90, 0.88, 0.86] 

지금 방금 reps에서 하나를 뺄 수있는 권리 요인 얻을 : 고려하는 반복을 매핑 할 목록을 사용

print "Your estimated 1RM is %s.\n" % (weight * reps_to_factor[reps - 1]) 
menu() 

을 더 if..elif 구조가 필요하지 않습니다.

+0

'dict' 또는'0' 슬롯에 더미 (배수가 아닌) 값이있는 0 기반'list'를 사용하는 것이 더 읽기 쉽지 않을 것이라고 생각하지 않습니다. '- 1'을 잊어서 생기는 버그에 대해 걱정해야합니까? (간결하게 설명하기가 조금 더 어려울 수도 있지만 간결하게 거의 모든 것을 설명하는 것이 좋습니다 ...) – abarnert

+0

감사합니다! 나는 괄호를 사용하여 시도했지만 동일한 오류가 발생했습니다. 이제 왜 하하인지 알 수 있습니다. 나는 또한 나의 수학이 틀렸다는 것을 알아 냈다. 1, 1.05, 1.10, 1.12 등을 읽어야한다. 결코 맵을 사용하지 않을 것을 감사드립니다. – Fredrik