我正在尝试制作一个爱情计算器。为此,我取了两个名字并加上";爱;在这些名字之间。把整个字符串分成几个字符。以列表中某个字符重复的次数作为值创建一个目录。
现在,我需要添加值列表中的第一个和最后一个元素,并将总和附加到other_list中。循环进行,直到list_of_numbers
中只有两个数字。我在循环部分有问题。能请人帮帮我吗。谢谢
name1 = input("Hey please enter first name heren")
name2 = input("Hey please enter second name heren")
love = "loves"
final_string = name1 + love + name2
list_of_name = list(final_string)
numbers = {}
for lets in list_of_name:
if lets not in numbers:
numbers[lets] = 1
else:
numbers[lets] += 1
list_of_numbers = list(numbers.values())
other_list = []
i = len(list_of_numbers)
print(list_of_numbers)
"""this is where i am having problem"""
if len(list_of_numbers) != 2;
for x in range(0, i, 2):
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)
我不确定您的代码应该输出什么,但您应该检查for循环中的长度。
for x in range(0, i, 2):
if len(list_of_numbers) < 2: # check here
break
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)
运行此操作成功。
name1 = input("Hey please enter first name heren")
name2 = input("Hey please enter second name heren")
love = "loves"
final_string = name1 + love + name2
list_of_name = list(final_string)
numbers = {}
for lets in list_of_name:
if lets not in numbers:
numbers[lets] = 1
else:
numbers[lets] += 1
list_of_numbers = list(numbers.values())
other_list = []
i = len(list_of_numbers)
print(list_of_numbers)
"""this is where i am having problem"""
for x in range(0, i, 2):
if len(list_of_numbers) < 2:
break
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)
没有任何错误的完整代码。
你能澄清一下为什么跳过两个步骤for x in range(0,i,2)
吗?否则,我认为如果你只想要列表的第一个元素和最后一个元素,直到列表剩下2个元素,就不需要跳过2个元素了,你可以使用while
循环。
while(len(list_of_numbers) > 2):
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)
我已经根据这个问题更新了你的代码。在这里,我使用了OrderedDict()
作为正确的和,并更改了循环内部的逻辑,以正确地捕捉场景,例如当列表中有一个以上的元素时,以及当列表中只剩下一个元素时。
from collections import OrderedDict
name1 = input("Hey please enter first name heren")
name2 = input("Hey please enter second name heren")
love = "loves"
final_string = name1 + love + name2
list_of_name = list(final_string)
numbers = OrderedDict()
for lets in list_of_name:
if lets not in numbers:
numbers[lets] = 1
else:
numbers[lets] += 1
list_of_numbers = list(numbers.values())
print(list_of_numbers)
other_list = []
i = len(list_of_numbers)
print(list_of_numbers)
"""this is where i am having problem"""
while(list_of_numbers):
if(len(list_of_numbers) == 1):
other_list.append(list_of_numbers.pop())
else:
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
if(len(list_of_numbers) == 0):
#print(len(list_of_numbers))
list_of_numbers += other_list
other_list.clear()
if (len(list_of_numbers)==2):
print(list_of_numbers)
break
print("%2d%2d" % (list_of_numbers[0],list_of_numbers[1]))