如何在 python 中的 for 循环中递增变量

How to increment a variable within a for loop in python

我正在构建一个 google sheet 来跟踪我拥有的股票的股价。我有一个 API 运行 连接到 Google 表格和我自己的 python 应用程序。

我的googlesheet看起来像这样

Stock | Previous close

AAPL  | 316.73

NVDA  | 348.71

SPOT  | 191.00

我目前有代码运行如下。

import requests 
import gspread
from oauth2client.service_account import ServiceAccountCredentials 

sheet = client.open("Stock").sheet1
AAPL = sheet.cell(2,1).value
url = ('https://ca.finance.yahoo.com/quote/'+AAPL+'?p='+AAPL+'&.tsrc=fin-srch')
response = requests.get(url) 
htmltext = response.text
splitlist = htmltext.split("Previous Close")
afterfirstsplit =splitlist[1].split("\">")[2]
aftersecondsplit = afterfirstsplit.split("</span>")
datavalue = aftersecondsplit[0] 
sheet.update_cell(2,2,datavalue) 

# 这会将我的 google sheet 中的值更新为之前的收盘价

对于每只股票,我会复制并粘贴,更改股票代码,以找到下一个报价的价值。 我知道有一种方法可以使用 FOR 语句来自动执行此过程。我尝试了以下但它不会根据需要更新。在这一点上,我遇到了困难,如果能提供任何有关如何自动化此功能的帮助或见解,我将不胜感激。

tickers = {sheet.cell(2,1).value : [],
           sheet.cell(3,1).value : [],
           sheet.cell(4,1).value : [], 
           sheet.cell(5,1).value :[]}

for symbols in tickers: 

    url = ('https://ca.finance.yahoo.com/quote/'+symbols+'?p='+symbols+'&.tsrc=fin-srch')
    response = requests.get(url) 
    htmltext = response.text
    splitlist = htmltext.split("Previous Close")
    afterfirstsplit =splitlist[1].split("\">")[2]
    aftersecondsplit = afterfirstsplit.split("</span>")
    datavalue = aftersecondsplit[0]
    sheet.update.cell(2,1,datavalue)
    print (datavalue)

这样做会收集当前股票价格的所有值,并将其导入 excel 文件,但仅导入一个坐标。我不知道如何在 FOR 语句中每次增加 sheet.update.cell(2,1,datavalue) 中的“1”。我相信这是解决这个问题的方法,但如果有人有任何其他建议,我会洗耳恭听。

关于回答这部分问题:

"I don't know how to increase the '1' within sheet.update.cell(2,1,datavalue), each time within the FOR statement."

通常来说,这就是在 for 循环中递增计数器的方式:

counter = 1

for symbol in tickers:
    #Your code
    sheet.update.cell(2,counter,datavalue)
    counter = counter+1

虽然计数器变量是大多数编程语言中使用的一种非常常见的模式(请参阅 ), the more pythonic way to do it is by using the enumerate builtin function:

for column, symbol in enumerate(tickers, start=1):
    # do stuff
    sheet.update.cell(2,column,datavalue)

什么是 enumerate

如文档所述,enumerate 采用可以迭代的内容(如列表)和 returns 元组,其中计数器作为第一个元素,迭代器中的元素作为第一个元素第二个元素:

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons, start=1))
# outputs [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

它的另一个优点是可以节省内存并直接绑定到您的循环。

为什么我的 for 循环中有一个逗号?

这只是 python 中的语法糖,可让您解包元组或列表:

alist = [1, 2, 3]
first, second, third = alist
print(third) # outputs 3
print(second) # outputs 2
print(first) # outputs 1

作为 enumerate returns 元组,您基本上是同时将该元组中的每个元素分配给不同的变量。