[英]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.