如何测试每个特定的数字或字符

bob*_*rge 4 python string if-statement input function

我希望收到用户输入的5位数字,然后打印每个特定数字的内容.

例如,如果用户输入12345,我想首先打印1的特定输出,然后打印另一个输出2,等等.

我该怎么做呢?如果可能的话,我更愿意创建一个函数.

#!/usr/bin/python3

zipcode = int(raw_input("Enter a zipcode: "))

if zipcode == 1:
       print ":::||"
elif zipcode == 2:
       print "::|:|"
elif zipcode == 3:
       print "::||:"
elif zipcode == 4:
       print ":|::|"
elif zipcode == 5:
       print ":|:|:"
elif zipcode == 6:
       print ":||::"
elif zipcode == 7:
       print "|:::|"
elif zipcode == 8:
       print "|::|:"
elif zipcode == 9:
       print "|:|::"
elif zipcode == 0:
       print "||:::"
Run Code Online (Sandbox Code Playgroud)

log*_*gic 7

您可以使用字典,然后遍历输入:

zipcode = raw_input("Enter a zipcode: ")

codes={1:":::||",2:"::|:|",3:"::||:",4:":|::|",5:":|:|:",6:":||::",7:"|:::|",8:"|::|:",9:"|:|::",0:"||:::"}

for num in zipcode:
    print codes[int(num)], #add a comma here if you want it on the same line
Run Code Online (Sandbox Code Playgroud)

这会给你:

>>> 
Enter a zipcode: 54321
:|:|: :|::| ::||: ::|:| :::||
Run Code Online (Sandbox Code Playgroud)

编辑:

没有空格:

zipcode = raw_input("Enter a zipcode: ")

codes={1:":::||",2:"::|:|",3:"::||:",4:":|::|",5:":|:|:",6:":||::",7:"|:::|",8:"|::|:",9:"|:|::",0:"||:::"}

L = [] #create a list

for num in zipcode:
    L.append(codes[int(num)]) #append the values to a list

print ''.join(L) #join them together and then print
Run Code Online (Sandbox Code Playgroud)

现在这将打印:

>>> 
Enter a zipcode: 54321
:|:|::|::|::||:::|:|:::||
Run Code Online (Sandbox Code Playgroud)


Bha*_*Rao 6

一个很好的解决方案

  • 将它们存储在tuple(而不是字典中,因为所有值都按顺序存在,list或者tuple在这种情况下比通过键和值访问更好)

    list_bars = (":::||","::|:|",...)
    
    Run Code Online (Sandbox Code Playgroud)

    这样,你不需要很多if,elif东西

  • 不要把它转换intstr自己.使用此方法,您可以迭代字符串而不是转换的数字.

最后在一个地方获取所有代码,

zipcode = raw_input("Enter a zipcode: ")
list_bars = (":::||","::|:|","::||:",":|::|",":|:|:",":||::","|:::|","|::|:","|:|::","||:::")
for i in zipcode:
    print(list_bars[int(i)-1])
Run Code Online (Sandbox Code Playgroud)

现在进行一个小型演示

Enter a zipcode: 123
:::||
::|:|
::||:
Run Code Online (Sandbox Code Playgroud)

使用timeit模块测试之间的差异list,tupledictionary作为数据结构

bhargav@bhargav:~$ python -m timeit 'list_bars = [":::||","::|:|","::||:",":|::|",":|:|:",":||::","|:::|","|::|:","|:|::","||:::"]; [list_bars[int(i)-1] for i in "12345"]'
100000 loops, best of 3: 3.18 usec per loop
bhargav@bhargav:~$ python -m timeit 'list_bars={1:":::||",2:"::|:|",3:"::||:",4:":|::|",5:":|:|:",6:":||::",7:"|:::|",8:"|::|:",9:"|:|::",0:"||:::"}; [list_bars[int(i)] for i in "12345"]'
100000 loops, best of 3: 3.61 usec per loop
bhargav@bhargav:~$ python -m timeit 'list_bars = (":::||","::|:|","::||:",":|::|",":|:|:",":||::","|:::|","|::|:","|:|::","||:::"); [list_bars[int(i)-1] for i in "12345"]'
100000 loops, best of 3: 2.6 usec per loop
Run Code Online (Sandbox Code Playgroud)

如您所见,与其他人相比,a tuple最快的.