파이썬으로 Numer0n (누메론) 만들기 part2

14775 단어 게임파이썬Python3

<소개>



파이썬으로 Numer0n (누메론) 만들기 part1 의 계속입니다.

이번에 만든 것



전회는 컴퓨터가 매회 1/720의 확률로 숫자를 맞추려고 했습니다. 이번은 0EAT 0BITE였을 때, 이후 그 숫자를 사용하지 않게 했습니다. 실제로 누메론에서 놀 때도 0EAT 0BITE가 나오면 상당히 유리해진다고 생각합니다.

코드 전체


import random
available_number = [0,1,2,3,4,5,6,7,8,9]

while True:
    my_number = input("0~9の数字を使って3桁の数字を作ってください(重複なし)")
    if my_number.isdigit() and len(set(my_number)) == 3:
        break
times = 0
enemy_number = None
while my_number != enemy_number:
    times += 1
    selected_number = random.sample(available_number,3)
    enemy_number = "".join(map(str,selected_number))
    eat = sum(my_number == enemy_number for my_number, enemy_number in zip(my_number, enemy_number))
    bite = sum(enemy_number in my_number for enemy_number in enemy_number) - eat
    if eat == 0 and bite == 0:
        available_number.remove(selected_number[0])
        available_number.remove(selected_number[1])
        available_number.remove(selected_number[2])
    print("コンピューターが予想した番号:", enemy_number)
    print(f"{times}回目: {eat}EAT {bite}BITE")
    print("----------------------------------------")

print("数字を当てました!!!褒めてください!!!")
print(f"{times}回目で当てられました。")

보충



이전 파이썬으로 Numer0n (누메론) 만들기 part1의 코멘트로 여러가지 어드바이스를 받고, 그것을 기초로 만들었으므로 여기까지 코드가 짧아졌습니다. 이하, 새로운 쓰는 방법을 나름대로 해석한 것을 소개하겠습니다.

그 1 isdigit (6 행째)
· 모든 문자열이 숫자라면 참입니다.
예)
number = "12a"
if number.isdigit():
    print("すべて数字です")
else:
    print("数字以外が混ざっています")
#数字以外が混ざっています

이제 제대로 숫자를 입력했는지 확인하십시오.

그 2set(6행째)
· 중복을 허용하지 않고 요소를 꺼냅니다.
예)
number = "122"
print(set(number))
#{'1', '2'}
print(len(set(number)))
#2

이제 숫자가 중복되었는지 확인합니다.
그 3 random.sample (배열을 꺼내는 장소, 몇 꺼낼까)
・중복을 허락하지 않고 임의의 수치를 새롭게 만들 수 있습니다.
예)
import random
number = [1,2,3,4,5,6,7,8,9]
print(random.sample(number,3))
#[8,5,3]
print(random.sample(number,3))
#[3,5,1]

이것만으로 상당히 코드를 줄일 수 있습니다 ... 편리

그 4 join(13행째)
· 문자열을 연결할 수 있습니다.
예)
word = ["i","z","a","k","o","z","a"]
print("".join(word))
#izakoza

그 5 map(13행째)
· 숫자를 문자열로 변환할 수 있습니다.
예)
number = [3,1,4,1,5]
new_number = map(str,number)
print("".join(new_number))
#31415

이번에는 map을 사용하여 join을 사용할 수 있도록했습니다.

그 6 zip(14행째)
· 2개 이상의 요소를 동시에 취득할 수 있다.
예)
japan = ["りんご","肉","寿司"]
english = ["apple","meat","sushi"]

for japan,english in zip(japan,english):
    print(japan,english)
#りんご apple
#肉 meat
#寿司 sushi

이번은 sum(같은 것이면 더한다, 라고 하는 조건 있음)과 zip을 조합해 EAT를 조사하는데 사용하고 있습니다.

그 7 sum(B in A for B in B)(15행째)
・수치끼리의 중첩을 조사합니다.
예)
A = "123"
B = "234"
print(sum(B in A for B in B))
#2

그 8 remove(삭제하고 싶은 수치)(17~19행째)
· 특정 수치를 삭제합니다.
예)
number = [10,20,30,40,50,60,70,80,90]
number.remove(20)
print(number)
#[10, 30, 40, 50, 60, 70, 80, 90]

이번은 이것으로 0EAT 0BITE가 된 숫자를 이후 사용하지 않게 했습니다.

그 9 캐릭터 라인의 표현(20,21,25행째)
· 문자열을 연결하는 방법입니다.
예)
time = "24時間"
print("一日は",time)
#一日は 24時間
age = 10
print(f"私の年齢は{age}歳です") 
#私の年齢は10歳です

여러 가지 공부해야 할 일이 있습니다 ...

고찰



여기는 part1로 만든 컴퓨터가 몇 번으로 숫자를 맞을 수 있는지 보여줍니다. (가로축이 몇번째로 맞았는지를, 세로축은 빈도를 나타내고 있습니다)시행 회수는 200회입니다.

가로축은 200 단위입니다.

계속해서 이쪽은 part2로 작성한 것입니다.

가로축은 10 단위입니다.

아직 약하지만 part1과 비교하면 상당히 강해졌습니다. 이것 확률을 구하려면 어떻게 하는 것일까・・・

끝에



· 코멘트 뭐든 기다리고 있습니다. 더 강하게 하고 싶어
끝까지 읽어 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기