【问题标题】:{Python} Generate unique integers using iteration{Python} 使用迭代生成唯一整数
【发布时间】:2014-10-26 21:09:15
【问题描述】:

我正在制作一个程序来从用户那里收集信息,并将其添加到文本文件中。 这是一个程序,将用于从许多申请人那里获取所述信息。
对于我收集的结果的线性度,我想随机提问。

我要问的是一种从列表中提取问题、请求输入、将输入存储在文本文件中,然后随机从列表中提取另一个问题的方法。
到目前为止,这是我的代码:

def ques():
global quesnum
for i in questions:
    num = int(random.randint(0,len(questions)-1))
    j = int(numbers.count(str(num)))
    while j >= 1:
        num = int(random.randint(0,len(questions)-1))
        ##DEBUG ONLY##
        print('true')
        break
    else:
        num = str(num)
        numbers.append(num)
        ##DEBUG ONLY##
        print('false')
    num = int(num)
    answer = input(str(quesnum) + '. ' + questions[num] + ': ')
    answers.write(str(quesnum) + '. ' + questions[num] + ': ')
    answers.write(answer + '\n')
    quesnum = int(quesnum + 1)    

错误:

一旦该号码被使用,它就会被添加到列表中。 如果一个号码已经被使用过,理想的情况是生成一个新号码并使用它。
我的代码中看不到任何错误,据我所知,它应该可以正常工作。
任何人都可以指出解决方法或建议更好的方法吗?我已经找到了建议使用 random.sample() 的答案,但我已经尝试过了,但也无法正常工作。

提前致谢。

【问题讨论】:

  • 如果函数需要一个值作为参数传入,我强烈建议不要使用global

标签: python random iteration


【解决方案1】:

你可以使用random.shuffle来解决这个问题:

import random

questions = ['Q1: ...', 'Q2: ...', 'Q3: ...']
random.shuffle(questions)
for q in questions:
    answer = raw_input(q + ': ')
    with open("answers.txt", "a") as myfile:
        myfile.write("{}: {}\n\n".format(q, answer))

这将随机排列您的问题,以随机顺序提问并将它们保存到文本文件中。如果您想为每个问题保存更详细的信息,这也适用于字典列表。例如

questions = [
    {'nr.': 1, 'text': 'Do you like horses?'},
    {'nr.': 2, 'text': 'Where were you born?'}
]

【讨论】:

  • 好的。那么random.shuffle() 会改变我列表的顺序,然后我可以简单地使用for i in questions: answer = input(questions[]) 询问他们吗?
  • 正确。 random.suffle() 将在您每次调用时更改顺序。只要你调用它之前遍历它们,你就会得到不同的顺序。
猜你喜欢
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
相关资源
最近更新 更多