生成随机数并使用random.seed()

时间:2015-10-25 13:04:23

标签: python random http-post

我有一个脚本,它应该生成一个随机数,表示25到28°C之间的传感器温度,并在正文中执行一个带有一些xml的POST请求。代码的结构如下:

frame

如果我运行webView,则始终返回并发布相同的模拟温度。<​​/ p>

我目前的理解是def randomTemperature(): random.seed() return str(random.randint(25,28)) create_DATA_contentInstance_xml_body = '''<obj> <str name="appId" val="''' + new_senzor_name + '''"/> <str name="category" val="temperature "/> <int name="data" val="''' + randomTemperature() + '''"/> <int name="unit" val="celsius"/> </obj>''' create_DATA_contentInstance = urllib2.Request(url=create_DATA_contentInstance_url , data=create_DATA_contentInstance_xml_body, headers={'Authorization': 'Basic abcaW46YabcaW4='}) def createDATAcontentInstance(): urllib2.urlopen(create_DATA_contentInstance) print "\n=== Created a DATA contentInstance ===" def createSensorAndDataInstances(): while True: #generate a random delay randomDelay = random.randint(1,5) time.sleep(randomDelay) createDATAcontentInstance() createSensorAndDataInstances() 方法使用系统的当前时间作为方法的参数,因此如果我运行以下代码,该方法应该返回一个随机数,这是一个剥离版本我的脚本代码:

createSensorAndDataInstances()

有人知道为什么它会在第一种情况下继续返回相同的数字吗?

EDIT1:尝试了@dursk建议的内容,但仍然无效。我做了以下更改:

random.seed()

import random
import time

def randomTemperature():
    random.seed()
    return str(random.randint(25,28))

def createSensorAndDataInstances():
    while True:
        #generate a random delay
        randomDelay = random.randint(1,5)
        time.sleep(randomDelay)
        print randomTemperature()

createSensorAndDataInstances()

2 个答案:

答案 0 :(得分:0)

首次加载模块时,xml字符串中对randomTemperature()的调用会先行一次。您需要参数化字符串,并调用该方法,每次都传递一个新值。

create_DATA_contentInstance_xml_body = '''
<obj>
  <str name="appId" val="{}"/>
  <str name="category" val="temperature "/>
  <int name="data" val="{}"/>
  <int name="unit" val="celsius"/>
</obj>
'''

def createDATAcontentInstance():
    urllib2.urlopen(create_DATA_contentInstance.format(
        new_senzor_name,
        randomTemperature()
    )                
    print "\n=== Created a DATA contentInstance ==="

答案 1 :(得分:-1)

因为你在同一秒内反复调用random.seed()。 您需要在脚本开头调用它,并且永远不要再执行它。它不应该放在你不止一次调用的函数中。

抱歉,不是真的,请看durks的回答。但是我所说的每个脚本只需调用一次的random.seed()仍然有效。