ตัวแปรสุ่มที่เลือกระหว่างตัวเลขสามตัว (10, 100 และ 1,000)


19

เป็นไปได้ไหมที่จะมีตัวแปรที่เลือกสุ่มหมายเลขจากสามหมายเลขที่ตัดสินใจล่วงหน้า?

ตัวอย่าง:

var= 10 or 100 or 1000

1
ฉันไม่ได้เขียนโปรแกรมใน UNIX ดังนั้นฉันไม่สามารถเขียนรหัสได้ แต่นี่เป็นอีกวิธีหนึ่ง: val = left ("1,000", length = Random 2 ถึง 4) หากต้องการมีสามค่าที่ไม่เกี่ยวข้องรหัสจะคล้ายกัน
Sensii Miller

คำตอบ:


31

$RANDOMใช้อาร์เรย์เพื่อเก็บค่าและเลือกในหมู่พวกเขาใช้ในตัวในตัวแปร ตัวอย่างเช่น,

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

คุณภาพของการสุ่มจะไม่เป็นไปได้ที่ดีที่สุด (อ่านไบต์จาก/dev/urandomสำหรับที่) แต่มันควรจะดีกว่าพอสำหรับสคริปต์

หมายเหตุ 1:ในฐานะที่เป็นคนได้ตั้งข้อสังเกตในการแสดงความคิดเห็นแทนการเริ่มต้นองค์ประกอบอาร์เรย์เป็นรายบุคคลหนึ่งสามารถของหลักสูตรใช้ litteral x=(10 100 1000)อาร์เรย์:

หมายเหตุ 2:แทนที่การเข้ารหัสจำนวนองค์ประกอบในอาร์เรย์อย่างหนักองค์ประกอบเรเดียมสามารถถูกแยกออกมา${x[$RANDOM%${#x[@]}]}ได้


5
+1 ในขณะที่คำตอบของ Zeppelin นั้นฉลาดในกรณีนี้โดยเฉพาะ แต่วิธีการแบบอาร์เรย์นั้นกว้างกว่าทั่วไปมาก
Kamil Maciorowski

4
ดูเหมือนว่าx=(10 100 1000)จะสร้างอาร์เรย์จากตัวอักษรในทุบตีนี้จะอ่านง่ายขึ้นและสำนวนมากขึ้น
แมว

1
@cat: ความคิดเห็นที่อ่านง่ายแตกต่างกันไป ฉันชอบที่จะใส่แต่ละรายการในบรรทัดแยกกันมักจะมีความคิดเห็นต่อท้ายอธิบายค่า
AlexP

@AlexP โอ้ฉันเดาว่าฉันจะไม่วิจารณ์ถ้าฉันคิดว่ามันตั้งใจ ยุติธรรมพอแม้ว่า
แมว

1
@AlexP x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.บางอย่างเช่นนั้น?
Nick T

30

หากคุณใช้bash (หรือzshหรือksh93 ) คุณสามารถทำได้:

echo "$((10**($RANDOM%3+1)))"

หรือ

var=$((10**($RANDOM%3+1)))

เพื่อกำหนดให้กับvar


:) ง่ายเมื่อคุณเห็นมัน แต่ฉันไม่ได้ ขอบคุณ !!
Espen Larsen



5

นี่เป็นวิธีที่คลุมเครือเล็กน้อย:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

สิ่งนี้จะกำหนดค่าการสุ่มให้$varตามที่ต้องการ printfสตริงรูปแบบ1%0Nd- นี่เป็นสาเหตุ0ที่จะพิมพ์ด้วยNเลขศูนย์ชั้นนำที่จะเป็นจำนวนเต็มสุ่มในช่วงN[1,3]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.