如何将 3 个随机字符串滚出数组并检查它们

问题描述 投票:0回答:1

我是一名大学学生程序员,最近才开始用自己的时间编码。我有一些关于如何编程的基本知识,但数组超出了我的知识范围,我正在努力学习它们。我收到了制作水果卷赌博机的挑战。我需要从可能的 6 根弦中滚出 3 根,并检查某些条件。

我已经想出了如何取出其中的 3 个并打印它们,但我需要检查是否有中奖者等。对于 3 个钟声,您将赢得大奖,对于 2 个傻瓜 + 另一个,您将赢得常规奖品,如果您滚动头骨,您将获得扣除。

我想我可以弄清楚如何通过使用 if 和 else if 语句来检查哪些是滚动的(不确定它是否有效),但是需要很多 else if 来确保考虑每个组合。

有没有更快的方法来检查重复项?或者只是使用大量 elif 语句来做到这一点。如果需要的话我可以进一步详细说明。

我已经将完整的代码粘贴在下面,如果写得不好,请原谅我,我仍然只是初学者水平,我还被告知尝试使用函数,这就是为什么有这么多。我的主要问题正如我之前所描述的,但对于整个代码的任何其他提示也将不胜感激。预先感谢。

import random
fruit = ["Cherry", "Bell", "Lemon", "Star", "Orange", "Skull"]


def fruit_machine():
  credits = 10
  credit = True
  while credits > 0:
    turn = str(input("Would you like to roll for 20p? Y/N: "))
    if turn.lower() == "y":
      credits = credits - 2
      credits_print(credits)
    elif turn.lower() == "n":
      print("You have chosen not to roll.")
      credit = False
    else:
      print("Please enter a valid option.")
  return credits
  return credit


def credits_print(credits):
  print("You have", credits, "credits remaining")
  fruit_roll()
  if credits == 0:
    print("--------------------------------------\nYou have no more credits remaining")
    end()
    
  

def fruit_roll(credits):
  roll = random.choices(fruit, k = 3)
  if roll == ["Bell, Bell, Bell"]:
    print("Jackpot!!!\n+5 credits")
    credits = credits + 5
  
  

def end():
  print(" ")




fruit_machine()

我已经创建了 end(),因为我不知道如何阻止它在达到 0 积分后循环回到 Fruit_machine 函数,它只会返回并进入负值。

python arrays random
1个回答
0
投票

有更简化的方法来检查列表中的重复项和其他条件,而不是使用一堆 if elif 语句。逻辑将根据掷骰结果的要求和组合而改变。例如,是只有 3 个铃铛中了大奖,还是除了头骨之外的任何骰子中都有 3 个?

基于您问题中的要求的 Fruit_roll 函数示例如下:

def fruit_roll(credits):
 roll = random.choices(fruit, k=3)
 print("Rolled: ", roll)
 if roll.count("Bell") == 3:
    print("Jackpot!!! +5 credits")
    credits += 5
 elif any(roll.count(f) == 2 for f in fruit) and "Skull" not in roll:
    print("Regular prize! +2 credits")
    credits += 2
 if "Skull" in roll:
    print("Skull rolled! -1 credit")
    credits -= 1
 return credits

我在查看您的代码时发现了一些其他问题。

  1. 在fruit_roll()中,您将roll与字符串进行比较(代码中的“Bell,Bell,Bell”)。这不起作用,因为 roll 是一个列表而不是字符串。
  2. 在fruit_machine()中,您调用fruit_roll()而不传入credits变量。
  3. fruit_machine() 有两个返回语句。第二个 return 语句永远不会运行,因为第一个 return 语句将导致函数退出。

带有滚动评估逻辑的调整后的代码如下。

import random

fruit = ["Cherry", "Bell", "Lemon", "Star", "Orange", "Skull"]

def fruit_machine():
    credits = 10
    while credits > 0:
        turn = str(input("Would you like to roll for 20p? Y/N: "))
        if turn.lower() == "y":
            credits -= 2  # Deduct 20p
            credits = fruit_roll(credits)  # Roll fruits and update credits
            credits_print(credits)
        elif turn.lower() == "n":
            print("You have chosen not to roll.")
            break
        else:
            print("Please enter a valid option.")
    print("--------------------------------------\nYou have no more credits remaining")
    end()

def credits_print(credits):
    print("You have", credits, "credits remaining")

def fruit_roll(credits):
    roll = random.choices(fruit, k=3)
    print("Rolled: ", roll)
    if roll.count("Bell") == 3:
        print("Jackpot!!! +5 credits")
        credits += 5
    elif any(roll.count(f) == 2 for f in fruit) and "Skull" not in roll:
        print("Regular prize! +2 credits")
        credits += 2
    if "Skull" in roll:
        print("Skull rolled! -1 credit")
        credits -= 1
    return credits

def end():
    print("Game Over.")

fruit_machine()
© www.soinside.com 2019 - 2024. All rights reserved.