여기에 당신을위한 숙제 = 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
코드 블록을 수정할 수 있습니까? (공백 교정이기 때문에 편집 할 수 없습니다); 즉, "from"가져 오기 라인에 선행 공백이 없어야합니다. –
가독성을 개선하기 위해 편집 됨. –
@GiulioMuscarello 글쎄, 코드를 수정할 수도 있습니다. –