חבר שואל: איך מדפיסים אותיות רנדומליות בפייתון?
אני עונה ראשון- אבל אחרי רעיונות שלכם:
קודם כל קצת פקודות שעוזרות:
הפקודה 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'
תודה רבה עזרת לי!!!
שלום שלום וברכות על הפורום החדש!
שימו לב ש 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))
אודי
מדליק! מעניין ש choice לא מקבלת אורך ו sample כן. היו יכולים לחסוך לך את הלולאה…
בפייתון 3.6 בלבד הוסיפו את random.choices
:
>>> random.choices("abc", k=10)
['c', 'a', 'b', 'b', 'b', 'c', 'a', 'a', 'a', 'c']