Проблема с форматированием и отображением выходных данных с помощью tkinter и циклов

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

Я пытаюсь правильно отформатировать свою программу в графическом интерфейсе tkinter, но по какой-то причине я получаю сообщение об ошибке:

     product  = ('%-10s%-10s%-0s%-0s') % (str(names[i])  str(addedHours[i])   str(payOut)   "n") TypeError: not enough arguments for format string
 

Желаемый результат:
введите описание изображения здесь

Вот фрагмент кода, связанный с проблемой (обратите внимание, что части Name / Hours / Pay и — работают нормально, только не те, которые указаны в переменной product)

     def printPayroll(self):

        i = 0
        product = ""
        for y in names:

            payOut = float(wage[i]) * float(addedHours[i])
            product  = ('%-10s%-10s%-0s%-0s') % (str(names[i])  str(addedHours[i])   str(payOut)   "n")

            i  = 1

        self.text.insert(END,("%-10s%-10s%-0s") % ('Name', 'Hours', 'Payn'))
        self.text.insert(END,("%-10s%-10s%-0s") % ('---','-----','---n'))

        self.text.insert(END, product)
 

Ответ №1:

Сообщение об ошибке, которое вы получаете, TypeError: not enough arguments for format string , точно сообщает вам, в чем проблема.

Рассмотрим эту строку кода:

 product  = ('%-10s%-10s%-0s%-0s') % (str(names[i])  str(addedHours[i])   str(payOut)   "n") 
 

Приведенный выше код функционально идентичен этому:

 s = str(names[i])   str(addedHours[i])   str(payOut)   "n"
product  = ('%-10s%-10s%-0s%-0s') % s
 

Для вашей строки форматирования требуется четыре аргумента, но вы даете только один. Простое решение — заменить каждый на , :

 product  = ('%-10s%-10s%-0s%-0s') % (str(names[i]), str(addedHours[i]),  str(payOut), "n")
 

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

1. что за бог <3 <3 <3

2. @jimmyjohn123: нет, не совсем. Вам просто нужно прочитать сообщение об ошибке и предположить, что оно говорит вам правду. Затем спросите себя: «Почему он думает, что я предоставляю только один аргумент?».

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

4. да, это правда, я предположил, что использование ‘ ‘ затем разделяет на разные аргументы, например, как ‘,’ это делает.

5. @jimmyjohn123: если вы хотите, чтобы в выходных данных был знак доллара, вы должны поместить его в строку формата.