Не могу понять ошибку в скрипте. Не переводит тип данных с одного в другой.

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
32
1
8
Windows 10
Pytyon 3.11
Pycharm
Пишу задание. В нем говорится что нужно используя таблицу букв -баллов высчитать средний балл. Для прекращения ввода нужно ввести пробел. Я скопировал старый код и вставил его в цикл while . Числовые значения баллов сохранены в коде в типе данных str , я попробовал их поменять в строке 34 на тип float и начать их суммировать. Но в строке 35 мне выдает:TypeError: can only concatenate str (not "float") to str.
Python:
print("Вычесления среднего бала")
print("Для прекращения  ввода введите пустую строку")
ocenka = input("Введите оценнку в виде буквы :").upper()
bukvi = ["A+", "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"]
o=" "
schetchik=0
s_ballov=" "
sr_ballov=" "
sred=" "
while ocenka!=" ":
    schetchik += 1
    if ocenka == bukvi[0] or ocenka == bukvi[1]:
        o = 4.0
    if ocenka == bukvi[2]:
        o = 3.7
    elif ocenka == bukvi[3]:
        o = 3.3
    elif ocenka == bukvi[4]:
        o = 3.0
    elif ocenka == bukvi[5]:
         o = 2.7
    elif ocenka == bukvi[6]:
        o = 2.3
    elif ocenka == bukvi[7]:
        o = 2.0
    elif ocenka == bukvi[8]:
        o = 1.7
    elif ocenka == bukvi[9]:
        o = 1.3
    elif ocenka == bukvi[10]:
       o = 1.0
    elif ocenka ==bukvi[11] :
       o = 0
    s_ballov=float(o)
    sr_ballov+=s_ballov
    sred=sr_ballov/schetchik
    ocenka = input("Введите оценнку в виде буквы :").upper()
print("Ваш балл: %s" % sred)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 676
479
83
Спасибо, понял где моя ошибка. Я не присвоил изначально числовое значение, а оставил пустое значение и оно по умолчанию присвоило ему тип str. Правильно я вас понял??
да, sr_ballov строка, а вы пытаетесь сложить ее с флоат
и не по умолчанию стала строкой, а после вашего присвоения пробела
 
  • Мне нравится
Реакции: Vadim_23_03

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 676
479
83
s_ballov=float(o)
sr_ballov+=s_ballov

здесь вы пытаетесь сложить строку и флоат, так нельзя
питон не строго типизированный язык, если вы сначала определили s_ballov как строку, а потом присвоили ей флоат, то она стала флоат, и со строкой складывать ее нельзя
Python:
print("Вычесления среднего бала")
print("Для прекращения  ввода введите пустую строку")
ocenka = input("Введите оценнку в виде буквы :").upper()
bukvi = ["A+", "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"]
o=0
schetchik=0
sr_ballov=0
sred=" "
while ocenka!=" ":
    schetchik += 1
    if ocenka == bukvi[0] or ocenka == bukvi[1]:
        o = 4.0
    if ocenka == bukvi[2]:
        o = 3.7
    elif ocenka == bukvi[3]:
        o = 3.3
    elif ocenka == bukvi[4]:
        o = 3.0
    elif ocenka == bukvi[5]:
         o = 2.7
    elif ocenka == bukvi[6]:
        o = 2.3
    elif ocenka == bukvi[7]:
        o = 2.0
    elif ocenka == bukvi[8]:
        o = 1.7
    elif ocenka == bukvi[9]:
        o = 1.3
    elif ocenka == bukvi[10]:
       o = 1.0
    elif ocenka ==bukvi[11] :
       o = 0
    sr_ballov+=float(o)
    ocenka = input("Введите оценнку в виде буквы :").upper()
sred=str(sr_ballov/schetchik)
print("Ваш балл: %s" % sred)
 
  • Мне нравится
Реакции: Vadim_23_03

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
32
1
8
s_ballov=float(o)
sr_ballov+=s_ballov

здесь вы пытаетесь сложить строку и флоат, так нельзя
питон не строго типизированный язык, если вы сначала определили s_ballov как строку, а потом присвоили ей флоат, то она стала флоат, и со строкой складывать ее нельзя
Python:
print("Вычесления среднего бала")
print("Для прекращения  ввода введите пустую строку")
ocenka = input("Введите оценнку в виде буквы :").upper()
bukvi = ["A+", "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"]
o=0
schetchik=0
sr_ballov=0
sred=" "
while ocenka!=" ":
    schetchik += 1
    if ocenka == bukvi[0] or ocenka == bukvi[1]:
        o = 4.0
    if ocenka == bukvi[2]:
        o = 3.7
    elif ocenka == bukvi[3]:
        o = 3.3
    elif ocenka == bukvi[4]:
        o = 3.0
    elif ocenka == bukvi[5]:
         o = 2.7
    elif ocenka == bukvi[6]:
        o = 2.3
    elif ocenka == bukvi[7]:
        o = 2.0
    elif ocenka == bukvi[8]:
        o = 1.7
    elif ocenka == bukvi[9]:
        o = 1.3
    elif ocenka == bukvi[10]:
       o = 1.0
    elif ocenka ==bukvi[11] :
       o = 0
    sr_ballov+=float(o)
    ocenka = input("Введите оценнку в виде буквы :").upper()
sred=str(sr_ballov/schetchik)
print("Ваш балл: %s" % sred)
Спасибо, понял где моя ошибка. Я не присвоил изначально числовое значение, а оставил пустое значение и оно по умолчанию присвоило ему тип str. Правильно я вас понял??
 

Форум IT Специалистов