אותיות רנדומליות בפייתון

חבר שואל: איך מדפיסים אותיות רנדומליות בפייתון?

אני עונה ראשון- אבל אחרי רעיונות שלכם:

קודם כל קצת פקודות שעוזרות:

הפקודה chr מדפיסה תו לפי ערך מספרי (ASCII) שלו
הפקודה ord מחזירה ערך מספרי (ASCII) של תו

אז נתחיל עם range ו ord יחד כדי לקבל את טווח כל המספרים שמייצגים אות קטנה כלשהי (ואפשר להוסיף פה עוד סוגים של אותיות באותה שיטה):

range(ord('a'), ord('z') + 1)

הפקודה הבאה היא random.sample. היא מקבלת רשימה ומחזירה ערכים באקראי מתוך הרשימה. שילוב השתיים ייתן לנו:

>>> ab = range(ord('a'), ord('z') + 1)
>>> random.sample(ab, 5)
[122, 111, 121, 106, 109]

קיבלנו 5 מספרים אקראיים שכל אחד מהם הוא ערך ASCII של תו מסוים. עכשיו עם List Comprehension נחזיר אותם חזרה לתווים ונחבר למילה אחת:

>>> ''.join(chr(n) for n in random.sample(ab, 5))
'dhxog'
לייק 1

תודה רבה עזרת לי!!!

לייק 1

שלום שלום וברכות על הפורום החדש!

שימו לב ש random.sample מחזיר תת קבוצה של הפרמטר הראשון (צירוף של איברים ללא חזרה) זאת אומרת ש:

random.sample("abc", 3)

תמיד יכלול את האותיות a, b ו-c, ולא יכול להחזיר תוצאות כמו aaa או cca !!!

מומלץ על כן להשתמש ב-random.choice במקום, ועל הדרך גם לנצל את string.ascii_lowercase החמוד:

import random
import string
''.join(random.choice(string.ascii_lowercase) for _ in range(12))

אודי

לייק 1

מדליק! מעניין ש choice לא מקבלת אורך ו sample כן. היו יכולים לחסוך לך את הלולאה…

בפייתון 3.6 בלבד הוסיפו את random.choices:

>>> random.choices("abc", k=10)
['c', 'a', 'b', 'b', 'b', 'c', 'a', 'a', 'a', 'c']