漫不经心地学习巨蟒,决定给石头剪刀一把,作为一个快速的项目。进展非常顺利,但我真的陷入了试图缩短代码的过程中,您使用这些代码来比较结果。
def check_results(ai, self):
if ai == self:
return 'tralf'
if self == 'rock':
if ai == 'paper':
return False
else:
return True
if self == 'scissors':
if ai == 'rock':
return False
else:
return True
if self == 'paper':
if ai == 'scissors':
return False
else:
return Trueai和self,正如你可能猜到的,是电脑的选择,而玩家的选择只是被传递进来。
关于硬编码的一些事情--这对我来说是非常不满意的,我花了大约20分钟的时间拒绝去做,只是尝试一些随机的东西,看看我能不能把它缩短。
我试过的一件事是让你从一个列表中得到两个玩家的索引,然后通过一个单独的列表来比较它们。不能让它起作用,或者至少不能让它以比硬编码更好的方式工作,所以我放弃了,用无聊的方式做了。任何帮助都将不胜感激。
发布于 2022-10-25 16:46:59
以可读性和错误检查为代价,可能是这样的:
def did_player_win(player_choice, computer_choice):
choices = ['scissors', 'paper', 'rock']
# The order in which the strings appear in the list is important.
# scissors beats paper
# paper beats rock
# rock beats scissors (wraps around)
return choices[(choices.index(player_choice) + 1) % len(choices)] == computer_choice
player_choice = 'paper'
computer_choice = 'rock'
print(did_player_win(player_choice, computer_choice))不过,这并不能提供很好的源代码。长篇大论是没有羞耻的(未来的自我会感谢你:)
def did_player_win(player_choice, computer_choice):
choices = {
'rock': 'scissors',
'paper': 'rock',
'scissors': 'paper'
}
return choices[player_choice] == computer_choice发布于 2022-10-25 16:52:22
下面是使用python 3.10的匹配用例(模式匹配)的解决方案:
def check_results(ai, self):
if ai == self:
return 'tralf'
match (ai, self):
case ('scissor', 'paper') | ('paper', 'rock') | ('rock', 'scissor'): # cases where you lose
return False
case ('scissor', 'rock') | ('paper', 'scissor') | ('rock', 'paper'): # cases where you win
return True
print(check_results('rock', 'rock'))
print(check_results('rock', 'paper'))
print(check_results('paper', 'rock'))
print(check_results('rock', 'scissor'))结果:
tralf
True
False
Falsehttps://stackoverflow.com/questions/74197482
复制相似问题