简体   繁体   English

如何找到一组可被 7 整除的随机生成数字的最大值?

[英]How to find the max value of a set of randomly generated numbers that is divisible by 7?

I know this might be a very easy question but I can't get my head around it.我知道这可能是一个非常简单的问题,但我无法理解它。 The question asks to generate 357 random numbers between 8 and 254 (inclusive) and print out the largest generated number that is exactly divisible by 7.该问题要求生成 8 到 254(含)之间的 357 个随机数,并打印出可被 7 整除的最大生成数。

I wrote this program:我写了这个程序:

import random

def main():
    for x in range(357):
      print (random.randint(8,254)*7),

print

main()

which generates the numbers but I don't know how to get the max number out of it.它会生成数字,但我不知道如何从中获取最大数字。 I would really appreciate any help我真的很感激任何帮助

You could use a list comprehension to generate the random numbers and then apply a filter to only keep those that are divisible by 7:您可以使用列表推导生成随机数,然后应用过滤器以仅保留可被 7 整除的随机数:

import random

number = max(filter(lambda n: n % 7 == 0, [random.randint(8,254) for _ in range(357)]))

Concise one-liners are great, but here is an alternative approach that somewhat prioritizes readability for OP's reference.简洁的单行代码很棒,但这是一种替代方法,它在某种程度上优先考虑 OP 参考的可读性。 Namely, we save the randomly generated numbers in a list and perform sorting:即,我们将随机生成的数字保存在一个列表中并进行排序:

import random

def seven_max():
    nums = [random.randint(8,254) for _ in range(357)]
    nums.sort(reverse=True)
    for num in nums:
        if num % 7 == 0:
            return num
    return False # No such number

We first create a list of random numbers, defined as nums .我们首先创建一个随机数列表,定义为nums Then, we sort the list in reverse order so that larger elements would come first.然后,我们以相反的顺序对列表进行排序,以便较大的元素首先出现。 As we loop through this sorted array, we check if a number is divisible by 7. If it is, we return that number;当我们遍历这个排序数组时,我们检查一个数字是否能被 7 整除。如果是,我们返回那个数字; if no number satisfies this condition, we return False .如果没有数字满足这个条件,我们返回False

You can use max with parameter key .您可以将max与参数key一起使用。

max((random.randint(8,254) for _ in range(357)),key =lambda x: x if x%7==0 else -1)
  • (random.randint(8,254) for _ in range(357)) is generator for producing 357 random values between 8 to 254. (random.randint(8,254) for _ in range(357))是生成 357 个介于 8 到 254 之间的随机值的生成器。

  • key =lambda x: x if x%7==0 else -1 if number is divisible return it else -1. key =lambda x: x if x%7==0 else -1如果数字是可整除的,则返回它 else -1。 So, you get highest value that is divisible by 7.因此,您获得可被 7 整除的最高值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM