#python
#python
Вопрос:
Итак, у меня есть эта полностью испорченная программа. Что я хочу сделать, это прервать цикл, как только он отобразит три одинаковые буквы. Пока что у меня есть:
#Declaring letter variable
letters = str('AEIOU')
A = 0
E = 0
I = 0
O = 0
U = 0
for i in range(0, 9):
print(random.choice(letters))
if (random.choice(letters)) == ('A'):
A 1
print(random.choice(letters))
if A > 3:
quit()
Диапазон произвольный. Просто для целей тестирования. Я также пытался использовать цикл while, но я также не мог понять, как его отключить. Это просто бесконечно повторялось:
A = 0
import random
while A < 3:
print(random.choice(letters))
if (random.choice(letters)) == ('A'):
A 1
print(random.choice(letters))
if A > 3:
quit()
Есть предложения? Пожалуйста, не ненавидьте слишком сильно…
Комментарии:
1. 1 не является допустимым утверждением в python. Ваша логика о сохранении счетчика верна. Что вам нужно сделать, это
A = A 1
или даже прощеA =1
2. @Alan —
A 1
это совершенно верное утверждение. Это просто бесполезно само по себе.3. @TigerhawkT3 Да, это то, что я имел в виду. В конце концов, это выдало бы ошибку, если бы это было не так.
Ответ №1:
Вам нужно сохранить случайный символ для сравнения и сохранить увеличенный счетчик:
import random
A = 0
while A < 3:
a = random.choice(letters)
if a == 'A':
A = 1
print(a)
Если вы хотите отслеживать все буквы, используйте словарь:
import random
letters = 'AEIOU'
d = {'A':0, 'E':0, 'I':0, 'O':0, 'U':0}
while 1:
letter = random.choice(letters)
d[letter] = 1
if d[letter] > 2:
break
Комментарии:
1. Большое спасибо за помощь!!
Ответ №2:
Вам нужно как-то посчитать буквы — словарь хорошо подходит для этой цели, как показал TigerhawkT3. Здесь я использую defaultdict , который имеет значение по умолчанию для всех записей — поскольку я использую int в качестве значения по умолчанию, значение по умолчанию равно нулю. Это несколько сложнее, но избавляет нас от инициализации массива, что может раздражать, если количество значений заранее неизвестно или велико.
Если вы хотите выйти из цикла, используйте «break», который прерывает текущий уровень цикла, поэтому для вложенных циклов вам понадобятся множественные перерывы.
import collections
import random
letters = str('AEIOU')
printed = collections.defaultdict(int)
while True:
letter = random.choice(letters)
print(letter)
printed[letter] = 1
if printed[letter] > 2:
break
Ответ №3:
Использование счетчика из библиотеки коллекций Python,
import random
from collections import Counter
letters = str('AEIOU')
counter = Counter()
limit = 3
while 1:
letter = random.choice(letters)
print(letter)
counter[letter] = 1
if counter[letter] >= limit:
break
Ссылка для счетчика:
https://docs.python.org/2/library/collections.html#collections .Счетчик
Комментарии:
1. Большое спасибо! Это работает отлично. Я не знал о counter. Я должен был провести дополнительные исследования