2014-06-12 3 views
3

에서 라인의 임의의 숫자를 인쇄 file.txt를이 포함되어있는 경우 :파이썬 - 파일

nameFile = ("/path/to/file.txt") 
nameLines = open(nameFile).read().splitlines() 
randomName = random.choice(nameLines) 

이는

어떻게 file.txt를

1 개 라인을 인쇄합니다 :

appple 
cheese 
cake 
tree 
pie 

이 사용 1-2 선을 무작위로 인쇄합니까?

예 :

1 출력 = 사과
2 출력 = cheesetree
3 출력 = piecake
4 출력 = 이상의 난수를 생성하는 케이크

+0

정수를 사용하여 모든 라인을 호출 할 수 있다면 간단히 정수를 생성하고 하드 코딩 할 수 있습니다. – durbnpoisn

+0

^어떻게할까요? – user2611541

+0

각 가능성을 똑같이 바라시겠습니까? – Michael

답변

4

, random.sample()를 사용한다. 이것은 1 또는 2 중 항목 당신에게 목록을 제공

randomNames = random.sample(nameLines, random.randint(1, 2)) 

, 입력에서 무작위 샘플로 포착 : 당신은 샘플 크기를 무작위 수 있습니다.

데모 :

>>> import random 
>>> nameLines = '''\ 
... apple 
... cheese 
... cake 
... tree 
... pie 
... '''.splitlines() 
>>> random.sample(nameLines, random.randint(1, 2)) 
['apple', 'cake'] 
>>> random.sample(nameLines, random.randint(1, 2)) 
['cheese'] 

사용 str.join() 필요한 경우, 함께 단어를 가입 :

>>> ' '.join(random.sample(nameLines, random.randint(1, 2))) 
'pie cake' 
>>> ' '.join(random.sample(nameLines, random.randint(1, 2))) 
'cake' 
+0

@ user2611541 :'print ''.join (임의의 이름)' –

+0

[ '']을 삭제할 방법이 있습니까? 고마워. – user2611541

+0

감사합니다. – user2611541

1

당신은에 따라 두 가지 기본 옵션이 있습니다 (의 당신이 두 라인에있어 가정 해 봅시다 경우) 랜덤 라인 두 개를 선택 하시겠습니까 또는 랜덤 라인을 두 번 두 번 선택하십시오. 즉, 중복이 허용되는지 여부입니다.

중복을 허용하려면 randint을 먼저 선택하고 이미 여러 번 사용하는 코드를 실행해야합니다. 이것은 "무작위 라인, 무작위 횟수 선택"입니다.

# print one or two random lines: possibly the same line twice! 
for i in range(random.randint(1, 2)): # change the upper bound as desired 
    print(random.choice(nameLines)) 

다른 경우 random.sample를 사용하여 모든 결과를 인쇄 할 수 있습니다. 이것은 "임의의 수의 불연속 선을 선택"합니다.

# print one or two distinct elements, chosen at random from nameLines 
for line in random.sample(nameLines, random.randint(1, 2)): 
    print(line) 

를 사용하여 사용 사례에 해당 하나!

1

모든 출력 중에서 균등 확률을 원하십니까?

주문이 중요하지 않으며 텍스트 파일에 n 줄이 있다고 가정 할 때, 이는 다른 결과를 n + n(n-1)/2 = n(n+1)/2 개 중에서 선택하려는 것을 의미합니다. 그게 (n+1) choose 2입니다. 추가 값으로 빈 값을 설정하면 올바른 값을 얻을 수 있습니다.

따라서

:

nameFile = ("/path/to/file.txt") 
nameLines = open(nameFile).read().splitlines() 
nameLines.append("") 
randomName = "".join(random.sample(nameLines, 2)) 

이 항상 random.sample 두 가지의 선택되지만 값 중 하나가 추가 된 빈 문자열이 될 수 있습니다. 마치 하나의 단일 값을 선택하는 것과 같습니다.

실제로 모든 가능한 결과를 균등하게 분배하지 않으려면 먼저 1 또는 2를 원하는지 선택하고 이에 따라 이름 목록에서 선택하십시오.