首页 > 解决方案 > Python 创建街道地址表

问题描述

对编程很陌生,对 Python 也很陌生,我在网上做不同的任务。目标是在不依赖外部库的情况下完成很多工作。

我今天无法完成的一项任务是:

给定街道名称和用户提供的编号,创建一个包含 user_provided_number 列的表并输出街道名称。然后,在同一个表中创建相同的输出,但反转街道地址。街道地址之间的空格应替换为“|”。如果街道名称太短而无法完成该行,则呈现“?” 对于每个剩余空间。

场景示例:

街道地址:Mystreet road,用户提供号码:6

预期输出:

M y s t r e
e t | r o a
d | d a o r
| t e e r t
s y M ? ? ? 

到目前为止,我设法做到了以下几点:

strAddress = input("What's your street address?")
givenNumber = input("What's your favourite number from 1 to 10?")
reverseAddress = strAddress[::-1]
splitAddress = list(strAddress)
for row in range(0,int(len(strAddress)/givenNumber)):
    for element in range(0,givenNumber):
        print (splitAddress[element], end=' ')
    print()

为什么这个“数组”(?)在每一行上打印相同的元素?假设用户提供了“4”作为他们的号码,从我编写的代码中,我期望得到这样的输出:

M y s t
r e e t
  r o a
d     

但是输出是:

M y s t
M y s t
M y s t

标签: pythonpython-3.x

解决方案


首先你应该把你的转换givenNumberint()因为input()总是返回字符串。您也可以将整体strAddress转换为自身和自身的反转版本,以使其更容易访问。splitAddress这里不需要,因为您可以像本示例中的列表一样访问字符串长度和元素。在您的第一个循环中,您正在迭代len(strAddress)/givenNumber这还不够,因为我们需要两次打印地址(使用反向版本)并且我们需要填充扩展字符,?因此我们需要将其四舍五入,而不使用math我们可以做的库这就像我展示的那样。最后splitAddress[element],您可以在此处访问地址的第元素索引,该索引0 - 6在每次迭代中都是数字,因此我们需要考虑row打印更多元素。

strAddress = input("What's your street address?")
givenNumber = int(input("What's your favourite number from 1 to 10?"))

strAddress += '|' + strAddress[::-1]
strAddress = strAddress.replace(' ', '|')

lines_to_print = len(strAddress)//givenNumber + (len(strAddress)%givenNumber>0)
for row in range(lines_to_print):
    for element in range(givenNumber):
        if row*givenNumber + element < len(strAddress):
            print(strAddress[row*givenNumber + element], end=' ')
        else:
            print('? ', end='')
    print()

输出Mystreet road6

M y s t r e 
e t | r o a 
d | d a o r 
| t e e r t 
s y M ? ? ? 

推荐阅读