【问题标题】:My input handling looks for "S", but when I type "S" the script just terminates我的输入处理寻找“S”,但是当我输入“S”时,脚本就终止了
【发布时间】:2021-06-25 15:13:52
【问题描述】:

我尝试制作一个 UNO 分发系统,但它似乎不起作用: 当我输入“S”时,它就终止了。 (还没完结)

到目前为止,这是我的代码:

import random

n = 0
command = input("Rules[R], Start[S], End[E] or Quit[Q]")

if command.upper == "S":
  while n < 7:
    pick_type = random.randint[1, 9]
    pick_colour = random.randint[1, 5]
    if pick_type == 5 or 6 or 7:
      pick_colour = random.randint[1, 4]
      if pick_colour == 1:
        colour = "Blue"
      elif pick_colour == 2:
        colour = "Green"
      elif pick_colour == 3:
        colour = "Red"
      else:
        colour = "Yellow"
      print(colour)
    elif pick_type == 1 or 2 or 3 or 4:
      pick_number = random.randint[1, 10]
      number = str(pick_number)
      print(number)
    else:
      draw_condition = random.randint[1, 2]
      if draw_condition == 1:
        card_type = "Wild"
      else:
        card_type = "Wild Draw 4"
      print(card_type)
    n += 1

我得到的结果是:

Rules[R], Start[S], End[E], Quit[Q]
S

Process terminated with exit code 0.

【问题讨论】:

  • command.upper 是一个函数,而不是字符串,所以它永远不会等于字符串"S"。你想要command.upper()
  • 它会犯更多错误!
  • 在您的代码的许多部分中,您为调用的方法使用了错误的签名,例如random.randint[1, 9],而应该是random.randint(1, 9)。另外,n += 1 应该在哪里?

标签: python shuffle card


【解决方案1】:

这是您的“选择”逻辑的简化版本:

from enum import Enum
import random


class PickType(Enum):
    COLOUR = 0
    NUMBER = 1
    DRAW = 2


for pick in random.choices(list(PickType), weights=[3, 4, 2], k=7):
    print({
        PickType.COLOUR: random.choice(["Blue", "Green", "Red", "Yellow"]),
        PickType.NUMBER: random.randint(1, 10),
        PickType.DRAW: random.choice(["Wild", "Wild Draw 4"]),
    }[pick])

注意使用random.choicerandom.choices 来简化随机选择。您可以使用choice 直接选择一个随机字符串,而不是生成一个随机整数然后找出哪个字符串与哪个int 匹配。 choices 函数允许您对选择进行加权;在这种情况下,您希望获得 3:9 的颜色几率、4:9 的数字几率和 2:9 的平局几率,因此我们可以将权重 [3, 4, 2] 传递给 choices 到对应三个选项(COLOUR, NUMBER, DRAW)。

告诉choices 我们想要7 个选择(k=7)也消除了递增n 计数器的需要——我们只要求7 个“选择”,然后遍历生成的pick_type 值。然后,我们使用 dict 将每个可能的 PickType 转换为结果字符串,并打印该字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2021-09-04
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多