我正在使用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')
答案 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'
,但您只能将其与1
,2
和{{1}进行比较}。这可能是主要问题。
您可以执行3
来解决此问题。
或者相反,与字符串文字比较,而不是整数:
cpu = choice((1, 2, 3))
此外,你只有三个if cpu == 'rock' and p1 == 'rock': # note the quotes
用于平局,而应该只有一个:
if