Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向列表中的某些用户提供折扣_Python - Fatal编程技术网

Python 向列表中的某些用户提供折扣

Python 向列表中的某些用户提供折扣,python,Python,我想给25岁以下的用户打31%的折扣,给40岁以上的用户打50%的折扣 另一方面,对于不住在马德里的用户,只有5%的折扣 students = [ ('Marcos', 23, 'Madrid', 850, '2388711341'), ('Elena', 35, 'Madrid', 360, '0387700342'), ('Carmen', 21, 'Getafe', 50, '0014871388'), ('Carlos', 41, 'Madrid', 58

我想给25岁以下的用户打31%的折扣,给40岁以上的用户打50%的折扣

另一方面,对于不住在马德里的用户,只有5%的折扣

students = [
    ('Marcos', 23, 'Madrid', 850, '2388711341'),
    ('Elena', 35, 'Madrid', 360, '0387700342'),
    ('Carmen', 21, 'Getafe', 50, '0014871388'),
    ('Carlos', 41, 'Madrid', 580, '00887118456'),
    ('Maria', 28, 'Madrid', 150, '587')
]

for item in students:
    student, age, city, debt, id = item
if age < 25
    else debt * 0.69
if age > 40
    else debt * 0.5
if city is not 'Madrid'
    else debt * 0.95
    print(f'Name: {student} - Debt: {debt}')
学生=[
('Marcos',23,'Madrid',850,'2388711341'),
('Elena',35',马德里',360',0387700342'),
('Carmen',21,'Getafe',50,'0014871388'),
('Carlos',41,'Madrid',580,'00887118456'),
('Maria',28,'Madrid',150,'587')
]
对于学生中的项目:
学生、年龄、城市、债务、id=项目
如果年龄<25岁
其他债务*0.69
如果年龄>40岁
其他债务*0.5
如果城市不是“马德里”
其他债务*0.95
打印(f'Name:{student}-债务:{Debt}')
打印示例: 姓名:Marcos-债务:586,5

姓名:Elena-债务:360

姓名:卡门-债务:47,5

姓名:卡洛斯-债务:290


姓名:Maria-债务:150

您必须执行以下操作:

for item in students:
    # check if age < 25
    if(item[1] < 25):
           #add discount of 31%
           item[3] = item[3] * (1-0.31)
对于学生中的项目:
#检查年龄是否小于25岁
如果(第[1]项<25):
#加上31%的折扣
第[3]项=第[3]项*(1-0.31)
但是,我真的建议您首先改进数据。 我的意思是,与其使用列表,不如使用字典。甚至可能是字典里的字典。这样,您就可以使用nameid等键来访问数据。在上面的代码中,我必须使用数字——这很难理解

这里有一个使用字典的链接


关于你的更新代码

for item in students:
    student, age, city, debt, id = item
    #check age
    if age < 25:
        debt *= (1-0.31)
    elif age > 40:
        debt *= 0.5

    print(f'Name: {student} - Debt: {debt}')
对于学生中的项目:
学生、年龄、城市、债务、id=项目
#检查年龄
如果年龄<25岁:
债务*=(1-0.31)
elif年龄>40岁:
债务*=0.5
打印(f'Name:{student}-债务:{Debt}')

下面的代码使用“Student”作为一种轻量级数据结构。
它声明名为“学生”的学生列表。 它运行在此列表上,并使用新的学生对象(在重新计算债务字段后)填充名为“after_discount_students”的新列表

有问题吗

import collections

Student = collections.namedtuple('Student', 'name age city debt id')

students = [
    Student('Marcos', 23, 'Madrid', 850, '2388711341'),
    Student('Elena', 35, 'MaDrid', 360, '0387700342'),
    Student('Carmen', 21, 'Getafe', 50, '0014871388'),
    Student('Carlos', 41, 'MAdrid', 580, '00887118456'),
    Student('Maria', 28, 'Madrixx', 150, '587')
]

after_discount_students = []


def discount_calc(student):
    if student.age < 25:
        return 0.69
     elif student.age > 40:
        return 0.5
     else:
        return 1


for student in students:
    after_discount_students.append(
        Student(student.name, student.age, student.city, discount_calc(student) * 
                student.debt, student.id))
for student in after_discount_students:
    print(student)
学生=[
('Marcos',23,'Madrid',850,'2388711341'),
('Elena',35',马德里',360',0387700342'),
('Carmen',21,'Getafe',50,'0014871388'),
('Carlos',41,'Madrid',580,'00887118456'),
('Maria',28,'Madrid',150,'587')
]
对于学生中的项目:
学生、年龄、城市、债务、id=项目
如果年龄<25岁:
债务*=(1-0.31)
打印(f'Student:{Student}-债务:{Debt}')
elif年龄>40岁:
债务*=(1-0.5)
打印(f'Student:{Student}-债务:{Debt}')
elif city.startswith('G'):
债务*=(1-0.05)
打印(f'Student:{Student}-债务:{Debt}')
其他:
打印(f'Student:{Student}-债务:{Debt}')

你的问题是什么?我如何打印学生的姓名和所需的折扣?基于这些:1)我想给所有25岁以下的用户打31%的折扣,给40岁以上的用户打50%的折扣。2) 另一方面,对于不住在马德里的用户,只有5%的折扣。使用以下格式:print(f'Name:{student}-Debt:{Debt}'),在询问之前至少尝试一下。所以可以帮忙,但不应该做作业。。。提示:如果/elif/else是第一种方法。你是对的,我已经对我的问题进行了编辑,以便更清楚。我尝试了前面的代码,但结果是:语法错误:无效语法更新的答案格式不正确。这显然是一种更好的方法。然而,我猜Eduardo只是在学习python。不知道这是否会带来很多无法解释的东西。是的,你说得对,我正在学习Python。。。很抱歉没有这么明确,爱德华多。我在代码之前添加了注释。请随意提问:-)注意:必须使用python 3.6才能在打印语句中使用
f-strings
Student(name='Marcos', age=23, city='Madrid', debt=586.5, id='2388711341')
Student(name='Elena', age=35, city='MaDrid', debt=360, id='0387700342')
Student(name='Carmen', age=21, city='Getafe', debt=34.5, id='0014871388')
Student(name='Carlos', age=41, city='MAdrid', debt=290.0, id='00887118456')
Student(name='Maria', age=28, city='Madrixx', debt=150, id='587')
    students = [
    ('Marcos', 23, 'Madrid', 850, '2388711341'),
    ('Elena', 35, 'Madrid', 360, '0387700342'),
    ('Carmen', 21, 'Getafe', 50, '0014871388'),
    ('Carlos', 41, 'Madrid', 580, '00887118456'),
    ('Maria', 28, 'Madrid', 150, '587')
]

for item in students :
    student, age, city, debt, id = item
    if age < 25 :
        debt *= (1-0.31)
        print (f'Student: {student} - Debt: {debt}')
    elif age > 40 :
        debt *= (1-0.5)
        print (f'Student: {student} - Debt: {debt}')
    elif city.startswith('G') :
        debt *= (1-0.05)
        print (f'Student: {student} - Debt: {debt}')
    else :
        print (f'Student: {student} - Debt: {debt}')