2014-11-08 3 views
-1

나는 극장 티켓을 파이썬으로 판매하는 시뮬레이션을 프로그램하려고합니다. 이 프로그램은 성인, 어린이 및 노인의 수를 기입 한 후 총 소득을 계산하지만 소득 및 그 비율은 항상 0을 보여줍니다. 나는 percentage_sold 및 sum_income에 문제가 있습니다. 아무도 도와 줄 수 있습니까?초보자 : 파이썬, 출력 문제가

## -*- coding: iso-8859-15 -*- 

import os 
import sys 
from tkinter import * 
from tkinter import ttk 

class Theater: 
     def __init__(self, name, seats, price_adult, price_child, price_senior): 
       self.name = name 
       self.seats = seats 
       self.price_adult = price_adult 
       self.price_child = price_child 
       self.price_senior = price_senior 
       self.sold_adult = IntVar(root) 
       self.sold_child = IntVar(root) 
       self.sold_senior = IntVar(root) 
       self.percentage_sold = IntVar(root) 
       self.sum_income = IntVar(root) 

     def __str__(self): 
       return self.name 

root = Tk() 
root.title("Teater ekonomi") 

def create_list(FILENAME):  
     f = open(FILENAME, "r") 
     theater_list = [] 
     parts = [] 
     for line in f: 
       parts = line.strip().split('/') 
       theater_list.append(Theater(parts[0], int(parts[1]), 
       int(parts[2]), int(parts[3]), int(parts[4]))) 
     f.close() 
     return theater_list 

def calculate_profits(theater_list): 
     for thing in theater_list: 

       thing.percentage_sold = int(((thing.sold_adult 
       + thing.sold_child + thing.sold_senior)/(float)thing.seats) * 100) 

       thing.sum_income = ((thing.sold_adult * thing.price_adult) 
       + (thing.sold_child * thing.price_child) + (thing.sold_senior * thing.price_senior)) 

FILENAME = "teatrar.txt" 
error_message = "" 
if os.path.isfile(FILENAME): 
     try: 
       theater_list = create_list(FILENAME) 
     except ValueError: 
       error_message = "Filen 'teatrar.txt' är korrupt.\nProgrammet kan inte fortsätta." 
else: 
     error_message = "Filen 'teatrar.txt' existerar inte eller är inte i programmappen.\nProgrammet kan inte fortsätta." 


mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) 

if error_message != "": 
     ttk.Label(mainframe, text=error_message, justify="center").grid(column=1, row=1, sticky=(W, E)) 
else: 
     theater_names_col = [] 
     theater_ticket_one = [] 
     theater_ticket_two = [] 
     theater_ticket_three = [] 
     theater_perc_row = [] 
     theater_profits_row = [] 

     ttk.Label(mainframe, text="Teatrar").grid(column=1, row=1, sticky=(W)) 
     ttk.Label(mainframe, text="Vuxenbiljetter").grid(column=2, row=1, sticky=(W)) 
     ttk.Label(mainframe, text="Barnbiljetter").grid(column=4, row=1, sticky=(W)) 
     ttk.Label(mainframe, text="Pensionärbiljetter").grid(column=6, row=1, sticky=(W)) 
     ttk.Label(mainframe, text="Procent fullsatt").grid(column=8, row=1, sticky=(W)) 
     ttk.Label(mainframe, text="Inkomst för kvällen").grid(column=10, row=1, sticky=(W)) 

     for x, y in enumerate(theater_list): 
       ttk.Label(mainframe, text="st").grid(column=3, row=x+2, sticky=(W)) 
       ttk.Label(mainframe, text="st").grid(column=5, row=x+2, sticky=(W)) 
       ttk.Label(mainframe, text="st").grid(column=7, row=x+2, sticky=(W)) 
       ttk.Label(mainframe, text="%").grid(column=9, row=x+2, sticky=(W)) 
       ttk.Label(mainframe, text="kr").grid(column=11, row=x+2, sticky=(W)) 

       theater_names_col.append(ttk.Label(mainframe, text=y.name).grid(column=1, row=x+2, sticky=(W,E))) 
       theater_ticket_one.append(ttk.Entry(mainframe, textvariable=y.sold_adult, justify="right").grid(column=2, row=x+2, sticky=(W,E))) 
       theater_ticket_two.append(ttk.Entry(mainframe, textvariable=y.sold_child, justify="right").grid(column=4, row=x+2, sticky=(W,E))) 
       theater_ticket_two.append(ttk.Entry(mainframe, textvariable=y.sold_senior, justify="right").grid(column=6, row=x+2, sticky=(W,E))) 
       theater_perc_row.append(ttk.Label(mainframe, textvariable=y.percentage_sold, justify="right").grid(column=8, row=x+2, sticky=(W,E))) 
       theater_profits_row.append(ttk.Label(mainframe, textvariable=y.sum_income, justify="right").grid(column=10, row=x+2, sticky=(W,E))) 



root.mainloop() 
+0

여기서 calculate_profits()를 사용합니다. – user3378649

+0

'theater_proc_row.append (ttk.Label (mainframe, textvariable = y.percentage_sold, justify = "right") 그리드 (column = 8, row = x + 2, sticky = (W, E))) theater_profits_row.append grid (column = 10, row = x + 2, sticky = (W, E))) ' – user3657176

답변

1

정수 분할이 아닌 부동 소수점 나누기를 수행해야합니다. 당신이를 검색 할 .get()를 값을 변경 .set(xxx)를 사용합니다 DoubleVarfloat,의 문제 게다가

# instead of 
seats_filled = seats_sold/total_seats 
# have 
seats_filled = seats_sold/float(total_seats) 

IntVar, StringVar, BooleanVar를 사용하는 경우, 그리고 가장 쉬운 방법은 피연산자 중 하나가 떠 캐스트합니다 현재 값.

+0

도와 주시겠습니까? – user3657176

+0

@ user3657176 : 도움이 되었기를 바랍니다. –