Я не уверен, как вы собираетесь его развернуть, но даже с точки зрения кодирования в его нынешнем виде он не будет вести себя так, как вы ожидаете. Я предполагаю, что вы делаете это только для того, чтобы учиться. Итак, позвольте мне указать пару мест, где вы неправильно поняли основы, и чисто педагогический пример того, как это можно сделать. Имейте в виду, что я настоятельно не рекомендую использовать это в любом реальном контексте.
Вы определили функцию calcweeklywages
дважды в своем коде. Когда на самом деле это должно быть определено только один раз. Если вы хотите использовать код, вы называете его так, как вы это делали в программе main()
. Эта функция работает одинаково для обоих ваших работников, поэтому для получения разной еженедельной заработной платы вы должны получать разную заработную плату. Но как вы связываете их соответствующую заработную плату с их именами (или некоторым их представлением в вашем коде)?
Это хороший пример использования объектно-ориентированного программирования. Краткий и интересный праймер здесь здесь . Что касается кода, он будет выглядеть следующим образом:
class Employee:
def __init__(self, Name, Wage = 0, Hours = 0):
self.Name = Name
self.Wage = Wage
self.Hours = Hours
def calcweeklywages(Employee, totalhours):
'''Return the total weekly wages for a worker working totalHours,
with a given regular hourlyWage. Include overtime for hours over 40.
'''
hourlywage = Employee.Wage
if totalhours <= 40:
totalwages = hourlywage * totalhours
else:
overtime = totalhours - 40
totalwages = hourlywage * 40 + (1.5 * hourlywage) * overtime
return totalwages
# In your main body, you just test the functionality
EmployeeList = []
EmployeeList.append(Employee("Anne", 34))
EmployeeList.append(Employee("Johnathan", 30))
while(True):
action = input('Exit? (y/n): ')
if(action == 'y'):
break
else:
name = input('Enter the employee\'s name: ')
for Employee in EmployeeList:
if(Employee.Name == name):
Person = Employee
hours = int(input('Enter the number of hours worked: '))
print('Wages for', hours, 'hours at', Person.Wage,'per hour is', calcweeklywages(Person, hours))
РЕДАКТИРОВАТЬ: я извиняюсь, я забыл об административной части. Но вот,
class Employee:
def __init__(self, Name, Wage = 0, Hours = 0, Admin = False, code = ''):
self.Name = Name
self.Wage = Wage
self.Hours = Hours
self.Admin = Admin
self.code = code
def calcweeklywages(Employee, totalhours):
'''Return the total weekly wages for a worker working totalHours,
with a given regular hourlyWage. Include overtime for hours over 40.
'''
hourlywage = Employee.Wage
if totalhours <= 40:
totalwages = hourlywage * totalhours
else:
overtime = totalhours - 40
totalwages = hourlywage * 40 + (1.5 * hourlywage) * overtime
return totalwages
# In your main body, you just test the functionality
EmployeeList = []
EmployeeList.append(Employee("Anne", 34))
EmployeeList.append(Employee("Johnathan", 30))
EmployeeList.append(Employee("Mr. Admin", 50, 0, True, 'Open Sesame'))
while(True):
action = int(input('Enter action :\n 1. Exit.\n 2. Add new employee.\n 3. Compute weekly wage\n'))
if(action == 1):
break
elif(action == 2):
AdminName = input('Enter operator name : ')
Flag = False
for EmployeeInst in EmployeeList:
if((EmployeeInst.Name == AdminName) & (EmployeeInst.Admin)):
code = input('Enter code :')
if(code != EmployeeInst.code):
break
NewName = input('New Employee name? :')
NewWage = int(input('New employee wage? :'))
EmployeeList.append(Employee(NewName, NewWage))
Flag = True
if(not Flag):
print('Wrong Credentials')
break
elif(action == 3):
name = input('Enter the employee\'s name: ')
for Employee in EmployeeList:
if(Employee.Name == name):
Person = Employee
hours = int(input('Enter the number of hours worked: '))
print('Wages for', hours, 'hours at', Person.Wage,'per hour is', calcweeklywages(Person, hours))
else:
print('Input out of range')
break
Но опять же, сеанс не является постоянным между различными запусками ядра. Здесь нет настоящей «безопасности», это всего лишь исследование объектно-ориентированного кода Python. Пожалуйста, не используйте это для каких-либо реальных приложений. Существует много всего, что связано со всем этим. Вы должны хранить его в защищенном файле, иметь некоторый интерфейс GUI и т. Д. И т. Д. Есть гораздо более умные пользователи, которые помогут вам внедрить систему в целом. Всего наилучшего в учебе. Приветствия.
Используйте DPI 96. WPF масштабирует Ваше изображение на основе размера в дюймах, в то время как программа просмотра изображений отображает пиксели. В большинстве систем Windows разрешением экрана, как предполагается, являются 96 DPI, таким образом использование этого в Вашем изображении приведет к непосредственному переводу.
Это - результат самого .jpg файла, указывающего DPI - WPF просто повинуется. Вот сообщение форума, детализирующее проблему с некоторыми решениями:
Спасибо Mark! Я сделал некоторый поиск с помощью Google на основе Вашей информации и нашел эту статью, которая предоставила решение для получения результата, который я хотел. Это начинает иметь смысл теперь...
Править: Linkrot. Вставка критического текста от статьи здесь для ссылки....
<Image Source=”{Binding …}”
Stretch=”Uniform”
Width=”{Binding Source.PixelWidth,RelativeSource={RelativeSource Self}}”
Height=”{Binding Source.PixelHeight,RelativeSource={RelativeSource Self}}” />
Здесь мы установили Фрагмент на Универсальную форму и связали Ширину и Высоту к PixelWidth и> PixelHeight Источника, эффективно игнорируя DPI. Изображение однако не будет пикселем> прекрасный, даже когда с помощью SnapToDevicePixels (который просто привязывает границы, не пиксели> в рамках изображения). Однако WPF в 3,5 SP1 будет поддерживать NearestNeighbor> BitmapScalingMode, который должен исправить это.