python - بيثون طباعة خط عشوائي من ملف دون تكرار




python-3.x file (4)

المشكلة في التعليمات البرمجية الخاصة بك هي أنه إذا واجهت خطًا قمت بعرضه بالفعل ، فأنت فقط تعود ولا تفعل شيئًا.

ما يمكنك القيام به مع تعديلات صغيرة على التعليمات البرمجية الخاصة بك هو اختيار خط عشوائي جديد حتى تجد واحدة لم تخترها بالفعل. يتم ذلك باستخدام الكتلة while :

# Variable for text file
text_database = './text_database.txt'
#List of already chosen lines
lines_list = []

# Elif instruction for random lines from file
elif command == '/random':
    with open (text_database) as f:
        lines = f.readlines()
        random_tmp = random.choice(lines)
        #while line has been chosen already, try to chose another one
        while random_tmp in lines_list:
            random_tmp = random.choice(lines)
        lines_list.append(random_tmp)
        print(random_tmp)

لاحظ أن هناك بعض القيود على هذا الرمز:

  • سيتم تشغيل الحلقة إلى الأبد بمجرد اختيار جميع الخطوط
  • يمكن أن تستهلك ذاكرة تذكر أسطر النص التي تم اختيارها ، بدلاً من ذلك يمكنك تذكر فهارس الأسطر التي اخترتها.

لدي القليل من البرنامج الذي يطبع خطوط عشوائية من ملف نصي. أريد حفظ الأسطر التي تم اختيارها بالفعل في قائمة أو أي شيء آخر ، لذلك لن يتكرر ذلك في المرة القادمة.

مثال

text_database.txt

  1. هذا خط
  2. هذا هو خط آخر
  3. هذا هو خط الاختبار
  4. أن تمتص

هذا مثال لإظهار أن الإخراج عشوائي ويقوم البرنامج بتكرار الخطوط - وليس الإخراج المباشر في الجهاز:

This is a line
That sucks
That sucks
That sucks
This is a line

رمز بلدي:

# Variable for text file
text_database = './text_database.txt'

...

with open (text_database) as f:
    lines = f.readlines()
    print(random.choice(lines))

ما حاولت:

with open (text_database) as f:
    lines_list = []
    lines = f.readlines()
    random_tmp = random.choice(lines)
    if random_tmp not in lines_list:
        lines_list.append(random_tmp)
        print(random_tmp)

أنها لا تعمل وأنا بحاجة إلى مساعدة. شكرا يا شباب.


جرب هذا الحل يطبع سطر عشوائي واحد فقط في كل مرة

import random
text_database = './text_database.txt'
lines_list = []
with open (text_database) as f:
    lines = f.readlines()
    lines_list.append(lines)
for item in lines_list:
    rand_item = item[random.randrange(len(item))]
print(rand_item)

هذا هو حل فوضوي حقا ولكن لقد اختبرت هذا مسبقا


f = open(text_database, "r")

list = []
list_of_nums = []

for i in f:
    list.append(i)

elif command == '/random':

    randomNum = random.randint(0, len(list) - 1)

    def reRun():
        global randomNum
        for i in list_of_nums:

            if randomNum == i:
                randomNum = random.randint(0, len(list) - 1)
                reRun()


    reRun()
    list_of_nums.append(randomNum)

    print(list[randomNum])

ما هذا الكود deos هو الذهاب من خلال جميع الخطوط في و وضعها في قائمة. مما كان عليه في اختيار رقم عشوائي bettween 0 وطول القائمة وطباعة خط عشوائي المقابلة لهذا الرقم

أتمنى أن يساعدك هذا! ومرحبا بكم في كومة الفائض


elif command == '/random':
    with open (text_database) as f:
        lines = f.readlines()

    while len(lines)>0:
        max_int = len(lines)-1 #update the len each loop as we remove one each time
        print(lines.pop(random.randint(0, max_int))) #pop a random value from the list






text