Saya terjebak pada masalah dengan rentang angka acak.

Saya memiliki 4 nilai dan kamus dengan rentang angka acak:

import random

val1 = 1
val2 = 1
val3 = 2
val4 = 3

dict_num = {1: random.randrange(1, 10),
        2: random.randrange(10, 20),
        3: random.randrange(20, 30)}

for key in dict_num :
    if key == val1:
        out1 = dict_num [key]
    if key == val2:
        out2 = dict_num [key]

print(out1, out2)

# Output
  5 5

Saya pikir ini akan menjadi pendekatan yang bersih tetapi masalah saya muncul jika salah satu variabel val memiliki nilai yang sama, hasilnya sama. Nilai acak dikaitkan dengan kunci dan tidak berubah. Apakah ada pendekatan yang lebih baik sehingga setiap val akan memiliki nomor acaknya sendiri?

Saya menghargai saran apa pun, Terima kasih!

0
Mason 12 Mei 2021, 19:08

2 jawaban

Jawaban Terbaik

Anda dapat menyimpan rentang angka acak sebagai tupel dalam kamus dan memanggil fungsi random.randrange di dalam for loop. Catatan - Jangan gunakan dict sebagai nama variabel karena ini adalah kata kunci dalam python.

import random

val1 = 1
val2 = 1
val3 = 2
val4 = 3

randomval_mapping = 
        {1: (1,10),
        2: (10,20),
        3: (20,30)}

for key in randomval_mapping:
    lower, upper = randomval_mapping[key]
    if key == val1:
        random_val = random.randrange(lower, upper)
        print(key, random_val)
    if key == val2:
        random_val = random.randrange(lower, upper)
        print(key, random_val)
    else:
        random_val = random.randrange(lower, upper)

Keluaran -

1 9
1 8
0
GaneshTata 12 Mei 2021, 16:48

Saya akan mengatakan ini adalah pendekatan yang lebih baik:

import random


value_dct = {'value1': 1, 'value2': 1, 'value3': 2, 'value4': 3}

range_dct = {1: [1, 10],
             2: [10, 20],
             3: [20, 30]}

for key, value in value_dct.items():
    value_dct[key] = random.randrange(range_dct[value][0], range_dct[value][1])

print(value_dct)

Pertama simpan nilai-nilai itu dalam kamus sehingga akan lebih mudah untuk mengaksesnya dalam satu lingkaran, juga jangan langsung memanggil randrange karena itu akan mengatur nilai-nilai itu, alih-alih cukup tentukan rentang dan saat menetapkan rentang ke nilai, panggil fungsi randrange.

Untuk mengakses nilai-nilai tersebut Anda dapat misalnya menggunakan: value_dct['value1'] dan ini akan memberi Anda nilai.

1
Matiiss 12 Mei 2021, 16:47