2017-02-17 3 views
-1

여기에 내가 잘못 코딩하고 모르는하는 두 가지 문제가 있습니다 : 물리학에서컴퓨터 과학 서클?

  1. , 길이 L과 초기 각도 A를 진자를 들어, 시간 T에서 수평 변위 X (T)가 주어진다 화학식

    X (T) = L × COS (A × COS (T × √9.8/L))로 - L × COS (A)

    입력의 두 라인 걸리는 프로그램을 작성; 첫 번째 라인은 L이고 두 번째 라인은 A입니다. 출력은 X (0), X (1), X (2), ..., X (9)의 값을 제공하는 10 개의 라인이어야합니다. 예를 들어 입력 첫 행이 53.1이고 두 번째 입력 행이 0.8이면 출력의 첫 번째 행은 0.0이고 출력의 두 번째 행은 53.1 * cos (0.8 * cos (1 * √9.8/53.1)) - 53.1 * cos (0.8) ~ 2.6689. 여기

    는 학년 제가 수학 문제의 일부를 수행하고 있음을 보여주고 있지만, 내가 무엇을 가지고 :

    이 프로그램
    import math 
    L = float(input()) 
    A = float(input()) 
    for i in range (0, 10): 
        x = L * math.cos(A * math.cos(i * math.sqrt(9.8/L))-L * math.cos(A)) 
        print(x) 
    
  2. 는, 입력의 첫 번째 줄에는 정수 폭이다. 그런 다음 몇 줄의 텍스트가 있습니다. 줄 "END"는 텍스트의 끝을 나타냅니다. 각 텍스트 줄마다 텍스트의 각 줄의 전체 길이가 너비가되도록 왼쪽과 오른쪽에 마침표를 추가하여 가운데 버전을 인쇄해야합니다. (모든 입력 라인의 길이는 최대 너비입니다.) 가운데 맞춤은 가능한 경우 왼쪽에 추가되고 오른쪽에 추가되는 마침표의 수가 같아야 함을 의미합니다. 필요할 경우 오른쪽보다 왼쪽에 한 번 더 허용합니다. 예를 들어, 입력

    여기

    는 정확하지 않지만 나는,이 중 무엇을 :

    width = int(input()) 
    hi=input() 
    while hi != "END": 
        WordInput=input() 
        x=len(WordInput) 
        y=width-x 
        half=y%2 
        if half == 0: 
         a = int(y/2) 
         print("." * a) 
        elif half == 1: 
         b = int(y/2) + 1 
         c = int(y/2) 
         print("." * b,WordInput,"." * c) 
    
+0

1의 경우 마지막 괄호는 수식 뒤에 나타나지 않아야합니다. 2의 경우 예상 출력과 현재 출력을 표시해야합니다. – polku

답변

0

그것은 당신의 입력은, width = int(input("enter width: ")) 같이 텍스트 프롬프트가있는 경우 디버깅 도움이 될 수있는 코드에서 입력 내용이 저장되는 위치를 더 잘 알 수 있습니다.

# 1에서는 문제가 보이지 않지만 물리학을 쓴 이후로 꽤 오래되었습니다. 그레이더가 수학이 잘못되었다고 말하면 사용중인 방정식을 다시 확인하고 코드에 적절한 괄호를 추가하여 올바른 순서의 연산이 이루어 지도록하십시오.

# 2에는 몇 가지 문제가 있습니다. 먼저, 프로그램이 잘못된 횟수를 입력하도록 요청합니다. 루프는 변수 hi에 의존하며 한 번만 할당합니다. 코드가 루프에 들어가면 "END"로 변경되지 않고 루프가 종료되지 않습니다. 그뿐 만 아니라 입력 한 첫 번째 단어 (hi 프롬프트)는 루프의 코드로 간주되지 않으므로 "END"이외의 다른 단어는 무시됩니다.

WordInput=input() 
    while WordInput != "END": 
     # Do your processing and printing code here 
     (...) 
     # Then get some new input at the end of the loop    
     WordInput=input() 

WordInput의 새로운 값이 때 루프가 다시 시작을 평가됩니다 : 당신은이 같은 더 많은 일을 할 것입니다.

둘째, if 문을 확인하십시오. 길이가 짝수 (half == 0)라고 올바르게 판단하지만, 짝수의 경우 실제로 입력 단어를 인쇄하도록 코드를 말하지 않고 마침표 만 사용하십시오. 실제로 여러 개의 유사한 print 서술문을 사용하여 if/else 블록을 이렇게 설정하는 것을 피하는 것이 좋습니다. 돌아가서 하나의 형식을 변경하려면 수동으로 다른 것을 변경하는 것을 기억해야합니다. 코드가 복잡 해짐에 따라 이것이 정말 고통 스러울 것입니다. 따라서 일반적으로 가능한 한 많이 인쇄 명세서를 압축하는 것이 가장 좋습니다.너무 여기에 귀하의 구조를 변경하지 않고 내가 할 것입니다 방법은 다음과 같습니다

if half == 0: 
     a = int(y/2) 
    elif half == 1: 
     a = int(y/2) + 1 
    b = int(y/2) 
    print("." * a,WordInput,"." * b) 

이 방법은, b는 케이스와 상관없이 실행됩니다 같은 인쇄 문 중 하나에 할당됩니다.

셋째로, 코드에 의해 인쇄되고 중앙에 놓인 단어는 공백으로 채워집니다. 이는 print()에 여러 매개 변수를 지정하면 기본적으로 공백으로 결합되기 때문입니다. 이를 무시하려면 separator 매개 변수를 빈 문자열 (또는 필요한 다른 것)으로 변경할 수 있습니다.

>>>print("." * 4, "Hey", "." * 4) 
.... Hey .... 

>>>print("." * 4, "Hey", "." * 4, sep="") 
....Hey.... 
0

1. 괄호가 잘못되었습니다!

import math 
L = float(input()) 
A = float(input()) 
for i in range (0, 10): 
    x = L * math.cos(A * math.cos(i * math.sqrt(9.8/L)))-L * math.cos(A) 
    print(x)