我正在上课,你收集员工的工资,我感到难过。它不断循环“”他们的工资是多少:“”那么我怎么能把它固定到薪水与员工匹配的地方,而不是继续问工资是多少?这是我到目前为止,请帮助我提出任何建议。 (我不是要求你做我的工作。我只是想要一些提示/建议)
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: "))
答案 0 :(得分:1)
此行不符合您的预期:
for i in range(salary):
这将迭代salary
次,依次将i
值0
分配给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
方法。
原始版本的问题:
empsalary
方法中,您的循环for i in range(salary)
会循环遍历最新员工的SALARY。我想你想要绕过NUMBER名员工。你能看出我做的是什么吗?name
和salary
设置为列表,但您并没有将它们视为列表。在此版本中,您将保存在两个列表中输入的所有数据供以后使用(查找最高和最低工资)。答案 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: "))
这应该做你需要的。祝你的任务好运!