岩石,纸,剪刀在Python中

时间:2012-12-01 19:56:07

标签: python-3.x

我正在使用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')

2 个答案:

答案 0 :(得分:1)

这是你的作业= P

勘误的一些要点:

1 - 由于摇滚,纸张和剪刀是常数并且永远不会改变,所以最好遵循PEP 8并将其作为全部大写。

2 - 不要害怕使用空格来增加代码的可读性。最初你把它全部“全球化”。很高兴阅读它是否被分解为逻辑部分(尝试阅读并遵循PEP 8 - 遵循Python风格指南将帮助您IMMENSELY!)

3 - 你最初有:

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

哪种摇滚,纸张和剪刀STRINGS - 请注意您放置的''选项?如果你想评估随机挑选的选项,你需要首先实例化你的CONSTANTS,然后让计算机从这些选项中选择 - 这就是为什么,如果你看下面我的版本,我将你的常数移到cpu = choice()以上。

4 - 你有p1这是非常恼人的(不是你的错,我的字体的错)...我正在阅读它,因为在pL ...我会避免使用数字命名变量原因。相反,我做了player_one(变量名称更具描述性,它可以更具描述性,但对于这个例子,它'足够好')。再次 - PEP 8是你的朋友!

5 - 好先试试!欢迎使用Python!

注意:我使用的是2.6 / 2.7 Python,而不是3. *这就是为什么我有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:要回答您的最新问题,请查看以下代码。我对代码进行了改进以进行清理。我们失去了对“外行”的一些可读性,但是一旦你习惯了阅读Python,我认为这同样干净/清晰。新代码的最后两行向您展示了一种可以实现目标的方式(多种方式)。请记住,您希望通过强制比较从一开始就转换为int()和str()。你没有必要这样做,所以我做的是妥协:我通过执行你之前使用的int()选项创建了一个tuple,并将它们与一个str()对象组合在一起,该对象是int()值。这样我可以通过引用索引值随时在两者之间进行交换。

想要在字符串中打印结果的另一种方法是花费前一行空间将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

答案 1 :(得分:0)

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

您可以执行3来解决此问题。

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

cpu = choice((1, 2, 3))

此外,你只有三个if cpu == 'rock' and p1 == 'rock': # note the quotes 用于平局,而应该只有一个:

if