多次使用相同的随机生成数

时间:2016-10-27 00:59:33

标签: python random input python-3.4

我正在编写一个代码,用户输入一个句子,一次输入一个单词。当他们键入'退出'时,代码返回"您的原始句子是句子。字数(生成随机数)是(与该数字对应的字)"。

例如,句子是"这是一个很酷的代码",它会返回"你原来的句子是这是一个很酷的代码。字数3是a。

现在,我的代码获得了两个不同的随机数和单词,因此它就像"单词数字2就是这个"或者其他的东西。我应该如何解决这个问题并让它正常工作?

print ('Think of a sentence')
print ('Type the sentence one word at a time pressing enter after each word')
print ("When you have finished the sentence enter 'exit'")
print ('')
sentence = []
while True:
    word = input('')
    print ('Accepted', word)
    if word == 'exit':
                print ('')
                print ('Your original sentence was')
                outputString = " ".join(sentence)
                print (outputString)
                wordCount = len(outputString.split())
                pleaseWork =  (random.randint(0,wordCount))
                print('Word number ',pleaseWork,' is ', (sentence[pleaseWork]))

                break
    sentence.append(word)

3 个答案:

答案 0 :(得分:1)

你快到了!

当你这样做时:

pleaseWork =  (random.randint(0,wordCount))

您在零和pleaseWork之间得到一个数字(在len(outputString)变量中),其中(因为outputString是一个字符串)将为您提供{outputString中的字符数1}}。

尝试一下:

>>> len("Hello, my name is BorrajaX")
26 

但是,您真正想要的是0sentence列表中的项目数之间的随机索引,对吧?因为当您执行此操作时:sentence[pleaseWork]您使用pleaseWork作为sentence列表的索引,而不是outputString字符串。

那么,你在这里做什么:

wordCount = int(len(outputString))
pleaseWork =  (random.randint(0,wordCount))
print('Word number ',pleaseWork,' is ', (sentence[pleaseWork]))

可缩短为:

pleaseWork =  random.randint(0, len(outputString))
print('Word number ',pleaseWork,' is ', (sentence[pleaseWork]))
你现在看到了吗? pleaseWork包含0outputString之间的数字。 但是然后您使用该号码访问您的列表sentence。如果outputString有100个字符且sentence只有三个项目,会发生什么情况?嗯...你很可能在2电话中获得大于random.randint的整数。假设您得到...... 50 ...当您尝试使用三个项目访问第50个项目时会发生什么?

>>> [1, 2, 3][50]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

因此,您应该做的是将randint的范围更改为sentence列表中的项目数:

    wordCount = int(len(sentence))
    pleaseWork = (random.randint(0, wordCount))

完整示例:

def sentenceSplit():
    print ('Think of a sentence')
    print ('Type the sentence one word at a time pressing enter after each word')
    print ("When you have finished the sentence enter 'exit'")
    print ('')

sentence = []
while True:
    word = raw_input('')
    print ('Accepted', word)
    if word == 'exit':
        print ('')
        print ('Your original sentence was')
        outputString = " ".join(sentence)
        print (outputString)
        wordCount = int(len(sentence))
        pleaseWork = (random.randint(0, wordCount))
        print('Word number ', pleaseWork, ' is ', (sentence[pleaseWork]))

        break
    sentence.append(word)

答案 1 :(得分:0)

您正在使用句子中的字符数来为句子中的单词生成索引。将wordCount = int(len(outputString))更改为wordCount = len(sentence) - 1以获得适当的索引。

答案 2 :(得分:0)

由于您只调用randint一次,因此它不会获得两个不同的随机数或单词。问题是两件事:

  1. wordCount当前是字符串中的字符数。请改用len(sentence)
  2. randint包含其上限(与排除它的range不同,因此您不必考虑此类内容)意味着random.randint(0,wordCount)有时会返回{ {1}}所以wordCount(假设您执行上述操作)是可能的,并且pleaseWork == wordCount == len(sentence)必然会抛出错误。使用sentence[len(sentence)]