首页 > 解决方案 > 我的输入处理寻找“S”,但是当我输入“S”时,脚本就终止了

问题描述

我试图制作一个 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.

标签: pythonshufflecard

解决方案


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

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来简化随机选择。与其生成一个随机整数然后确定哪个字符串与哪个 int 一起使用,您可以使用choice直接选择一个随机字符串。该choices功能允许您对选择进行加权;在这种情况下,您希望获得 3:9 的颜色概率、4:9 的数字概率和 2:9 的平局概率,因此我们可以将权重传递[3, 4, 2]choices对应于三个选项(COLOUR, NUMBER, DRAW)。

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


推荐阅读