0

我正在为你收集员工工资的班级做作业,我已经被难住了。它不断循环“他们的薪水是多少:”部分所以我怎样才能将它修复到薪水与员工匹配的位置,而不是继续询问薪水是多少?这是我到目前为止所拥有的,请帮助我提供任何提示建议。(我不是要你做我的工作。我只是想要一些提示/建议)

def main():
    name = []
    salary = []
    n = 0
    n = int(input("How many employee's will you be entering?: "))
    for i in range(n):
         name = input("Enter the employees name: ")
    empsalary(name,salary)

def empsalary(empname,esalary):
    salary = 0
    salary = int(input("What is their salary: "))
    for i in range(salary):
        if salary < 1 or salary > 200000:
            salary = int(input("What is their salary: "))
        if salary > 0 and salary < 200000:
            salary = int(input("What is their salary: "))
4

3 回答 3

1

让我们尝试更多类似的东西:

def main():
    name = []
    salary = []

    n = 0
    n = int(input("How many employee's will you be entering?: "))

    for i in range(n):
         name.append( input("Enter the employees name: ") )
         salary.append( int(input("What is their salary: ")) )

    print_high_and_low(name, salary)

def print_high_and_low(name, salary):
    """Find maximum and minimum salaries"""
    # find maximum salary
    max = 0
    for i in range(len(salary)):
        if salary[i] > max:
            max = salary[i]
            max_index = i

    # find minimum salary
    min = 9999999  # Smarter would be: sys.maxint (if you import sys)
    for i in range(len(salary)):
        if salary[i] < min:
            min = salary[i]
            min_index = i

    print name[max_index] + " has the highest salary of: " + str(max)
    print name[min_index] + " has the lowest salary of: " + str(min)

请注意,我不需要该empsalary方法。

原版的问题

  1. 在您的empsalary方法for i in range(salary)中,您的循环遍历最新员工的 SALARY。我认为您想遍历 NUMBER 名员工。你能看出这是我做的吗?
  2. 你的那些 if 语句永远不会触发做任何特别有趣的事情。这两个 if 语句的目标是什么?
  3. 您设置namesalary作为列表,但您没有将它们视为列表。在此版本中,您将保存在两个列表中输入的所有数据以供以后使用(查找最高和最低工资)。
于 2013-06-28T21:39:07.690 回答
1

这条线没有做你认为它做的事情:

for i in range(salary):

这将迭代salary次数,依次将i值分配0salary-1.

这就是为什么它不断循环该循环体中的输入。salary如果您在正文中更改也没关系,因为range(salary)在进入循环时进行评估,并评估为包含将分配给的数字的列表i

更新:

此外,没有任何值salary不会触发这些 if 子句之一;

    if salary < 1 or salary > 200000:
        salary = int(input("What is their salary: "))
    if salary > 0 and salary < 200000:
        salary = int(input("What is their salary: "))

更新 2:

看看这段代码:

for i in range(n):
     name = input("Enter the employees name: ")
empsalary(name,salary)

empsalary在询问所有员工姓名后,您只打过一次电话。我可以说这不是你想要的。

更新 3:我还注意到你实际上并没有对name你捕获的 s 做任何事情。您只需在下一次迭代中覆盖它们。不要那样做,把它们存起来。

更新 4:你也没有对salarys 做任何事情,你实际上并没有从你的函数中返回任何东西。

于 2013-06-28T21:35:55.137 回答
0

我不是 Python 方面的专家,但我想我明白你的问题是什么。

根据您的代码here,您正在向用户询问任何大小的数字。一旦他们输入了这个数字,程序就会继续执行 FOR 循环 [salary] 次数。如果您将员工的工资设置为 10,000 之类的巨额工资,这可能会成为问题,因为这将导致循环执行 10,000 次!

我猜您正在尝试确保薪水在 0 到 200,000 之间,如果薪水超出此范围,那么程序将继续要求薪水。如果确实如此,那么 while 循环应该可以解决问题,同时消除几行代码。

def empsalary(empname,esalary):
   salary = 0
   salary = int(input("What is their salary: "))
   while (salary < 1 or salary > 200000):
       salary = int(input("What is their salary: "))

这应该做你需要的。祝你的任务好运!

于 2013-06-28T21:43:51.290 回答