【问题标题】:Using random numbers to determine the length of a random number list使用随机数确定随机数列表的长度
【发布时间】:2015-11-21 22:18:30
【问题描述】:

我正在尝试生成一个特定范围内的随机奇数列表,该列表的长度是通过在 PYTHON 中调用另一个随机数(然后将它们写入文件)生成的。

我已经能够生成初始随机数(并输入显示调用程序以查看它是什么)。当我尝试将它用作另一个随机生成的数字的列表的长度时,它不起作用。我不确定为什么。任何见解将不胜感激。这就是我得到的...

import random 

def main():
    digit_file = open("numbers.txt","w")
    file_size = random.randint(4,7)
    print (file_size)
    print ("is the file size\n" )
    for n in range(file_size): 
        rand_output = random.randint(5,19)
        if n %2 != 0:
            print(rand_output)
            digit_file.write(str(rand_output))
    digit_file.close
    print("File was created and closed.")
main()

【问题讨论】:

  • 有什么问题?该代码有效。也不要忘记在digit_file.close()中使用括号
  • @FadingCaptain 你怎么知道它不起作用?
  • rand_output 生成的数字数量不等于 file_size。
  • @FadingCaptain,因为你用的是if n%2 != 0,所以不是所有的数字都会写出来。
  • 你是对的。我想我必须找到另一种方法来保持奇数,但仍然产生与 file_size 相同的数量

标签: python random


【解决方案1】:

不确定您的期望是什么,但是使用choice 怎么样?

from random import randint,choice

def main():
    with open("numbers.txt","w") as digit_file:
        file_size = randint(4,7)
        print (file_size)
        print ("is the file size\n" )
        for n in range(file_size): 
            rand_output = choice(range(5, 19, 2))
            print(rand_output)
            digit_file.write(str(rand_output))
    print("File was created and closed.")

main()

这可以变成:

from random import randint,choice

def main():
    with open("numbers.txt","w") as f:
        file_size = randint(4,7)
        print ("%dis the file size\n" % file_size)
        f.write(''.join(str(choice(range(5, 19, 2))) for _ in range(file_size)))
    print("File was created and closed.")

main()

【讨论】:

    【解决方案2】:

    你必须检查 rand_output % 2 != 0 不是 n % 2 != 0

    import random
    
    
    def main():
        digit_file = open("numbers.txt", "w")
        file_size = random.randint(4, 7)
        print(file_size)
        print("is the file size\n")
        while file_size:
            rand_output = random.randint(5, 19)
            if rand_output % 2 != 0:
                print(rand_output)
                digit_file.write(str(rand_output))
                file_size -= 1
        digit_file.close()
        print("File was created and closed.")
    main()
    

    【讨论】:

    • 我试过了,但是生成的file_size数字是7,rand_output生成的位数是5。
    • @FadingCaptain,我第一次理解错了。我已经更新了答案
    • 太棒了!我是编程新手,不记得让 rand_output 依赖于 file_size。为什么最后file_size要减1?
    • @FadingCaptain,这是你的问题,你的rand_output 取决于大小,但它不正确。想法是你不需要进行file_size 迭代,你需要做更多,因为有时一个数字会是偶数,你将不得不进行额外的迭代。现在我们在file_size != 0 时进行迭代,每次我们找到一个奇数我们file_size -= 1。这意味着仅当数字为奇数时才进行“迭代”。
    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2011-07-20
    • 2020-03-11
    相关资源
    最近更新 更多