我正在编写一个代码,用户输入一个句子,一次输入一个单词。当他们键入'退出'时,代码返回"您的原始句子是句子。字数(生成随机数)是(与该数字对应的字)"。
例如,句子是"这是一个很酷的代码",它会返回"你原来的句子是这是一个很酷的代码。字数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)
答案 0 :(得分:1)
你快到了!
当你这样做时:
pleaseWork = (random.randint(0,wordCount))
您在零和pleaseWork
之间得到一个数字(在len(outputString)
变量中),其中(因为outputString
是一个字符串)将为您提供{outputString
中的字符数1}}。
尝试一下:
>>> len("Hello, my name is BorrajaX")
26
但是,您真正想要的是0
与sentence
列表中的项目数之间的随机索引,对吧?因为当您执行此操作时: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
包含0
和outputString
之间的数字。 但是然后您使用该号码访问您的列表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
一次,因此它不会获得两个不同的随机数或单词。问题是两件事:
wordCount
当前是字符串中的字符数。请改用len(sentence)
。randint
包含其上限(与排除它的range
不同,因此您不必考虑此类内容)意味着random.randint(0,wordCount)
有时会返回{ {1}}所以wordCount
(假设您执行上述操作)是可能的,并且pleaseWork == wordCount == len(sentence)
必然会抛出错误。使用sentence[len(sentence)]
。