需要帮助循环

时间:2013-06-28 21:31:33

标签: python python-3.x

我正在上课,你收集员工的工资,我感到难过。它不断循环“”他们的工资是多少:“”那么我怎么能把它固定到薪水与员工匹配的地方,而不是继续问工资是多少?这是我到目前为止,请帮助我提出任何建议。 (我不是要求你做我的工作。我只是想要一些提示/建议)

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: "))

3 个答案:

答案 0 :(得分:1)

此行不符合您的预期:

for i in range(salary):

这将迭代salary次,依次将i0分配给salary-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做任何事情。您只需在下一次迭代中覆盖它们。不要那样做,存放它们。

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

答案 1 :(得分: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设置为列表,但您并没有将它们视为列表。在此版本中,您将保存在两个列表中输入的所有数据供以后使用(查找最高和最低工资)。

答案 2 :(得分:0)

我不是Python的专家,但我想我知道你的问题是什么。

根据您的代码,您要求用户提供任意大小的数字。一旦他们输入了这个数字,程序就会继续执行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: "))

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