Я пытаюсь написать метод, который генерирует и возвращает n случайных точек в 2-мерном пространстве с учетом ширины и высоты в Python. Я закодировал алгоритм, но я хочу получать в системе точки с плавающей запятой. Вот мой код:

import random    

npoints = int(input("Type the npoints:"))
width = int(input("Enter the Width you want:"))
height = int (input("Enter the Height you want:"))


allpoints = [(a,b) for a in range(width) for b in range(height)]
sample = random.sample(allpoints, npoints)

print(sample)

Output is:

Type the npoints:4
Enter the Width you want:10
Enter the Height you want:8
[(8, 7), (3, 3), (7, 7), (9, 0)]

Как их распечатать как float. Например: (8,75, 6,31)

Большое спасибо за помощь.

2
Mehmet Akif Çelebi 27 Ноя 2021 в 16:23

2 ответа

Лучший ответ

Измените a и b на float:

import random    

npoints = int(input("Type the npoints:"))
width = int(input("Enter the Width you want:"))
height = int (input("Enter the Height you want:"))

# HERE ---------v--------v
allpoints = [(float(a),float(b)) for a in range(width) for b in range(height)]
sample = random.sample(allpoints, npoints)

print(sample)

Выход:

Type the npoints:4
Enter the Width you want:10
Enter the Height you want:8
[(1.0, 0.0), (8.0, 7.0), (5.0, 1.0), (2.0, 5.0)]

Обновить

Я хочу плавать, но ваше решение печатается только так: 2.0 5.0
Как можно напечатать вот так: 5,56 2,75?

Печатать с двумя десятичными знаками:

>>> print(*[f"({w:.2f}, {h:.2f})" for w, h in sample], sep=', ')
(1.00, 0.00), (8.00, 7.00), (5.00, 1.00), (2.00, 5.00)
1
Corralien 27 Ноя 2021 в 16:49
Спасибо, братан, но это только превращает int в плавание. Как я могу получить 5,56, 10,35 и т. Д.?
 – 
Mehmet Akif Çelebi
27 Ноя 2021 в 16:38
Вы не хотите float, а string, верно?
 – 
Corralien
27 Ноя 2021 в 16:40
Нет, братан, я хочу float, но ваше решение печатается только так: 2,0 5,0 Как мы можем напечатать вот так: 5,56 2,75?
 – 
Mehmet Akif Çelebi
27 Ноя 2021 в 16:42
1
Да, братан, большое спасибо.
 – 
Mehmet Akif Çelebi
27 Ноя 2021 в 17:01

Сначала вы хотите использовать float в качестве входных данных. Для height и width замените int() на float().

Теперь вы больше не можете генерировать всю точку в блоке, определяемом ими, поскольку плавающие точки могут иметь произвольную точность (теоретически).

Итак, вам нужен способ сгенерировать координаты отдельно. Случайная координата Y между 0 и height может быть сгенерирована следующим образом:

<random number between 0 to 1> * height

Аналогично по ширине. И вы можете использовать random.random(), чтобы получить случайное число от 0 до 1.

Полный код:

import random

npoints = int(input("Type the npoints:"))
width = float(input("Enter the Width you want:"))
height = float(input("Enter the Height you want:"))

sample = []
for _ in range(npoints):
    sample.append((width * random.random(), height * random.random()))

print(sample)

Выход:

Type the npoints:3
Enter the Width you want:2.5
Enter the Height you want:3.5
[(0.7136697226350142, 1.3640823010874898), (2.4598008083240517, 1.691902371689177), (1.955991673900633, 2.730363157986461)]
1
rdas 27 Ноя 2021 в 16:32
Спасибо, дружище, это помогло мне.
 – 
Mehmet Akif Çelebi
27 Ноя 2021 в 17:02