【问题标题】:how would i make code like this without having to do a bunch of code for each one我如何编写这样的代码而不必为每个代码做一堆代码
【发布时间】:2021-05-14 17:03:00
【问题描述】:

我试图让它不管输入的数字是多少,它都会进行计算,我在 python 方面不是很有经验,我正在做一些会有“x”边数的骰子,它会寻找'x' 对的数量来查看例如掷出 6 个六点需要多少次骰子。对不起,如果我措辞不好

时间是它掷骰子的次数
对是它正在寻找的对的数量
边数是骰子的边数/数

import random

sides = int(input("How many Dice Sides/Numbers: "))
pairs = int(input("How many Pairs to Search for: "))

time = 0

if pairs == 2:
    while True:
        time += 1
        one = random.randint(1, sides)
        two = random.randint(1, sides)
        if one == two:
            break
if pairs == 3:
    while True:
        time += 1
        one = random.randint(1, sides)
        two = random.randint(1, sides)
        three = random.randint(1, sides)
        if one == two and two == three:
            break

input(f"Found a Pair after {time} times.")

result of above code

即我如何使它与我为配对输入的任何数字一起工作,如果这不可能,再次抱歉

【问题讨论】:

标签: python-3.x


【解决方案1】:

您走在正确的轨道上,但这只是简化代码的问题,将变量的数量替换为更“有效”的变量(在这种情况下,将使用数据结构,例如列表) .您可以使用列表推导生成可变长度的随机数列表:

[random.randint(lower, upper) for _ in range(n)]

这将在lowerupper 之间生成n 随机数。


要检查所有数字是否相等,一种方法是检查列表中第一项在列表中出现的次数是否等于列表本身的长度。 (您可以在this Stack Overflow answer中找到各种替代方法。)

len(lst) == lst.count(lst[0])

将所有这些放在一起,您将拥有类似于以下的功能:

def find_pairs(sides, pairs):
    rolls = 0
    while True:
        rolls += 1
        nums = [random.randint(1, sides) for _ in range(pairs)]
        if len(nums) == nums.count(nums[0]):
            break
    return rolls

一些示例运行:

>>> find_pairs(1, 6)
1
>>> find_pairs(2, 6)
28
>>> find_pairs(3, 6)
79

【讨论】:

    【解决方案2】:

    当您想要处理数量不定的事物时,列表或字典通常是合适的。在您的情况下,我们可以生成用户请求的大小列表。

    from random import randint
    
    pairs = int(input("number of pairs: "))
    count = 0
    sides = 6
    while True:
        count += 1
        deck = [randint(1, sides) for _ in range(pairs)]
        if len(set(deck)) == 1: # if all equal, the set will have 1 value
            break
    
    print(count)
    

    【讨论】:

      【解决方案3】:

      你可以使用 python 集合来轻松解决这个问题。

      import random
      
      sides = int(input("How many Dice Sides/Numbers: "))
      pairs = int(input("How many Pairs to Search for: "))
      
      time = 0
      
      while True:
          time += 1
          s = {random.randint(1, sides) for _ in range(pairs)}
          if len(s) == 1:
              break
      
      input(f"Found a Pair after {time} times.")
      

      这个想法是生成所有卷并存储在集合中(仅具有唯一性)。 然后检查设置长度是否为一,意味着所有卷产生的数量相同。

      【讨论】:

        猜你喜欢
        • 2015-07-28
        • 1970-01-01
        • 2020-01-11
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-21
        • 2019-02-27
        相关资源
        最近更新 更多