Python 将用户输入与元组值进行比较
在Python3中,我有一个包含各种记录的元组列表,比如说它被称为Python 将用户输入与元组值进行比较,python,python-3.x,tuples,Python,Python 3.x,Tuples,在Python3中,我有一个包含各种记录的元组列表,比如说它被称为alpha_data。它们的布局如下: [('A','Apple',14.5),('B','Banana',23.4)等] 用户是否有办法输入与元组的第一个值(例如a或B)相似的值,程序将检查该值是否存在,如果存在,则打印回整个嵌套值? 例如: 输入:A 输出:苹果14.5 是否还有一种方法可以修改它,以便用户可以输入多个值,然后检查并打印所有值?例如: 输入:A、B 输出: A Apple 14.5 B Bana
alpha_data
。它们的布局如下:
[('A','Apple',14.5),('B','Banana',23.4)等]
用户是否有办法输入与元组的第一个值(例如a或B)相似的值,程序将检查该值是否存在,如果存在,则打印回整个嵌套值?
例如:
输入:A
输出:苹果14.5
是否还有一种方法可以修改它,以便用户可以输入多个值,然后检查并打印所有值?例如:
输入:A、B
输出:
A Apple 14.5
B Banana 23.4
编辑:也许我需要更清楚一点。我有一些代码,可以获取输入并将其转换为多个条目的列表。然后我有一行,它以我需要的方式打印元组的3个值。我所需要的就是把这两部分连接起来
以下是我目前的代码:
import shares
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
print(portfolio_list)
print()
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
data=shares.EXCHANGE_DATA
for (code, name, share_value) in data:
if code == portfolio_list[]:
print('{:<6} {:<20} {:>8.2f}'.format(code, name, share_value))
else:
print("Failure")
现在,我如何让它检查用户输入中的任何值并打印其中的任何值?获得给定输入的记录
“a”或“B”
非常简单:
alpha_data = [('A', 'Apple', 14.5), ('B', 'Banana', 23.4)]
user_input = "A"
[rec for rec in alpha_data if rec[0] == user_input]
Out[4]: [('A', 'Apple', 14.5)]
但如果您的目标是允许用户使用“A”
、“B”
等访问这些条目,那么dict
似乎是更明智的解决方案:
alpha_dict = {"A": ("Apple", 14.5), "B": ("Banana", 23.4)}
user_input = "A"
alpha_dict[user_input]
Out[8]: ('Apple', 14.5)
将这些想法应用到您的实际用例中非常简单,在您尝试遍历数据时,您尝试在portfolio_列表
键中查找匹配项,但遍历portfolio_列表
并在数据中查找匹配项更容易:
EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
('AIR', 'Airnz', 5.60),
('AMP', 'Amp',3.22),
('ANZ', 'Anzbankgrp', 26.25),
('ARG', 'Argosy', 12.22),
('CEN', 'Contact', 11.22),
('CNU', 'Chorus',3.01),
('DIL', 'Diligent', 5.3),
('DNZ', 'Dnz Property', 2.33),
('EBO', 'Ebos', 1.1)]
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
输入一些用户输入:
Please list portfolio: AIA, ARG
打印代码:
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
Code Name Price
for code in portfolio_list:
# This assumes there will only be one record per code
rec = [rec for rec in EXCHANGE_DATA if rec[0] == code][0]
# The *rec part is using a neat python feature called
# tuple unpacking, google it if you're not familiar with it
print('{:<6} {:<20} {:>8.2f}'.format(*rec))
通过输入“a”
或“B”
获取记录非常简单:
alpha_data = [('A', 'Apple', 14.5), ('B', 'Banana', 23.4)]
user_input = "A"
[rec for rec in alpha_data if rec[0] == user_input]
Out[4]: [('A', 'Apple', 14.5)]
但如果您的目标是允许用户使用“A”
、“B”
等访问这些条目,那么dict
似乎是更明智的解决方案:
alpha_dict = {"A": ("Apple", 14.5), "B": ("Banana", 23.4)}
user_input = "A"
alpha_dict[user_input]
Out[8]: ('Apple', 14.5)
将这些想法应用到您的实际用例中非常简单,在您尝试遍历数据时,您尝试在portfolio_列表
键中查找匹配项,但遍历portfolio_列表
并在数据中查找匹配项更容易:
EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
('AIR', 'Airnz', 5.60),
('AMP', 'Amp',3.22),
('ANZ', 'Anzbankgrp', 26.25),
('ARG', 'Argosy', 12.22),
('CEN', 'Contact', 11.22),
('CNU', 'Chorus',3.01),
('DIL', 'Diligent', 5.3),
('DNZ', 'Dnz Property', 2.33),
('EBO', 'Ebos', 1.1)]
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
输入一些用户输入:
Please list portfolio: AIA, ARG
打印代码:
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
Code Name Price
for code in portfolio_list:
# This assumes there will only be one record per code
rec = [rec for rec in EXCHANGE_DATA if rec[0] == code][0]
# The *rec part is using a neat python feature called
# tuple unpacking, google it if you're not familiar with it
print('{:<6} {:<20} {:>8.2f}'.format(*rec))
那么,你能解释一下到目前为止你都做了些什么吗?你的问题没有显示出任何其他方面的研究成果(-1)。那么,你能解释一下你到目前为止做了哪些尝试吗?你的问题没有显示任何其他方面的研究成果(-1)。如果用户输入的是多个值,会发生什么情况?@jevans:我没有尝试解决多个值。如果您不知道如何将“A,B”这样的输入转换为单独的值,也许您应该问一个新问题,因为stackoverflow问题通常最好一次只解决一件事。@jevans:请参阅我的更新答案,这是对原始答案的一个非常简单的扩展。它工作出色,只有一个小故障;问题的一部分规定,如果输入的3位数代码在EXCHANGE\u数据列表中不存在,则将忽略该代码。。如果我现在输入了一个错误的代码,它给出了“列表索引超出范围”,我将如何解决这个问题?如果用户输入的是多个值,会发生什么情况?@jevans:我没有尝试处理多个值。如果您不知道如何将“A,B”这样的输入转换为单独的值,也许您应该问一个新问题,因为stackoverflow问题通常最好一次只解决一件事。@jevans:请参阅我的更新答案,这是对原始答案的一个非常简单的扩展。它工作出色,只有一个小故障;问题的一部分规定,如果输入的3位数代码在EXCHANGE\u数据列表中不存在,则将忽略该代码。。如果我现在输入了一个错误的代码,它给出了“列表索引超出范围”,我将如何修复它?