개발일기 [Python 파이썬]

[파이썬 평균값] 구하기: 반올림 소수점 버리기

neullo 2024. 3. 5. 20:15

평균값  초급

1. 배열의 평균값 total = sum(numbers) average = total / len(numbers)

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return 하도록 solution 함수를 완성해 주세요. 

def solution(numbers):
    # 주어진 배열의 원소들의 합을 계산합니다.
    total = sum(numbers)
    # 배열의 길이로 나누어 평균을 구합니다.
    average = total / len(numbers)
    # 평균값을 반환합니다.
    return average

# 테스트를 위한 입력값
numbers = [1, 2, 3, 4, 5]
# 함수 호출 및 결과 출력
print(solution(numbers))

 

입출력 예

numbers result

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 94.0

입출력 예 설명

입출력 예 #1

  • numbers의 원소들의 평균값은 5.5입니다.

입출력 예 #2

  • numbers의 원소들의 평균 값은 94.0입니다.

 

평균값  중급

함수로 정의된 평균 계산을 반환하는 코드

이 코드는 리스트 numbers에 있는 숫자들의 평균을 계산한 후, 소수점 첫째 자리에서 반올림한 정수를 반환합니다. 함수로 정의되어 있으므로 이 코드를 실행하려면 다른 곳에서 solution 함수를 호출해야 합니다.

def solution(numbers):
    total = sum(numbers)
    average = total / len(numbers)
    return round(average)  # 반올림하여 반환

소수점을 버린 정수 출력을 원할때는 int()

int함수는 소수점을 버리고 정수만 남긴다. 만약 5.5와 같이 소수점을 포함하지 않고, 정수를 반환하기를 원한다면 평균값을 낼 때의 average 변수를 정수로 변환하면 된다. 이를 위해 int()를 사용해 소수점 이하 숫자 버리고 정수만 남긴다. 

def solution(numbers):
    total = sum(numbers)
    average = total / len(numbers)
    return int(average)  # 정수로 변환하여 반환

numbers1 = [3, 17, 1, 39, 8, 41, 2, 32, 99, 2]
numbers2 = [22, 8, 5, 123, 7, 2, 63, 7, 3, 46]
numbers3 = [6, 63, 2, 3, 58, 76, 21, 33, 8, 1]

print(solution(numbers1))
print(solution(numbers2))
print(solution(numbers3))

 

소수점을 반올림한 정수 출력을 원할때는 round()

 

round 함수는 소수점 첫째 자리에서 반올림한 정수를 출력하도록 할 수 있다. 이를 위해서는 평균을 구한 후에 반올림하여 정수로 변환하면 된다.

def solution(numbers):
    total = sum(numbers)
    average = total / len(numbers)
    return round(average)  # 반올림하여 반환

numbers1 = [3, 17, 1, 39, 8, 41, 2, 32, 99, 2]
numbers2 = [22, 8, 5, 123, 7, 2, 63, 7, 3, 46]
numbers3 = [6, 63, 2, 3, 58, 76, 21, 33, 8, 1]

print(solution(numbers1))
print(solution(numbers2))
print(solution(numbers3))

 


 

 

평균값  심화

입력받은 숫자로 평균을 계산하여 바로 출력하는 코드

이 코드는 테스트 케이스의 개수를 입력받고, 그 수만큼 10개의 수를 입력받아 평균을 계산하고 출력한다. 이 코드는 함수가 아니며, 바로 실행되는 코드.

 

최종 코드는 다음과 같다. 밑에서 하나씩 자세히 보자.

T = int(input())  # 테스트 케이스의 개수 입력

for t in range(1, T + 1):
    numbers = list(map(int, input().split()))  # 10개의 수 입력받아 리스트로 저장
    average = round(sum(numbers) / 10)  # 평균값 계산 후 소수점 첫째 자리에서 반올림
    print(f"#{t} {average}")  # 결과 출력

 


1. 먼저 input( ) 사용자로부터 테스트 케이스의 개수를 입력받기

그리고 앞에 int( ) 함수를 넣어 입력된 값을 정수로 변환한다. 즉 사용자가 케이스 개수를 입력하는 모양으로 T=int(input()) 가 된다.

T=int(input())

 


 

2. 케이스마다 결과를 출력할 때 '#'과 함께 테스트 케이스 번호 출력 설정.

for는 반복문이니까 10개 숫자가 들어있는 3개 세트를 반복하기 위해서 범위를 정해준다. 여기서 범위를 정할 때 아래와 같이 테스트 #1번의 답은 24 테스트 #2번의 답은 29 테스트 #3번의 답은 27과 같이 구분을 해주기 위해 레인지를 사용한다.

for t in range(1,T+1):
#1 24
#2 29
#3 27

 

여기서 T가 3이라면 range(1, T + 1)은 1, 2, 3 세 개의 숫자를 생성한다.
만약 +1을 하지 않는다면 range(1, T)은 1부터 2까지의 범위를 생성한다. 


3. 공백으로 구분된 10개의 수를 입력받고, 이를 리스트로 변환

    numbers =list(map(int, input().split()))

 

숫자들 리스트로 저장
5. numbers 변수에는 입력받은 숫자들이 리스트로 저장됩니다.

문자를 정수로 변환한 후 리스트로 만들기
4. list(...)는 정수로 변환된 값들을 리스트로 만듭니다.
3. map(int, ...)는 분리된 문자열들을 정수로 변환합니다.

사용자로 받은 문자를 공백으로 분리해서 리스트 원소로 만들기
2. input() 함수로 사용자로부터 문자열을 입력받습니다.
1. split() 함수로 문자열을 공백을 기준으로 분리한 후, 각각의 문자열을 리스트의 원소로 만듭니다.

 

 

Q. '잠깐' 여기서 왜 input().split()을 넣나요?
A. input().split()은 사용자로부터 입력을 받고, 공백을 기준으로 문자열을 분리하여 리스트로 만드는 역할을 합니다.

여기서 split() 메서드는 문자열을 분리하여 리스트로 만들 때 사용되며, 기본적으로는 공백을 기준으로 분리합니다. 즉, 사용자가 입력한 문자열을 공백을 기준으로 나누어 리스트로 만들어줍니다.

예를 들어, 사용자가 "3 17 1 39 8 41 2 32 99 2"와 같은 문자열을 입력하면,
input().split()은 이를 ["3", "17", "1", "39", "8", "41", "2", "32", "99", "2"]와 같은 문자열 리스트로 만들어줍니다.

 


4.  소수점 올려서 평균값 구하기

평균을 구하려면 = round 반올림을 이용하면 된다. 발올림할 숫자 안에는 숫자를 모두 더한 sum을 총 개수 10으로 나누면 된다.

average = round(sum(numbers) / 10)  # 평균값 계산 후 소수점 첫째 자리에서 반올림

 

or

 

만약 내가 구하고 싶은 숫자 세트가 모두 10개가 아닌 다양한 갯수로 이루어져 있다면 (어떤건 9개, 어떤건 10개, 어떤건 4개등) 이럴때는 숫자의 갯수를 뜻하는 len을 사용한다.

average = round(sum(numbers) / len(numbers))  # 10개의 수의 평균을 구하기 위해 len(numbers)를 사용

 

 


5. 결과 출력

반올림된 평균값을 출력해 달라고 요청하면된다.

    print(average)  # 결과 출력

 

or

 

f"#{t} {average}"는 파이썬의 f-string이라는 기능을 사용한 문자열 포맷팅으로 이를 이해하기 위해서는 몇 가지 개념을 알아야 합니다.

    print(f"#{t} {average}")

 

  1. f #은 문자열 내에 변수나 표현식을 삽입할 수 있는 특별한 기호. 이를 f-string에서 사용할 때는 변수나 표현식을 {} 안에 넣어줍니다.
  2. t는 현재 반복 중인 테스트 케이스의 번호를 나타냅니다. #2번 답 29
  3. average는 해당 테스트 케이스에서 계산한 평균값을 나타냅니다.

그러므로 f"#{t} {average}"은 현재 반복 중인 테스트 케이스의 번호와 해당 테스트 케이스에서 계산한 평균값을 문자열로 만들어 줍니다.

예를 들어, t가 1이고 average가 20이라면, f"#{t} {average}"은 #1 20이라는 문자열을 만들어 줍니다.

 

***왜 f를 쓰나요? 예를 들어, 변수 name에 "Alice"라는 값을 가지고 있고, age에 30이라는 값을 가지고 있다면, f"My name is {name} and I'm {age} years old."라는 f-string은 "My name is Alice and I'm 30 years old."라는 문자열을 생성합니다. 더 많은 예시는 다음글을 참고해주세요. 긴글을 한줄로 줄여쓰는 팁은 여기에 있습니다.

 

파이썬 꿀팁: 긴 코드 한줄로 줄여쓰기

파이썬을 이용하면 한 줄로 간단히 줄여 쓸 수 있다는 장점이 있다. 예를 들어, 3이라는 숫자가 홀수인지 짝수인지 알고 싶다. 먼저 (1) 숫자(num)는 3이야 라고 알려주고, (2) 규칙을 알려준다: 조건

neulo.tistory.com

 

[Python for & f]for (단순 반복 나열) or f-string (직관적인 문 만들기)

'희수 23'이 아닌 '희수은 23점입니다'와 같이 완성된 문장을 출력(print) 하고 싶을 때 2가지 방법이 있다. 첫째, 풀어쓰기: print(name + '는' + score + '점 입니다') 라고 나열해 붙여서 print 해줄 수도 있

neulo.tistory.com

 

 

 


정수 리턴

 

실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.

def solution(flo): 
    return (int(flo))

입출력 예

flo result

1.42 1
69.32 69