возможная ошибка в python3 (или я тупой), обращение выдает ошибку

#python #python-3.x #pycharm

#python #python-3.x #pycharm

Вопрос:

 placement = "Beaches are cool places to visit in spring however the Mackinaw Bridge is near. Most people visit Mackinaw later since the island is a cool place to explore."
d = {}

for char in placement:
    if char not in d:
        d[char] = 0
        
    d[char] = d[char]   1
min_value = d['B']
for char2 in d:
    if d[char2] < min_value:
        min_value = char2
        
print(d)
  

это работает нормально, но это не:

 product = "iphone and android phones"
lett_d = {}

for char in product:
    if char not in lett_d:
        lett_d[char] = 0

    lett_d[char] = lett_d[char]   1

max_value = lett_d['i']
for char2 in lett_d:
    if lett_d[char2] > max_value:
        max_value = char2

print(lett_d)
  

более поздний возвращает ошибку в pycharm:

 TypeError: '>' not supported between instances of 'int' and 'str'
  

я не понимаю, как это может быть вызвано, и пытался выяснить это в течение часа, я нашел другое решение, но я хочу знать, почему обращение> < вызовет такую ошибку, заранее спасибо 🙂

Комментарии:

1. Даже не читая код, я могу сказать вам, что это не ошибка в Python.

2. Что вы вообще пытаетесь сделать со своим кодом?

3. я просто хочу изучить python, пожалуйста, я просто хочу знать, что с ним не так

4. char2 является строкой. Когда вы это делаете max_value = char2 , вы тоже превращаетесь max_value в строку. Первый код работает только случайно.

5. ох… теперь он понял

Ответ №1:

Первый так же сломан, как и второй; просто так получилось, что условие if d[char2] < min_value никогда не выполняется (потому что ни одна буква не встречается меньше раз, чем B ). Если бы вторая строка была "zulu warriors are cool" , она также, похоже, работала.

Проблема в том, что min_value предполагается отслеживать минимальное количество, поэтому оно должно быть целым числом. Но при назначении min_value = char2 вместо этого устанавливается значение string .

Вы, вероятно, имели в виду min_value = d[char2] .

И если вам нужно не только минимальное количество, но и соответствующий символ, вам нужно отследить это во второй переменной.

Комментарии:

1. Томас, я подробно рассказал о причине, по которой сломанный первый, казалось , был в порядке, надеюсь, ты не возражаешь.

2. @paxdiablo Совсем нет, спасибо! Я сделал это немного точнее 🙂

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

4. кроме того, я получил значение minvalue как x, x появилось только один раз, поэтому первый код сработал

5. @Flyingcar14 Первый код сработал случайно для этого конкретного ввода , а не потому, что код правильный. «x» — последняя запись в словаре, поэтому цикл завершается до того, как он попытается сравнить его с числом. Если вы запустите первый код, но измените placement строку на что-то другое, это не сработает. Если вы понимаете, почему второй код не работает, тогда, конечно, вы понимаете, почему первый код тоже неверен, потому что у него та же проблема.

Ответ №2:

Похоже, вы пытаетесь, возможно, найти наиболее и наименее встречающийся символ в вашем тексте. collections.Counter на помощь (хотя следует отметить, что это не учитывает несколько символов, разделяющих один и тот же «ранг»).

 >>> import collections
>>> text = "iphone and android phones"
>>> counts = collections.Counter(text)
Counter({'n': 4, 'o': 3, ' ': 3, 'd': 3, 'i': 2, 'p': 2, 'h': 2, 'e': 2, 'a': 2, 'r': 1, 's': 1})
>>> (most_common_ch, most_common_count), *_, (least_common_ch, least_common_count) = counts.most_common()
>>> most_common_ch, most_common_count, least_common_ch, least_common_count
('n', 4, 's', 1)
  

Комментарии:

1. нет, я изучаю это на runestone, и я разозлился, пытаясь изучить упражнения по словарю, я просто хочу знать, как изменение знаков < > меняет весь код, я не мог понять это … все равно спасибо