2017-07-03 7 views
1

Sehr sehr neu in Python, das Ausmaß meines Wissens ist das, was ich gerade in den letzten Stunden gebaut haben:Wiederholen Ausgabe basierend auf der Anzahl der Argumente Eingabe

from sys import argv 
import requests 
import xml.etree.ElementTree as ET 

script, gameid = argv 

game = requests.get("http://boardgamegeek.com/xmlapi/game/" + (gameid)) 
r = game.text 
root = ET.fromstring(r) 
boardgame = root.findall('boardgame') 
for b in boardgame: 
    name = b.find('name').text 
    year = b.find('yearpublished').text 
    mech = b.find('boardgamemechanic').text 
    cat = b.find('boardgamecategory').text 
    print (name,",",year,",",mech,",",cat) 

Dies tut, was ich will Das ist, um mir die vier oben genannten Informationen basierend auf einer Benutzereingabe zu geben.

Was würde ich gerne wissen, wenn es möglich ist, dieses Skript n-mal auszuführen, wobei n die Anzahl der in der cmd-Zeile eingegebenen Argumente ist?

Die Ausgabe sieht wie folgt aus:

C:\Python>bgg.py 822 
Carcassonne , 2000 , Area Control/Area Influence , City Building 

C:\Python>bgg.py 25417 
BattleLore , 2006 , Campaign/Battle Card Driven , Fantasy 

Was würde Ich mag es, wenn ich so etwas wie die unten bekommen könnte:

C:\Python>bgg.py 822 25417 
Carcassonne , 2000 , Area Control/Area Influence , City Building 
BattleLore , 2006 , Campaign/Battle Card Driven , Fantasy 

Prost

+1

Verschieben Sie Ihren Code in eine Schleife. Können Sie mehrere IDs gleichzeitig von dieser Site abfragen? –

+0

Welchen Teil würde ich in eine Schleife stecken und ich bin mir nicht sicher, ob ich mehrere gleichzeitig abfragen kann? – Accendi

Antwort

1

Das Hauptziel ist es, den Code zu wiederholen, der mehr als einmal benötigt wird. Zu diesem Zweck extrahieren Sie Ihre Spiel-IDs in einer Liste von argv (Sie scheinen zu wissen, wie das schon funktioniert). Jetzt iterieren Sie über jede ID und machen Sie für jeden, was Sie für einen in Ihrem ursprünglichen Code getan haben.

from sys import argv 
import requests 
import xml.etree.ElementTree as ET 

gameids = argv[1:] 

for gameid in gameids: 
    game = requests.get("http://boardgamegeek.com/xmlapi/game/" + (gameid)) 
    r = game.text 
    root = ET.fromstring(r) 
    boardgame = root.findall('boardgame') 
    for b in boardgame: 
     name = b.find('name').text 
     year = b.find('yearpublished').text 
     mech = b.find('boardgamemechanic').text 
     cat = b.find('boardgamecategory').text 

     print (name, ",", year, ",", mech, ",", cat) 

Nun, rufen Sie Ihr Programm mit python bgg.py 822 25417 und Sie werden das Ergebnis Sie suchen sehen.

+0

Das ist brilliant danke! Ich wusste nicht, wo ich die Schleife machen soll und wie ich die ursprüngliche argv-Zeile entfernen kann. Danke noch einmal! – Accendi

+0

@Accendi Kein Problem. :) –

1
for gameid in argv[1:]: 
    ... 

[1:] Mittel eine Kopie der Liste ohne das erste Element (das Skript), es heißt Slicing.

+0

Hey vielen Dank für die Antwort, aber es tut mir leid, komplett neu in Python, wo würde ich das in das obige Skript setzen? – Accendi

Verwandte Themen