Python 3中的用户输入和排序列表
我需要帮助生成如下输出:Python 3中的用户输入和排序列表,python,python-3.x,list,sorting,input,Python,Python 3.x,List,Sorting,Input,我需要帮助生成如下输出: 1. Enter a member: samantha Names: ['Samantha'] 2. Enter a member: susan Names: ['Samantha', 'Susan'] 3. Enter a member: billy Names: ['Billy', 'Samantha', 'Susan'] 4. Enter a member: billy 4. Enter a member: samantha 4. Enter a membe
1. Enter a member: samantha
Names: ['Samantha']
2. Enter a member: susan
Names: ['Samantha', 'Susan']
3. Enter a member: billy
Names: ['Billy', 'Samantha', 'Susan']
4. Enter a member: billy
4. Enter a member: samantha
4. Enter a member: Jason
Names: ['Billy', 'Jason', 'Samantha', 'Susan']
5. Enter a member:
Members:
1. Billy
2. Jason
3. Samantha
4. Susan
我已经努力创建了一个这样做的程序,但没有效果。我将在代码本身的问题中进行评论。提前谢谢你的帮助
def function():
x = []
#a = "1." # I tried to number the questions by adding these but it doesnt work
while True:
#a += 1
name = input("Enter name: ").title()
x.append(name)
print("Names:", x)
#if name == name: # this condition is made so that an input that is typed in again doesn't get included in the list
#name = input("Enter name: ").title()
# where should I add an insert() here to have the list alphabetically ordered?
if not name: # pressing enter prints out the second half of the output, listing the members
#print("\nMembers:", x).sort()
break
function()
这是实现逻辑的一种方法
def function():
x = []
while True:
name = input('{0}. Enter a member: '.format(len(x)+1)).title()
if not name in x:
x.append(name)
x.sort()
print('Names:', x)
if len(x) == 4:
break
print('Members:')
print('\n'.join(['{0}. {1}'.format(i, j) for i, j in enumerate(x)]))
解释
- 仅当
不在name
中时,才使用x
、list.append
和打印名称list.sort
- 似乎您希望最多有4个名称。在这种情况下,当
达到4时,len(x)
break
- 您可以将列表理解与
一起用于最终输出str.format
- 这是实现逻辑的一种方法
def function():
x = []
while True:
name = input('{0}. Enter a member: '.format(len(x)+1)).title()
if not name in x:
x.append(name)
x.sort()
print('Names:', x)
if len(x) == 4:
break
print('Members:')
print('\n'.join(['{0}. {1}'.format(i, j) for i, j in enumerate(x)]))
解释
- 仅当
不在name
中时,才使用x
、list.append
和打印名称list.sort
- 似乎您希望最多有4个名称。在这种情况下,当
达到4时,len(x)
break
- 您可以将列表理解与
一起用于最终输出str.format
- 未实现
getPositionByBinarySearch
,因此您可以自己实现它
def getPositionByBinarySearch(arr, name):
"""
implement binary search to find the index at which insertion should happen)
return -1 if insertion is not needed (exact match is found)
"""
def func():
arr = []
while True:
name = input(str(len(x)+1) + '. Enter a number: ')
if not name:
print "Members:"
for i, member in enumerate(members):
print(str(i+1) + '. ' + member)
break;
pos = getPositionByBinarySearch(arr, name)
if (pos != -1):
arr = arr[:i] + [name] + arr[i:]
未实现
getPositionByBinarySearch
,因此您可以自己实现它
def getPositionByBinarySearch(arr, name):
"""
implement binary search to find the index at which insertion should happen)
return -1 if insertion is not needed (exact match is found)
"""
def func():
arr = []
while True:
name = input(str(len(x)+1) + '. Enter a number: ')
if not name:
print "Members:"
for i, member in enumerate(members):
print(str(i+1) + '. ' + member)
break;
pos = getPositionByBinarySearch(arr, name)
if (pos != -1):
arr = arr[:i] + [name] + arr[i:]
你几乎做了所有正确的事情,但问题是你在哪里打破了循环。首先添加名称,然后检查输入是否只是enter。所以,首先检查输入,然后将其附加到列表中。 这是我的密码:
def fun1():
l = []
while True:
s = input("Enter a member: ")
if not s:
break
l.append(s.title())
print("Names:", l)
l.sort()
print("Members:")
for i in range(0, len(l)):
print(i+1,end = '')
print(".", l[i])
fun1()
希望能有所帮助。您几乎做了所有正确的事情,但问题是您在哪里打破了循环。首先添加名称,然后检查输入是否只是enter。所以,首先检查输入,然后将其附加到列表中。 这是我的密码:
def fun1():
l = []
while True:
s = input("Enter a member: ")
if not s:
break
l.append(s.title())
print("Names:", l)
l.sort()
print("Members:")
for i in range(0, len(l)):
print(i+1,end = '')
print(".", l[i])
fun1()
希望有帮助。您不需要对代码进行太多更改。主要的重组包括将所有异常(如名称重复和无输入)移动到循环的顶部。评论中包含了更多的解释
def function():
x = []
#no need to keep track of the number of members, the list length will give us this information
#infinite loop that will be interrupted, when no input is given
while True:
#determine length of list, +1 because Python index starts with 0
n = len(x) + 1
#ask for input, format prints the number into the bracket position
name = input("{}. Enter a member: ".format(n))
#check if name already in list
if name in x:
#if name in list, ignore the input and start while loop again
continue
#no input - print out members and stop
if not name:
print("Members:")
#get for each member the index number i
for i, member in enumerate(x):
#print index in position {0} and member name in position {1}
print("{0}. {1}".format(i + 1, member))
#leave function()
return
#append name and sort list
x.append(name)
x.sort()
#print list
print("Names:", x)
function()
您不需要对代码进行太多更改。主要的重组包括将所有异常(如名称重复和无输入)移动到循环的顶部。评论中包含了更多的解释
def function():
x = []
#no need to keep track of the number of members, the list length will give us this information
#infinite loop that will be interrupted, when no input is given
while True:
#determine length of list, +1 because Python index starts with 0
n = len(x) + 1
#ask for input, format prints the number into the bracket position
name = input("{}. Enter a member: ".format(n))
#check if name already in list
if name in x:
#if name in list, ignore the input and start while loop again
continue
#no input - print out members and stop
if not name:
print("Members:")
#get for each member the index number i
for i, member in enumerate(x):
#print index in position {0} and member name in position {1}
print("{0}. {1}".format(i + 1, member))
#leave function()
return
#append name and sort list
x.append(name)
x.sort()
#print list
print("Names:", x)
function()
我个人更喜欢使用
集合
以更干净的方式避免重复,并且我还将两个打印部分合并到一个单独的功能中。因此,我的建议是针对以下内容,其行为与您的稍有不同,但(在我看来)更简单:
请注意,如果成员数量增长过多,排序(此处仅用于
print_members
函数)将变得非常昂贵,在这种情况下,我建议使用二元搜索树而不是集合。我个人更喜欢使用集合
,以更干净的方式避免重复,我还将两个打印部分合并为一个单独的功能。因此,我的建议是针对以下内容,其行为与您的稍有不同,但(在我看来)更简单:
请注意,如果成员数量增长过多,排序(此处仅用于
print_members
函数)将变得非常昂贵,在这种情况下,我建议使用二元搜索树而不是集合。我保留了大部分结构,但修复了很多问题。为了获得编号,我使用了%string格式化操作符。您也可以使用str.format
您可以使用x.sort()
对列表进行就地排序(列表将替换为已排序的列表)。要检查某个内容是否在列表中,请使用mylist中的内容
或内容不在mylist中
def function():
x = []
a = 1
while True:
prompt = '%d. Enter a member: ' % a
name = input(prompt)
name = name.title() # convert first letter to uppercase
if name.strip() == '': # enter or empty string entered
print()
print('Members:')
for idx, item in enumerate(x):
print('%d. %s' % (idx+1, item))
break
elif name not in x:
x.append(name)
x.sort() # sort x in place
print("Names: ", x)
a += 1
function()
以及我的输出:
1. Enter a member: samantha
Names: ['Samantha']
2. Enter a member: susan
Names: ['Samantha', 'Susan']
3. Enter a member: billy
Names: ['Billy', 'Samantha', 'Susan']
4. Enter a member: Jason
Names: ['Billy', 'Jason', 'Samantha', 'Susan']
5. Enter a member:
Members:
1. Billy
2. Jason
3. Samantha
4. Susan
------------------
(program exited with code: 0)
Press any key to continue . . .
我保留了你的大部分结构,但修复了不少东西。为了获得编号,我使用了%string格式化操作符。您也可以使用str.format 您可以使用
x.sort()
对列表进行就地排序(列表将替换为已排序的列表)。要检查某个内容是否在列表中,请使用mylist中的内容
或内容不在mylist中
def function():
x = []
a = 1
while True:
prompt = '%d. Enter a member: ' % a
name = input(prompt)
name = name.title() # convert first letter to uppercase
if name.strip() == '': # enter or empty string entered
print()
print('Members:')
for idx, item in enumerate(x):
print('%d. %s' % (idx+1, item))
break
elif name not in x:
x.append(name)
x.sort() # sort x in place
print("Names: ", x)
a += 1
function()
以及我的输出:
1. Enter a member: samantha
Names: ['Samantha']
2. Enter a member: susan
Names: ['Samantha', 'Susan']
3. Enter a member: billy
Names: ['Billy', 'Samantha', 'Susan']
4. Enter a member: Jason
Names: ['Billy', 'Jason', 'Samantha', 'Susan']
5. Enter a member:
Members:
1. Billy
2. Jason
3. Samantha
4. Susan
------------------
(program exited with code: 0)
Press any key to continue . . .
这是在我的水平上我最了解的一个,所以谢谢你!我怎样才能在字符串仍然要求用户输入的情况下使其有序?只需在“l.append(s.title())”之后加上“l.sort()”,这是我在这个级别上最能理解的,谢谢!我怎样才能在它仍然要求用户输入的情况下使字符串保持有序呢?只需在“l.append(s.title())”之后加上“l.sort()”,嘿,伙计们。所以我编辑了一点,创建了一个应用程序,它接受无限数量的名称,然后使用排序按字母顺序显示它们。示例输出:输入姓名(-1退出):Brennan输入姓名(-1退出):Edgar输入姓名(-1退出):Allan输入姓名(-1退出):-1姓名是[Allan,Brennan,Edgar]嘿,伙计们。所以我编辑了一点,创建了一个应用程序,它接受无限数量的名称,然后使用排序按字母顺序显示它们。示例输出:输入姓名(-1退出):Brennan输入姓名(-1退出):Edgar输入姓名(-1退出):Allan输入姓名(-1退出):-1姓名为[Allan,Brennan,Edgar]