2012-12-01 4 views
0

나는 내 컴퓨터 과학 수업을 위해 파이썬으로 바위, 종이, 가위 게임을 만들고있다. (나는 파이썬 33 유휴를 사용하고있다.) 나는이 대본을 썼다. 그러나 내가 그것을 실행하고 나의 선택을 할 때 그것은 아무것도하지 않는다. 도와주세요. 그리고 내가 틀린 곳을 말해줘.가위 바위, 종이 가위, 파이썬

from random import choice 
cpu = choice(('rock','paper','scissors')) 
p1 = input(' rock, paper, or scissors? ') 
rock = 1 
paper = 2 
scissors = 3 
if(cpu == rock)and(p1 == rock): 
    print('You Tied') 
elif(cpu == rock)and(p1 == paper): 
    print('You Win') 
elif(cpu == rock)and(p1 == scissors): 
    print('You Lose') 
elif(cpu == paper)and(p1 == rock): 
    print('You Lose') 
elif(cpu == paper)and(p1 == paper): 
    print('You Tied') 
elif(cpu == paper)and(p1 == scissors): 
    print('You Win') 
elif(cpu == scissors)and(p1 == rock): 
    print('You Win') 
elif(cpu == scissors)and(p1 == paper): 
    print('You Lose') 
elif(cpu == scissors)and(p1 == scissors): 
    print('You Tied') 
+0

코드 블록을 수정할 수 있습니까? (공백 교정이기 때문에 편집 할 수 없습니다); 즉, "from"가져 오기 라인에 선행 공백이 없어야합니다. –

+0

가독성을 개선하기 위해 편집 됨. –

+0

@GiulioMuscarello 글쎄, 코드를 수정할 수도 있습니다. –

답변

0

cpu 중 하나 'rock', 'paper' 또는 'scissors',하지만 당신은 단지 1, 23과 비교 다음은 스크립트입니다. 이것은 아마도 주요 문제 일 것입니다.

수정하려면 cpu = choice((1, 2, 3)) 할 수 있습니다.

또는 다른 방법으로 주위에, 문자열 리터럴이 아닌 정수로 비교 : 또한

if cpu == 'rock' and p1 == 'rock': # note the quotes 

, 당신은 넥타이 세 if의이 때 하나가 있어야 :

if cpu == p1: 
    print('You tied') 
+0

아직 없습니다. 마치 그것과 elif atatements를 무시하는 것처럼 –

+0

@LarryLynnGlasper 프롬프트에서'p1'을 위해 무엇을 입력합니까? –

1

여기에 당신을위한 숙제 = P

몇 가지 정오표는 :

1 - 바위, 종이 및 가위는 상수이므로 절대로 바뀌지 않으므로 PEP 8을 따라 모든 대문자로 쓰는 것이 가장 좋습니다.

2 - 코드의 가독성을 높이기 위해 공백을 사용하는 것을 두려워하지 마십시오. 원래 당신은 모든 것을 함께 묶었습니다. 그것은 그것이 논리적 인 부분으로 생겼 경우 읽기 좋다 (읽기 및 PEP 8 따라갈 - 대단히 도움이 될 것입니다 파이썬 스타일 가이드 다음을!)

3 - 당신은 원래했다 :

cpu = choice(('rock','paper','scissors')) 

가 만드는 바위, 종이 및 가위 STRINGS - 옵션 주위에 넣은 ''에 주목하십시오. 무작위로 선택한 옵션을 평가하려면 먼저 CONSTANTS를 인스턴스화 한 다음 컴퓨터에서 해당 옵션을 선택해야합니다. 따라서 아래 버전을 보면위로 CONSTANTS를 이동합니다.

4 - 당신이 p1을 가졌을 때 나는 매우 짜증이났다. (내 잘못이 아니었다. 내 폰트의 잘못이 아니었다.) 나는 pL처럼 그것을 읽었다. 이 이유. 대신 player_one을 사용했습니다 (변수 이름은 좀 더 설명적이며 더 잘 설명 할 수 있지만이 예제에서는 '충분 함'입니다). 다시 - PEP 8은 당신의 친구입니다!

5 - 처음 시도하는 것이 좋습니다! 파이썬에 오신 것을 환영합니다!

NB : 저는 2.6/2.7 파이썬이 아니라 3을 사용하고 있습니다. * 때문에 input() 대신 raw_input()이 사용되었습니다.

from random import choice 

ROCK = 1 
PAPER = 2 
SCISSORS = 3 

cpu = choice((ROCK, PAPER, SCISSORS)) 
player_one = raw_input('-> ROCK, PAPER, or SCISSORS? ') 

if str(player_one).upper() == 'ROCK': 
    player_one = 1 
elif str(player_one).upper() == 'PAPER': 
    player_one = 2 
elif str(player_one).upper() == 'SCISSORS': 
    player_one = 3 
else: 
    print('What the heck did you pick!? Pick a valid option!') 

if(cpu == ROCK)and(player_one == ROCK): 
    print('You Tied') 
elif(cpu == ROCK)and(player_one == PAPER): 
    print('You Win') 
elif(cpu == ROCK)and(player_one == SCISSORS): 
    print('You Lose') 
elif(cpu == PAPER)and(player_one == ROCK): 
    print('You Lose') 
elif(cpu == PAPER)and(player_one == PAPER): 
    print('You Tied') 
elif(cpu == PAPER)and(player_one == SCISSORS): 
    print('You Win') 
elif(cpu == SCISSORS)and(player_one == ROCK): 
    print('You Win') 
elif(cpu == SCISSORS)and(player_one == PAPER): 
    print('You Lose') 
elif(cpu == SCISSORS)and(player_one == SCISSORS): 
    print('You Tied') 

갱신 1 : 최신 질문에 대한 응답에서, 다음 코드를 검토합니다. 나는 그것을 정리하기 위해 코드를 개편했다. 우리는 "layperson"에게 약간의 가독성을 잃어 버렸지 만 일단 Python을 읽는 것에 익숙해지면 이것이 깨끗하고 명확하다고 생각합니다. 새 코드의 마지막 두 줄은 목표를 달성 할 수있는 한 가지 방법 (많은 방법 중 하나)을 보여줍니다. 명심하십시오. int()와 str()을 처음부터 비교를 강제로 변환하고 싶습니다.당신은 이것을 할 필요가 없었기 때문에 내가 한 일은 타협이었습니다. 이전에 가지고 있던 int() 옵션을 사용하여 int()의 표현 인 str() 객체와 결합하여 tuple을 만들었습니다. 값. 인덱스 값을 참조하여 원하는대로 언제든지 두 방법을 서로 바꿀 수 있습니다.

문자열에 결과를 출력하고자하는 또 다른 방법은, 당신의 INT()의 다시 STR (로)를 변환 이전의 줄 간격을 지출하고 단지 같은 것을 할 것 :

print("You picked " + player_one + " and the CPU picked " + cpu) 

을 그러나 다시 한 번, player_one 및 cpu 정수를 다시 문자열로 변환해야합니다. 아래에서 사용하는 방법은 튜플을 사용합니다. 무릎 덩어리 반응이 원하는 방식 (이 방법은 사용자가 생각한 것과 유사합니다)보다이 방법을 선호하기 때문입니다.

from random import choice 

ROCK = (1, "ROCK") 
PAPER = (2, "PAPER") 
SCISSORS = (3, "SCISSORS") 

cpu = choice((ROCK, PAPER, SCISSORS)) 

player_one = raw_input('-> ROCK, PAPER, or SCISSORS? ') 

if str(player_one).upper() == 'ROCK': 
    player_one = (1, "ROCK") 
elif str(player_one).upper() == 'PAPER': 
    player_one = (2, "PAPER") 
elif str(player_one).upper() == 'SCISSORS': 
    player_one = (3, "SCISSORS") 
else: 
    print('What the heck did you pick!? Pick a valid option!') 

out_vect = (cpu[0], player_one[0]) 

OUTCOMES = ('You Tied', 'You Win', 'You Lose') 
POSSIBILITIES = (([(1,2), (2, 3), (3, 1)], OUTCOMES[1]), ([(2, 1), (3, 2), (1, 3)], OUTCOMES[2])) 

if(out_vect[0] == out_vect[1]): 
    print OUTCOMES[0] 
elif out_vect in POSSIBILITIES[0][0]: 
    print(POSSIBILITIES[0][1]) 
elif out_vect in POSSIBILITIES[1][0]: 
    print(POSSIBILITIES[1][1]) 
else: 
    print("~Epic Fail~ in the program!") 

result_summary = "You chose " + player_one[1] + " and the CPU chose " + cpu[1] 

print result_summary 
+0

도와 주신 덕분에 –

+2

도와 주신다면 해결책의 맨 옆에있는 녹색 체크 표시를 클릭하여 문제를 해결할 수 있습니다. 마우스를 위로 움직이면 체크 표시가 나타납니다.). StackExchange에 오신 것을 환영합니다. –

+0

btw 나는 네가이기는 틈에서 "당신이 ____을 선택했다"고 "cpu가 ___"라고 말하도록 사용할 수 있습니까? –

관련 문제