我有一些代码来格式化地址
def format_address(address_string):
house_number = ()
street_name = ()
address_string.split()
for house_number, street_name in enumerate(address_string):
if address_string[0].isnumeric():
house_number = address_string
elif address_string.isalpha():
street_name = address_string
return "house number {house_number} on street named {street_name}".format(house_number=house_number, street_name=street_name)
print(format_address("123 Main Street"))
print(format_address("1001 1st Ave"))
print(format_address("55 North Center Drive"))
期望输出应为:
名为Main street的安街123号房屋
我的输出: t街主街123号房屋
我缺少什么,请帮忙
我认为这就是你想要实现的目标:
输出:
这意味着:用来自
address_string
的单词创建一个新的列表,然后忽略它address_string
是未更改的。您需要给出此.split()
调用其自身名称的结果。就像你写3 + 4
一样,3
的值不会改变,而得到的7
只有在你用它做一些事情时才有用这意味着:每次通过循环,
house_number
变成一个从零开始向上计数的数字,而street_name
变成address_string
中的下一个字母(因为我们仍在使用原始字符串)这意味着:如果
address_string
中的第一个字符是数字,则每次通过循环,house_number
都将替换为整个address_string
address_string
永远不会改变,因此此比较始终具有相同的结果。类似于"123 Main Street"
的字符串以"1"
开头,这是数字,因此house_number
成为整个字符串"123 Main Street"
每次通过循环,
house_number
被for
循环条件替换,然后再次在这个if
中替换。一般来说,您不希望为循环变量赋值;这不是很有帮助,因为它们会不断被循环重新分配由于满足了
if
条件,因此从不测试该elif
要解决这个问题,你必须想清楚。你想迭代什么?这些东西的好名字是什么?有什么规则告诉你这个东西是否应该用于
house_number
?有什么规则告诉你这个东西是否应该用于address_string
?然后确保您使用的测试是有意义的-您正在测试您实际想要使用的值吗?您是否将其分配到正确的位置正如卡尔在回答问题时所说的,你必须想清楚
只是一个简单的指针。如果数字总是第一个元素,我会做一些简单的事情如下:
拆分“”中的字符串(空格字符),第一个元素是数字,其余由
*
元素表示的是一个名为street_name_as_list
的列表,然后。街道名称用空格连接此列表中的所有单词然后,您可以为house_number或street_name添加任何验证,而无需在字符串中使用循环
相关问题 更多 >
编程相关推荐