【问题标题】:Why str(random.choice()) returns /string/为什么 str(random.choice()) 返回 /string/
【发布时间】:2021-11-07 08:36:25
【问题描述】:

我正在尝试制作一个随机抛出石头或剪刀弦的函数。但是,当我调试时,我注意到变量附加随机。选择的格式如下:

这意味着条件永远不会满足。这是我的函数的代码。: 我知道不完整。

def detect(player_pick):

enemy_pick = str(random.choices(['rock', 'paper', 'scissors']))
# Rock detection
if enemy_pick == 'rock' and player_pick == 'scissors':
    print("you lose")
    return "rock_win_enemy"
elif enemy_pick == 'scissors' and player_pick == 'rock':
    print("Enemy lose")
    return "rock_win_player"
elif enemy_pick == 'rock' and player_pick == 'rock':
    print("tie")
    return "tie"
# Paper detection
# Scissors detection

【问题讨论】:

  • 为什么一定要做str(random.choice(...)),就做random.choice(...)
  • 问题是我尝试过这样但它给出的值是一个列表而不是一个字符串。所以我认为将其转换为字符串是个好主意。
  • @AdonsFco。您正在将列表转换为字符串,而不是从列表中获取字符串。这与好主意相反
  • 话虽如此,对于初学者来说你做得很好。我整天都在处理不完整的“gimme teh codez”问题,所以很高兴看到您实际上花时间提供完整的信息并尽可能地分析问题。继续努力!

标签: python string random


【解决方案1】:

你打电话给random.choices(带有s)而不是random.choice。它返回一个list 的结果(奇怪的是,它不需要你说你想要多少;它默认只做一个选择)。因此,enemy_pick 的长度始终为 1 liststr 的形式永远不会等于您的任何字符串(它们不包含在方括号中)。使用random.choice(没有s),而不是random.choices,它应该可以工作(你也可以删除str()包装;所有可用的选择都已经是str)。

【讨论】:

  • 非常感谢,这只是一封信哈哈哈。
  • @AdonsFco:是的,我真的很困惑为什么他们会给k 参数一个默认值而不是强制它。似乎他们希望人们犯这个错误。
【解决方案2】:

您正在使用返回列表的random.choices

改用random.choice 方法 - 它返回字符串。

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多