, если вы выбрали один и тот же дважды, удалите его из вариантов для раунда:
import random
hex_digits = set('0123456789ABCDEF')
result = ""
pick_from = hex_digits
for digit in range(12):
cur_digit = random.sample(hex_digits, 1)[0]
result += cur_digit
if result[-1] == cur_digit:
pick_from = hex_digits - set(cur_digit)
else:
pick_from = hex_digits
print(result)
Поскольку название упоминает генераторы. Вот как указано выше:
import random
hex_digits = set('0123456789ABCDEF')
def hexGen():
while True:
result = ""
pick_from = hex_digits
for digit in range(12):
cur_digit = random.sample(hex_digits, 1)[0]
result += cur_digit
if result[-1] == cur_digit:
pick_from = hex_digits - set(cur_digit)
else:
pick_from = hex_digits
yield result
my_hex_gen = hexGen()
counter = 0
for result in my_hex_gen:
print(result)
counter += 1
if counter > 10:
break
Результаты:
1ECC6A83EB14
D0897DE15E81
9C3E9028B0DE
CE74A2674AF0
9ECBD32C003D
0DF2E5DAC0FB
31C48E691C96
F33AAC2C2052
CD4CEDADD54D
40A329FF6E25
5F5D71F823A4
Вы также можете изменить цикл while, чтобы получить определенное количество из них на основе пройденного числа в функцию.
Не совсем уверен насчет кода внутри функции replace, но я не уверен, как вы вообще получили результат, так как функция не принимает аргументов и ничего не возвращает?
Попробуйте сделать это:
function replaceAts(tweet) {
var newTweet = tweet.replace('@word', '<a href="https://twitter.com/$1" target="_blank">%$1</a>')
}
return newTweet;
}
var test = 'If you want these foams Ima give you the chrome @WillThaRapper'
console.log(replaceAts(test)); //prints 'If you want these foams Ima give you the chrome <a href="https://twitter.com/$1" target="_blank">%$1</a>'
Вы можете использовать RegExp
положительное выражение lookbehind или простую функцию, возвращающую желаемый результат - который на самом деле более настраиваемый.
var list = [
'If you want these foams Ima give you the chrome @WillThaRapper.',
'Whatever the mind of man can conceive and believe, it can achieve @NapoleonHill.',
'Here is @my_id and please give me @yours.'
];
function replaceAts() {
var replacer = function(match) {
var id = match.substr(1);
return `<a href="https://twitter.com/${id}" target="_blank">${id}</a>`;
};
for (var i = 0; i < list.length; i++) {
list[i] = list[i].replace(/@\w+/g, replacer);
}
}
replaceAts();
console.log(list);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
П.С. Дайте мне знать, если вам нужна версия решения для ES6, так как мы можем уменьшить их размер, значительно или, по крайней мере, улучшить читаемость.
Действительно нужна дополнительная информация, но это то, что вы ищете?
// List of twitter tags
let list = ["@someone", "@anotherperson", "@thisperson"];
const displayAccounts = (arr) => {
let target = document.querySelector('ul');
arr.forEach(twit => {
let html = `<a href="https://twitter.com/${twit}" target="_blank">${twit}</a>`;
let li = document.createElement('li');
li.innerHTML = html;
target.appendChild(li);
});
};
document.addEventListener('DOMContentLoaded', () => {
displayAccounts(list);
});
<div>
<ul>
</ul>
</div>