-3

我想提示用户输入要运行的用户数和电子邮件地址以填充 csv 文件。我收到一些语法错误。我如何让这个工作?

enter code here

import csv

# Define users 
valid_input = False
while not valid_input:
    users =raw_input('Number of users: ')
    try:
        users = range(0,int(users)
        valid_input = True
    except:
        print "Invalid input"
        pass

First_Name = ["Test"+str(user) for user in range(1, users+1)]
Last_Name = ["User%s" %user for user in users]
email_addresses = []
for user in users:
    email= raw_input("Email domain for user %d: " %user)
    email_addresses.append(last_names[user] + email)
Password = ["Password1" for user in users]
Group =["Test" for user in users]
Admin = ["Yes" for user in users]
# open a file for writing.
# open a file for writing.
with open('users.csv', 'wb') as csv_out:
    writer = csv.writer(csv_out)
    writer.writerows(zip(Email_Address, Password, First_Name, Last_Name, Group, Admin))
4

3 回答 3

2

线

Email_Address = (raw_input('Email_Address') [Last_Names + "Email_Address " for Last_Names   inLast_Name]])

是无效的语法。实际上很难说出你想用那条线做什么,但它是非常无效的语法。

此外,您似乎误解了 python 中的迭代。在您的第一行中,您提示输入一个数字,然后尝试在其他多个地方迭代它,我猜这与您的意图相去甚远。

users = (raw_input('number of users'))

将用户设置为单个字符串。我猜你真正想要的是更像这样的东西:

valid_input = False
while not valid_input:
    users =raw_input('Number of users: ')
    try:
        users = range(0,int(users))
        valid_input = True
    except:
        print "Invalid input"
        pass

我一直在阅读代码,虽然它似乎与您在那里编写的内容相去甚远,但我猜您想提示用户为每个用户输入一个电子邮件地址。如果确实如此,您将这样做:

email_addresses = []
for user in users:
    email = raw_input("Email address for user %d: " %user)
    email_addresses.extend([email + last_name for last_name in last_names])

显然我误解了你的意图,这是你正在寻找的解决方案:

email_addresses = []
for user in users:
    email= raw_input("Email domain for user %d: " %user)
    email_addresses.append(last_names[user] + email)

此外,还有一些风格说明:

  • 尽量保持所有变量名的描述性。例如,您拥有的 last_name 列表实际上没有姓氏,但包含用户 ID,因此 user_ids 将是一个更好的名称
  • 如果您要采用复数命名法,请确保将列表复数,然后确保项目可以作为单数版本引用,而不是相反。例如:

    last_name = [#some list] [#something for last_names in last_name]

只是令人困惑。它应该是:

last_names = [#some_list]
[#something for last_name in last_names]
  • 选择蛇形案例(like_this)或标题案例(likeThis)并坚持下去。没有什么比滚动丢失的代码库并找出特定变量正在使用哪种情况更烦人的了。
于 2013-07-08T14:42:47.057 回答
0

我根本不喜欢 Python,但在这一行的末尾似乎太多了 1 个方括号:

Email_Address = (raw_input('Email_Address') [Last_Names + "Email_Address " for Last_Names   inLast_Name]])
于 2013-07-08T14:42:58.533 回答
0

在这一行之后:

users = (raw_input('number of users'))

users是一个字符串。假设您输入 100。

现在,您迭代users

First_Name = ["Test"+str(user) for user in users]

字符串是可迭代的,因此user采用字符串的单个字符'100'。也就是说,user将首先是'1',然后是 ,'0'然后是'0'Test1然后你会得到Test0Test0不是我期望你期望的 100 个项目。

您可能希望将输入转换为整数:

users = int(raw_input('number of users'))

然后迭代一个范围(我假设你想要1通过n而不是0通过n-1

First_Names = ["Test"+str(user) for user in range(1, users+1)]

我还冒昧地将变量的名称更改为First_Names您所拥有的是名字列表,而不是单个名字。

不幸的是,我真的没有时间讨论您的代码的其余问题,其中有很多(包括您实际询问的有关输入的问题),但这应该让您开始修复它向上。

于 2013-07-08T15:01:11.193 回答