Python 需要帮助循环吗

Python 需要帮助循环吗,python,python-3.x,Python,Python 3.x,我正在为班级做一项作业,你们在班上收取你们员工的工资,我被难倒了。它不断循环“他们的工资是多少:”部分,那么我如何才能将其固定到工资与员工匹配的位置,而不是不断询问工资是多少?这是我到目前为止所拥有的,请帮我提供任何提示和建议(我不是要求你做我的工作。我只是想要一些提示/建议) def main(): 名称=[] 工资=[] n=0 n=int(输入(“您将输入多少名员工?:”) 对于范围(n)中的i: 名称=输入(“输入员工姓名:”) 员工薪酬(姓名、薪酬) def empsalary(emp

我正在为班级做一项作业,你们在班上收取你们员工的工资,我被难倒了。它不断循环“他们的工资是多少:”部分,那么我如何才能将其固定到工资与员工匹配的位置,而不是不断询问工资是多少?这是我到目前为止所拥有的,请帮我提供任何提示和建议(我不是要求你做我的工作。我只是想要一些提示/建议)

def main():
名称=[]
工资=[]
n=0
n=int(输入(“您将输入多少名员工?:”)
对于范围(n)中的i:
名称=输入(“输入员工姓名:”)
员工薪酬(姓名、薪酬)
def empsalary(empname,esalary):
工资=0
薪水=int(输入(“他们的薪水是多少:”)
对于范围内的i(工资):
如果工资<1或工资>200000:
薪水=int(输入(“他们的薪水是多少:”)
如果工资>0且工资<200000:
薪水=int(输入(“他们的薪水是多少:”)

这行代码的作用与您认为的不同:

for i in range(salary):
这将迭代
salary
次,依次将
i
0
分配给
salary-1

这就是为什么它在循环体的输入上不断循环。如果您更改正文中的
salary
,这也无关紧要,因为
范围(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: "))
在询问所有员工姓名后,您只需调用一次
empalary
。我知道这不是你想要的

更新3:我还注意到,您实际上并没有对捕获的
名称执行任何操作。您只需在下一次迭代中覆盖它们。不要那样做,把它们储存起来


更新4:您也不会对
工资执行任何操作,也不会从函数中实际返回任何内容。

让我们尝试类似的操作:

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)
def main():
名称=[]
工资=[]
n=0
n=int(输入(“您将输入多少名员工?:”)
对于范围(n)中的i:
name.append(输入(“输入员工姓名:”)
palary.append(int(输入(“他们的工资是多少:”))
打印高和低(姓名、工资)
def打印高和低(姓名、工资):
“”“查找最高和最低工资”“”
#找到最高工资
最大值=0
对于范围内的i(len(工资)):
如果工资[i]>最大值:
最高=工资[i]
最大指数=i
#找到最低工资
min=9999999#更智能的是:sys.maxint(如果导入sys)
对于范围内的i(len(工资)):
如果工资[i]
请注意,我不需要
empalary
方法

原始版本的问题

  • 在您的
    empalary
    方法中,您的循环
    for i In range(salary)
    循环您最近一位员工的工资。我想你应该考虑一下员工人数。你能看到我就是这么做的吗
  • 你的那些if语句永远不会触发你去做任何特别有趣的事情。对于这两个if语句,您的目标是什么
  • 您将
    name
    salary
    设置为列表,但您没有将它们视为列表。在此版本中,您将保存在两个列表中输入的所有数据,以供以后使用(查找最高和最低工资)

  • 我不是Python方面的专家,但我想我明白了您的问题所在

    根据这里的代码,您要求用户提供任意大小的数字。一旦他们输入了这个数字,程序就会执行FOR循环[salary]多次。如果您将员工的工资设置为10000,这可能是一个问题,因为这将导致循环执行10000次

    我猜你是想确保工资在0到200000之间,如果工资超出这个范围,那么程序会继续要求工资。如果确实是这样,那么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: "))
    
    def empalary(empname,esalary):
    工资=0
    薪水=int(输入(“他们的薪水是多少:”)
    而(工资<1或工资>200000):
    薪水=int(输入(“他们的薪水是多少:”)
    

    这应该可以满足你的需要。祝你任务顺利

    所以,我不应该使用“for”循环?我只是觉得它会起作用,因为这部分我确实起作用了。对于范围(n)中的i:name=input(“输入员工姓名:”),我不理解您的推理。使用带有条件的
    while
    循环来测试薪资是否不可接受。我看到了您更新的部分,我将“salary=0”,而empalary=salary有效吗?@thatone没有。为什么?想想循环的目的是什么。我真的很讨厌这些东西。但我认为这会起作用,因为薪水和薪水是同一件事的一部分。所以我想既然他们是,他们就必须能够=彼此。这解决了问题,但并不能解释OP代码的具体错误。我本来会这么做的,但很遗憾,我的老师说我们需要使用“def”模块函数来实现这一点。@thatonede“def模块函数”这个短语从何而来?不正确。我要用它们来找出工资最高和最低的员工。@Thatone我还添加了一个方法来找出工资最高和最低的员工。有更简洁的方法可以做到这一点,但我认为这是最容易阅读和理解的。
    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)
    
    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: "))