0

我正在为我的计算机科学课用 Python(我正在使用 Python 33 IDLE)制作石头、剪纸、剪刀游戏。我编写了这个脚本,但是当我运行它并做出选择时,它什么也没做。请帮助并告诉我我错在哪里。这是脚本:

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')
4

2 回答 2

1

这是你的作业=P

一些勘误点:

1 - 由于石头、纸和剪刀是常数并且永远不会改变,因此最好遵循 PEP 8 并将它们全部大写。

2 - 不要害怕使用空格来增加代码的可读性。最初,您将所有内容都“整合在一起”。如果它被分解成逻辑部分,阅读起来很好(尝试阅读并遵循 PEP 8 - 遵循 Python 风格指南将极大地帮助你!)

3 - 您最初拥有:

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

哪个制造石头、纸和剪刀STRINGS——注意''你的选择吗?如果您想评估随机选择的选项,您需要先实例化您的 CONSTANTS,然后让计算机从这些选项中选择 - 这就是为什么,如果您查看下面的版本,我将您的 CONSTANTS 移到上面cpu = choice()

4 - 你有 p1 非常 _ irritating_ (不是你的错,我的字体的错)......我正在阅读它 pl 就像在 pL 中一样......出于这个原因,我会避免用数字命名变量。相反,我做了 player_one (变量名更具描述性,它还可以更具描述性,但对于这个例子来说,它“足够好”)。再次 - PEP 8 是你的朋友!

5 - 很好的第一次尝试!欢迎来到 Python!

注意:我使用的是 2.6/2.7 Python,而不是 3.*,这就是为什么我使用 raw_input() 而不是你的 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')

UPDATE1: 针对您的最新问题,请查看以下代码。我对代码进行了修改以清理它。我们对“外行”失去了一些可读性,但是一旦你习惯了阅读 Python,我认为这同样干净/清晰。新代码的最后两行向您展示了一种(多种方式)可以实现目标的方式。请记住,您希望在一开始就通过强制比较从 int() 和 str() 进行转换。您不必这样做,所以我所做的是妥协:我tuple通过执行您之前拥有的 int() 选项并将它们与作为 int() 值表示的 str() 对象组合来创建. 这样,我可以随时通过引用索引值在两者之间进行交换。

想要在字符串中打印出结果的另一种方法是使用前一行空间将 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
于 2012-12-01T20:08:26.470 回答
0

cpu'rock','paper''scissors', 但您只将其与1,2和进行比较3。这可能是主要问题。

你可以cpu = choice((1, 2, 3))解决这个问题。

或者反过来,比较字符串文字,而不是整数:

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

此外,您有 3 个ifs 代表平局,而应该只有一个:

if cpu == p1:
    print('You tied')
于 2012-12-01T20:01:16.413 回答