List 将函数应用于列表的每个元素
我正在尝试学习Python,以便在raspberry Pi中执行一些项目,因此我对所有的编码都还是非常陌生的。我想对字符串中的每个字母应用一个函数,包括空格和重复字母。我首先将它转换为一个列表,然后将其更改为使用这里的一个答案中的提示,但到目前为止,似乎对于同一列表中的两个相等元素,该函数只应用于其中一个。 例如,在这种情况下,输出上只有一个L和一个O,没有空格(空格应输出0.7s的暂停)。 下面是我正试图编写的基于monkmakes.com项目之一的非常简单的程序的确切代码。基本上,这个想法是通过点亮一个连接到树莓圆周率的LED,将一个字符串转换成莫尔斯电码。到目前为止,它仅用于处理消息“Hello World”: 谁能告诉我如何将函数应用于列表中的每个字符串(字符),甚至是重复的元素和空格?List 将函数应用于列表的每个元素,list,python-3.x,List,Python 3.x,我正在尝试学习Python,以便在raspberry Pi中执行一些项目,因此我对所有的编码都还是非常陌生的。我想对字符串中的每个字母应用一个函数,包括空格和重复字母。我首先将它转换为一个列表,然后将其更改为使用这里的一个答案中的提示,但到目前为止,似乎对于同一列表中的两个相等元素,该函数只应用于其中一个。 例如,在这种情况下,输出上只有一个L和一个O,没有空格(空格应输出0.7s的暂停)。 下面是我正试图编写的基于monkmakes.com项目之一的非常简单的程序的确切代码。基本上,这个想法是
提前谢谢你 您可以使用映射功能:
list_name = list(map(function_name, iterable_variable))
其中,“list_name”是保存结果的变量,“function_name”是希望应用于列表中所有元素的函数,“iterable_variable”是可以循环使用的任何变量,如列表或字符串。您甚至可以跳过将字符串转换为列表,因为这也可以做到。我的一位朋友帮了我,他调整了代码,将方法条件重新排列为Elif,并将“char”替换为其他内容的迭代。显然,“char”引起了一些问题。最后一个循环也被清理干净了。以下是最终工作代码:
import RPi.GPIO as GPIO
import time
import itertools
#define basic blink styles for morse
#length of a dot is one unit
#length of a dash is three units
def fast_blink():
# Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
GPIO.setmode(GPIO.BCM)
red_pin = 18
GPIO.setup(red_pin, GPIO.OUT)
GPIO.output(red_pin, True) # LED on
time.sleep(0.1) # delay 0.1 seconds
GPIO.output(red_pin, False) # LED off
time.sleep(0.1) # delay 0.1 seconds
def slow_blink():
# Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
GPIO.setmode(GPIO.BCM)
red_pin = 18
GPIO.setup(red_pin, GPIO.OUT)
GPIO.output(red_pin, True) # LED on
time.sleep(0.3) # delay 0.1 seconds
GPIO.output(red_pin, False) # LED off
time.sleep(0.1) # delay 0.1 seconds
#Morse Code Letter Blink Funcions
#Define fast_blink and slow_blink repetitions
#The space between parts of the same letter is one unit
#The space between letters is three units
#define H code
def morse_H():
print("H")
for _ in itertools.repeat(None, 4):
fast_blink()
time.sleep(0.3)
#define E code
def morse_E():
print("E")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.3)
#define L code
def morse_L():
print("L")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 1):
slow_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 2):
fast_blink()
time.sleep(0.3)
#define O code
def morse_O():
print("O")
for _ in itertools.repeat(None, 3):
slow_blink()
time.sleep(0.3)
#define W code
def morse_W():
print("W")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 2):
slow_blink()
time.sleep(0.3)
#define R code
def morse_R():
print("R")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 1):
slow_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.3)
#define D code
def morse_D():
print("D")
for _ in itertools.repeat(None, 1):
slow_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 2):
fast_blink()
time.sleep(0.3)
#MESSAGE INPUT
message = input("Type your message \n")
message = message.upper()
print("Translating {} to morse, look at the LED" .format(message))
len_message = len(message)
print("Message is {} characters long." .format(len_message))
#MESSAGE TRANSLATION
#Create translation function
def m_translate(letter):
if letter == "H":
morse_H()
elif letter == "E":
morse_E()
elif letter == "L":
morse_L()
elif letter == "O":
morse_O()
elif letter == "W":
morse_W()
elif letter == "R":
morse_R()
elif letter == "D":
morse_D()
elif letter == " ":
print("\n")
time.sleep(0.7)
else:
pass
#MESSAGE OUTPUT
#Execute in endless loop
try:
while True:
for letter in message:
m_translate(letter)
print ("\n" * 100)
except KeyboardInterrupt:
print("Transmission ended.")
GPIO.cleanup()
quit
这是Python3 btwDupplicate中的,我在问题的代码和答案的代码中都尝试了这个建议,我仍然得到相同的问题非常感谢你的建议,它帮助我找到了我以前没有使用过的map函数。虽然在谷歌搜索中,我看到它表明我还没有弄明白如何正确使用它。但是,对于这种情况,最终输出是相同的。我正在根据monkmakes.com的一个项目,将代码编辑为我正在尝试的非常简单的程序的确切代码。基本上,这个想法是通过点亮一个连接到树莓圆周率的LED将字符串转换成莫尔斯电码
import RPi.GPIO as GPIO
import time
import itertools
#define basic blink styles for morse
#length of a dot is one unit
#length of a dash is three units
def fast_blink():
# Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
GPIO.setmode(GPIO.BCM)
red_pin = 18
GPIO.setup(red_pin, GPIO.OUT)
GPIO.output(red_pin, True) # LED on
time.sleep(0.1) # delay 0.1 seconds
GPIO.output(red_pin, False) # LED off
time.sleep(0.1) # delay 0.1 seconds
def slow_blink():
# Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
GPIO.setmode(GPIO.BCM)
red_pin = 18
GPIO.setup(red_pin, GPIO.OUT)
GPIO.output(red_pin, True) # LED on
time.sleep(0.3) # delay 0.1 seconds
GPIO.output(red_pin, False) # LED off
time.sleep(0.1) # delay 0.1 seconds
#Morse Code Letter Blink Funcions
#Define fast_blink and slow_blink repetitions
#The space between parts of the same letter is one unit
#The space between letters is three units
#define H code
def morse_H():
print("H")
for _ in itertools.repeat(None, 4):
fast_blink()
time.sleep(0.3)
#define E code
def morse_E():
print("E")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.3)
#define L code
def morse_L():
print("L")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 1):
slow_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 2):
fast_blink()
time.sleep(0.3)
#define O code
def morse_O():
print("O")
for _ in itertools.repeat(None, 3):
slow_blink()
time.sleep(0.3)
#define W code
def morse_W():
print("W")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 2):
slow_blink()
time.sleep(0.3)
#define R code
def morse_R():
print("R")
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 1):
slow_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 1):
fast_blink()
time.sleep(0.3)
#define D code
def morse_D():
print("D")
for _ in itertools.repeat(None, 1):
slow_blink()
time.sleep(0.1)
for _ in itertools.repeat(None, 2):
fast_blink()
time.sleep(0.3)
#MESSAGE INPUT
message = input("Type your message \n")
message = message.upper()
print("Translating {} to morse, look at the LED" .format(message))
len_message = len(message)
print("Message is {} characters long." .format(len_message))
#MESSAGE TRANSLATION
#Create translation function
def m_translate(letter):
if letter == "H":
morse_H()
elif letter == "E":
morse_E()
elif letter == "L":
morse_L()
elif letter == "O":
morse_O()
elif letter == "W":
morse_W()
elif letter == "R":
morse_R()
elif letter == "D":
morse_D()
elif letter == " ":
print("\n")
time.sleep(0.7)
else:
pass
#MESSAGE OUTPUT
#Execute in endless loop
try:
while True:
for letter in message:
m_translate(letter)
print ("\n" * 100)
except KeyboardInterrupt:
print("Transmission ended.")
GPIO.cleanup()
quit