如何从范围中选择一个随机数?

时间:2017-06-20 17:18:14

标签: go

我阅读了函数Intn https://golang.org/pkg/math/rand/#Intn的文档,但我不明白它们的含义 我知道随机与伪随机不同。但是,我如何模拟1到1000范围内的随机?

<form action="upload_file" method="POST" enctype="multipart/form-data">
    <table id="submitResumeTable">
        <tr>
            <td style="padding-top:12px;">Name</td>
            <td><input type="text" name="resName"></td>
        </tr>
        <tr>
            <td style="padding-top:12px;">Telephone</td>
            <td><input type="text" name="resPhone"></td>
        </tr>
        <tr>
            <td style="padding-top:12px;">Email</td>
            <td>
                <input type="text" name="resEmail">
                <br/>
                <br/>
                <p style="margin-bottom:-3px; font-size:12px">Please upload a Word or PDF file by selecting "Choose File" below:</p>
            </td>
        </tr>
        <tr>
            <td style="padding-top:12px;">Resume</td>
            <td>
                <input style="padding:0; width:100%" type="file" name="resFile">
            </td>
        </tr>
        <tr>
            <td style="padding-top:12px;">Message</td>
            <td>
                <textarea name="resMsg" rows="6"></textarea>
            </td>
        </tr>
    </table>
    <br/>
    <input type="submit" id="submitResBtn" value="Submit">
</form>

答案总是879

@app.route("/upload_file", methods=["POST"])
def upload_file():
    file = request.files["resFile"] 

    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename) 
        file.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))

        emailTitle = ("%s's Resume" % request.form["resName"])
        msg = Message(emailTitle,sender="test@gmail.com",recipients=["test@test.com"])
        msg.body = ("Name: %s\nPhone: %s\nE-mail: %s\n\nMessage:\n%s" % (request.form["resName"],request.form["resPhone"],request.form["resEmail"],request.form["resMsg"]))

        filepath = "static/uploads/" + filename
        splitfile = filename.split(".")
        otherpath = splitfile[0] + '/' + splitfile[1]

        with app.open_resource(filepath) as fp:
            msg.attach(filename,otherpath,fp.read())
        mail.send(msg)
    else:
        return render_template("send_resume.html", pageHeading="Send Us Your Resume", uploadStatus=2) # upload unsuccessful
    return render_template("send_resume.html", pageHeading="Send Us Your Resume", uploadStatus=1) # upload successful

答案总是81

2 个答案:

答案 0 :(得分:2)

您需要“种子”随机数生成器。这就像告诉伪随机数生成器如何生成数字的代码。现在,你不能只给这个号码,或者你每次都会生成相同的号码。通常,良好的做法是以当前时间播种。

package main
import (
    "fmt"
    "math/rand"
    "time"    #ADDED
)

func main() {
    // Seed should be set once, better spot is func init()
    rand.Seed(time.Now().UTC().UnixNano())   #ADDED
    fmt.Println(randInt(1, 1000))
}

func randInt(min int, max int) int {
    return min + rand.Intn(max-min)
}

现在每次调用randInt()函数时,它都会使用从调用种子函数开始生成随机数的时间。

答案 1 :(得分:1)

两点。首先,正如math/rand状态的文档位于顶部:

  

如果每次运行都需要不同的行为,请使用Seed函数初始化默认Source。

如果你不用每次运行的不同种子(例如时钟时间)播种它,每次运行都会得到相同的结果,因为默认种子总是1。

其次,如果您在Playground上运行此操作,则每次都会得到相同的结果,因为它会缓存执行结果。如果代码相同,结果将是相同的。