假設我有一個十進制數,例如20.65. 我想得到以下 x 隨機十進制數:
- 應該有相同的位數。
- 應該有相同的小數位數。
- 如果輸入整數是負數,則應為負數。
- 任何輸出不應重復或與輸入相同。
例子
我給出了如下輸入:
Enter number : 50.26
Enter no of random numbers to be generated : 5
那么它的輸出應該是這樣的:
12.36
69.74
58.39
54.56
94.45
示例 2:
輸入:
Enter number : 5650.265
Enter no of random numbers to be generated : 5
那么它的輸出應該是這樣的:
1652.326
6925.743
5844.394
5464.562
9448.454
示例 3:
輸入:
Enter number : -456
Enter no of random numbers to be generated : 5
那么它的輸出應該是這樣的:
-566
-492
-452
-151
-944
我嘗試過的:
from random import randint
n = float(input("Enter number : "))
x = int(input("Enter no of random integers to be generated : "))
min_choice = int('1' ''.join('0' for i in range(len(str(n))-1)))
max_choice = int(''.join('9' for i in range(len(str(n)))))
for i in range(x):
print(randint(min_choice, max_choice))
輸出為:
Enter number : 53.25
Enter no of random integers to be generated : 5
44864
29942
25832
20500
68083
所以,因為我不能打我的小數位。
uj5u.com熱心網友回復:
您可以將其拆分為兩個函式,一個用于生成單個數字,另一個用于收集值以確保不包含重復項:
import random
def gen_num(inp):
out = ""
if inp[0] == '-':
out = "-"
inp = inp[1:] # Skip sign
# The loop insures the generated numbers
# are of the same length as inp
for dig in inp:
if dig == ".": # Keeping decimal separator where it was
out = "."
else:
out = str(random.randint(1, 9))
return out
def gen_nums(inp, n):
out = set() # Sets can't contain duplicates
while len(out) < n:
num = gen_num(inp)
if num != inp: # Making sure no output number is same as input
out.add(num)
return out
if __name__ == "__main__":
inp = input("Enter number: ")
n = int(input("Enter no of random numbers to be generated: "))
for v in gen_nums(inp, n):
print(v)
請注意將輸入轉換為浮點數并回傳,您可能會遇到浮點錯誤。
另請注意,在給定約束的情況下可以生成有限數量的數字(您不能9從 input 生成值1)并且您可能想要定義在這種情況下應該發生什么(您認為使用代碼會發生什么更多?)。
uj5u.com熱心網友回復:
您可以將輸入轉換為 str 然后使用 split
user_input = 123.321
input_parts = str(user_input).split('.') # This will return a list ["123", "321"]
然后你可以用 len 得到每個的長度
left_side = len(input_parts[0])
right_side = len(input_parts[1])
使用這些長度生成適當長度的整數并將它們連接起來。
left_num = str(random.randint(10**(left_side - 1),(10**left_side)-1))
right_num = str(random.randint(10**(right_side - 1),(10**right_side)-1))
現在您有 2 個適當長度的數字。加入他們吧。
sides = [left_num, right_num]
merge = '.'.join(sides)
final_num = float(merge)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/435751.html
標籤:Python python-3.x 随机的
上一篇:根據條件減少資料框列
