在我的脚本中要求输入

时间:2013-07-08 14:40:38

标签: python python-2.7

我想提示用户输入要运行的用户数和电子邮件地址以填充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))

3 个答案:

答案 0 :(得分: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)或标题案例(如此)并坚持下去。没有什么比滚动丢失的代码库并找出特定变量正在使用的情况更烦人。

答案 1 :(得分:0)

我根本不是Python,但在这一行的末尾看起来似乎是1个方括号:

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

答案 2 :(得分: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然后Test0然后Test0而不是我期望的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,因为你拥有的是名字的列表,而不是一个名字。

不幸的是,我没有时间用你的代码解决其余的问题,其中有很多(包括你实际要问的关于输入的问题),但那应该得到你开始修理它。