如何测试每个特定的数字或字符
How to test each specific digit or character
我想接收用户输入的 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 "||:::"
迭代然后对字符串中的每一项执行函数:
def something(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 "||:::"
for letter in raw_input():
something(int(letter))
将邮政编码保留为字符串,创建从输入到输出的映射:
def print_zip(zipcode):
mapping = {
'1': ':::||',
'2': '::|:|',
...etc...
}
for char in zipcode:
try:
print mapping[char]
except KeyError:
print 'Oops, {} not valid in a zipcode!'.format(char)
zipcode = raw_input('Enter a zipcode: ')
print_zip(zipcode)
您可以为此创建一个字典,然后使用 .get
:
访问它的元素
def print_for_zipcode():
zipcode = raw_input("Enter a zipcode: ")
relationship = {"1": ":::||",
"2": "::|:|",
"3": "::||:",
"4": ":|::|",
"5": ":|:|:",
"6": ":||::",
"7": "|:::|",
"8": "|::|:",
"9": "|:|::",
"0": "||:::"}
for ch in zipcode:
print relationship.get(ch, "Not Found")
实际的 运行 会像这样工作:
>>> print_for_zipcode()
Enter a zipcode: 123412
:::||
::|:|
::||:
:|::|
:::||
::|:|
一个不错的解决方法
将它们存储在 tuple
中(而不是字典,因为您的所有值都是按顺序排列的,在这种情况下 list
或 tuple
比通过键和值访问 )
list_bars = (":::||","::|:|",...)
这样你就不需要那么多if
、elif
东西
不要将其转换为 int
,将其保留为 str
本身。使用它,您可以遍历字符串而不是转换后的数字。
终于在一个地方获得所有代码,
zipcode = raw_input("Enter a zipcode: ")
list_bars = (":::||","::|:|","::||:",":|::|",":|:|:",":||::","|:::|","|::|:","|:|::","||:::")
for i in zipcode:
print(list_bars[int(i)-1])
现在进行一个小演示
Enter a zipcode: 123
:::||
::|:|
::||:
使用timeit
模块测试list
、tuple
和dictionary
作为数据结构的区别
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
如您所见,tuple
与其他 相比是最快的 。
您可以使用 dictionary 然后遍历输入:
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
这会给你:
>>>
Enter a zipcode: 54321
:|:|: :|::| ::||: ::|:| :::||
编辑:
没有空格:
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
现在这将打印:
>>>
Enter a zipcode: 54321
:|:|::|::|::||:::|:|:::||
我想接收用户输入的 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 "||:::"
迭代然后对字符串中的每一项执行函数:
def something(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 "||:::"
for letter in raw_input():
something(int(letter))
将邮政编码保留为字符串,创建从输入到输出的映射:
def print_zip(zipcode):
mapping = {
'1': ':::||',
'2': '::|:|',
...etc...
}
for char in zipcode:
try:
print mapping[char]
except KeyError:
print 'Oops, {} not valid in a zipcode!'.format(char)
zipcode = raw_input('Enter a zipcode: ')
print_zip(zipcode)
您可以为此创建一个字典,然后使用 .get
:
def print_for_zipcode():
zipcode = raw_input("Enter a zipcode: ")
relationship = {"1": ":::||",
"2": "::|:|",
"3": "::||:",
"4": ":|::|",
"5": ":|:|:",
"6": ":||::",
"7": "|:::|",
"8": "|::|:",
"9": "|:|::",
"0": "||:::"}
for ch in zipcode:
print relationship.get(ch, "Not Found")
实际的 运行 会像这样工作:
>>> print_for_zipcode()
Enter a zipcode: 123412
:::||
::|:|
::||:
:|::|
:::||
::|:|
一个不错的解决方法
将它们存储在
tuple
中(而不是字典,因为您的所有值都是按顺序排列的,在这种情况下list
或tuple
比通过键和值访问 )list_bars = (":::||","::|:|",...)
这样你就不需要那么多
if
、elif
东西不要将其转换为
int
,将其保留为str
本身。使用它,您可以遍历字符串而不是转换后的数字。
终于在一个地方获得所有代码,
zipcode = raw_input("Enter a zipcode: ")
list_bars = (":::||","::|:|","::||:",":|::|",":|:|:",":||::","|:::|","|::|:","|:|::","||:::")
for i in zipcode:
print(list_bars[int(i)-1])
现在进行一个小演示
Enter a zipcode: 123
:::||
::|:|
::||:
使用timeit
模块测试list
、tuple
和dictionary
作为数据结构的区别
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
如您所见,tuple
与其他 相比是最快的 。
您可以使用 dictionary 然后遍历输入:
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
这会给你:
>>>
Enter a zipcode: 54321
:|:|: :|::| ::||: ::|:| :::||
编辑:
没有空格:
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
现在这将打印:
>>>
Enter a zipcode: 54321
:|:|::|::|::||:::|:|:::||