티스토리 뷰

키즈 노트

키즈노트 #4 10진법 to 2진법 계산

오리지날초이 2023. 11. 26. 11:42
import random
import sys

# 함수 정의: 10진수를 2진수로 변환하는 함수
def decimal_to_binary(decimal_number):
    binary_number = bin(decimal_number)[2:]  # '0b'를 제거한 2진수 변환
    return binary_number

def explain_decimal_composition(decimal_number):
    explanation = ""
    digits = str(decimal_number) #196

    for i, digit in enumerate(digits):
        if i == len(digits) - 1: # 3-1 == 2 
            explanation += f"{int(digit)}*1"
        else:
            explanation += f"{int(digit)}*10^{len(digits) - i - 1}"

        if i < len(digits) - 1:
            explanation += " + "

    return explanation

def explain_binary_composition(decimal_number):
    binary_number = bin(decimal_number)[2:]  # '0b' 제거
    explanation = ""
    length = len(binary_number)

    for i, bit in enumerate(binary_number):

        if i == length - 1:
            explanation += f"{bit}*1"
        else:
            explanation += f"{bit}*2^{length - i - 1}"

        if i < length - 1:
            explanation += " + "
    return explanation


user="키즈초이"

print(f"안녕~~ {user}~~~ 오늘은 두번째 만남이군!")
print("너의 요청으로 컴퓨터 퀴즈를 내주는 김에 지난 번 문제를 변형해서 내주지.")
print("너도 잘 알겠지만... 나의 퀴즈는 절대 쉽지 않을 거라고..")
none = input("어디 한번 도전해보겠어? ")

print("\n좋아 지난번 퀴즈에 이어지는 문제야")
random_decimal = random.randint(1, 100)
print(f"숫자 {random_decimal} 은 말이야 2의 숫자로 바꿀 수가 있어.")
bin_answer = bin(random_decimal)[2:]

composition_explanation = explain_binary_composition(random_decimal)
print(composition_explanation)

print(f"그래서 (10의 숫자) {random_decimal} = (2의 숫자) {bin_answer} 로 표시할 수 있지")
print("ok. 여기까지 기억나? ")
none = input()

print("\n좋아 이번엔 진짜 문제가 나가신다.\n")

random_decimal = random.randint(1, 64)
print(f"이번엔 1부터 63까지 중에서 랜덤 숫자 {random_decimal} 를 네가 직접 2의자리 숫자로 바꾸는거야.")

print(f"예를 들어서 10의 자리 숫자 {random_decimal} 을 2의 자리 숫자로 바꾸면 ")
print(bin(random_decimal)[2:], " 로 바꿀 수 있지. 훗.")

none = input("Can you do it? ")


print("\n자. 이제 진짜 문제야. 너에게 3번의 기회를 줄게.")

random_decimal = random.randint(1, 64)
bin_answer = bin(random_decimal)[2:]

for i in range(1, 4):
    print(f"\n10의 자리 숫자 {random_decimal} 를 2의 자리숫자로 바꿔봐라!!")
    answer = input("정답 : ")

    if str(answer) == str(bin_answer):
        print("\n저저저.. 정답이라니... 놀랍다...")
        print("너의 승리다...")
        none = input()    
        sys.exit(1)
    else:
        print("\n후후후.. 당연히 어렵지..")
        print(f"{i}번 실패하고 {3 - i}번 기회가 남았다.")

    if i == 3:
        print(f"\n후후 결국 내가 이겼군. 정답은 {bin_answer} 이었다구!")
        composition_explanation = explain_binary_composition(random_decimal)
        print(f"{composition_explanation} 을 계산해 보라구") 

        print("나의 승리다 하하하하하")
        none = input()    
        sys.exit(1)
안녕~~ 키즈초이~~~ 오늘은 두번째 만남이군!
너의 요청으로 컴퓨터 퀴즈를 내주는 김에 지난 번 문제를 변형해서 내주지.
너도 잘 알겠지만... 나의 퀴즈는 절대 쉽지 않을 거라고..
어디 한번 도전해보겠어? ㅇㅇ

좋아 지난번 퀴즈에 이어지는 문제야
숫자 65 은 말이야 2의 숫자로 바꿀 수가 있어.
1*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 1*1
그래서 (10의 숫자) 65 = (2의 숫자) 1000001 로 표시할 수 있지
ok. 여기까지 기억나?
응 근데 좀 어려운듯...

좋아 이번엔 진짜 문제가 나가신다.

이번엔 1부터 63까지 중에서 랜덤 숫자 13 를 네가 직접 2의자리 숫자로 바꾸는거야.
예를 들어서 10의 자리 숫자 13 을 2의 자리 숫자로 바꾸면
1101  로 바꿀 수 있지. 훗.
Can you do it? yes

자. 이제 진짜 문제야. 너에게 3번의 기회를 줄게.

10의 자리 숫자 46 를 2의 자리숫자로 바꿔봐라!!
정답 : 10110

후후후.. 당연히 어렵지..
1번 실패하고 2번 기회가 남았다.

10의 자리 숫자 46 를 2의 자리숫자로 바꿔봐라!!
정답 : 101101

후후후.. 당연히 어렵지..
2번 실패하고 1번 기회가 남았다.

10의 자리 숫자 46 를 2의 자리숫자로 바꿔봐라!!
정답 : 101110

저저저.. 정답이라니... 놀랍다...
너의 승리다...
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함