• ベストアンサー

Python勉強中の初心者です。

只今、Pythonを勉強中です。オライリーの”初めてのPython”で勉強中なのですが途中で分からないところがあったので質問させてください。 >>>def min1 (*args): res = args[0] for arg in args[1:]: if arg < res: res = arg return res >>>print min1(3,4,1,2) 1 という参考が有り考えてたら訳が解らなくなってしまいツマづいていますでどういう流れで1になるのかわかる方アドバイスください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

訳がわからなくなったら、まずは「訳のわかるところ」を探すことです。 この中で「訳がわかるところ」と「訳がわからないところ」は、それぞれどこでしょう? 「全部わからない」なんてことは無いはずです。 1になるのは、min1が、関数名の通り一番小さい数を返すものだからです。 どうしてそうなるのか、プログラムの流れを、自分がコンピュータになったつもりで追い掛ければわかります。

ssindayo
質問者

お礼

アドバイスありがとうございます min1が関数名どうりといというヒントでなるほどと思いました。 関数を見ただけで頭の中が?だらけでどう考えていいのか解らなかったのでアドバイスどうりコンピュータになったつもりで頭の中だけではまだ無理なので紙に流れを書いて追っかけたら解りました。 助かりました、ありがとうございました。

関連するQ&A

  • python

    pythonについての質問です。 def S_sa(k=1) for step in xrange(k) : if step == 0 : print 'a' else print 'b' というコードがあって、なぜかprint aが実行されるのはなぜでしょうか? xrangeのreturnは1ではないのでしょうか?

  • python ver3について

    python3を勉強している初心者です。 参考書に載っていた、階乗を計算する例題を変更したいと思っています。 このプログラムを書き換えて、input文で任意の数字nをキーボードから入力して、結果を表示させたいんですが、どうすれば良いでしょうか。 このプログラムでは思う様に動きません。 n=input() def fact(n):   if n ==0:     return 1   return n*fact(n-1) print(fact(n)) input() よろしくお願いいたします。

  • pythonのエラーについて教えて下さい。

    pythonの勉強をおこなっている超初心者です。 ネットでみた。以下のサンプルコードを実行しようとしました。 # -*- coding: utf-8 -*- print u'モジュールのロード' def test(): print u'関数:testを呼び出しました' if __name__ == '__main__': print 'python-izm' # print 'パイソンイズム' test() しかし、以下の様なエラーとなってしまいます。 File ”test02.py"、line 9 print ’python-izm'  ^ indentionError:expected an indented block ネット調べてみたとことpythonのインデントのエラーだとわかりました。 pythonはインデントで実行範囲を認識するので、 そこがうまく記述できていないであろうとは思うのですが、何回か試したのですが うまく動いてくれません。 どなたか御指南下さい。

  • VBAからPythonを動かしたいのですが…

    いつもお世話になっております。 icevainと申します。 python超初心者です。 【質問】 『VBAでPythonを動かす』という興味のあるサイトを見つけました。 https://qiita.com/O_LUPAN/items/1ceb5c950ff40f3558ab サイトのpythonコード #ここから import sys def sum(suji1, suji2): return suji1 + suji2 if __name__ == "__main__": argv = sys.argv suji1 = str(argv[1]) suji2 = str(argv[2]) total = sum(suji1, suji2) print(total) #ここまで サイトのpythonコードを無理やり変更して、 #ここから import sys def sum(suji1, suji2): rst="OK" return rst if __name__ == "__main__": argv = sys.argv suji1 = str(argv[1]) suji2 = str(argv[2]) total = sum(suji1, suji2) print(total) #ここまで OKがかえってくると思ったのですが、 0がかえってきてしまいます。 OKをかえすにはどうすればよいのかわかりません。 お分かりの方おりましたらご協力お願い致します。

  • python3

    def walk(): for i in range(hor): if i == hor_now: print("*", end="") for h in range(var - 1): print("〇",end ="") print() else: for h in range(var): print("〇",end ="") print() print(walk) 普通に出力することはできるんですが、defでユーザー定義関数にすると<function walk at 0x000001541505B9D0>こうなってしまいます、なぜでしょうか?

  • 下記のpython の動きが分かりません。

    下記のpython の動きが分かりません。 よろしくお願い致します。 def print_list (data, index): if(index != len(data)): print(data [index]) print_list(data, index +1) some_list = [1,2,3,4,5] print_list(some_list, 0) 実行結果は、1       2       3       4       5

  • パソコンを変えるとpythonを使えなくなった

    スクリプトにimportしているものはtweepyのみです。 tweepyもpythonも最新のものをインストール済みです。 同じフォルダにある別の簡単なスクリプトは正常に動作しました。 PyScripterを使った時のエラーメッセージは以下のものとなります。 どうすれば改善されるか教えていただけないでしょうか。 Traceback (most recent call last): File "C:\Users\user7\Desktop\TC.py", line 19, in <module> tweets = api.user_timeline(Account, count=200, page=1, tweet_mode = 'extended') File "C:\Users\user7\AppData\Local\Programs\Python\Python310\lib\site-packages\tweepy\api.py", line 33, in wrapper return method(*args, **kwargs) File "C:\Users\user7\AppData\Local\Programs\Python\Python310\lib\site-packages\tweepy\api.py", line 46, in wrapper return method(*args, **kwargs) TypeError: API.user_timeline() takes 1 positional argument but 2 were given

  • Pythonプログラミングでエラー

    Pythonのプログラムを教科書をみながら勉強しはじめました。 バージョンは3.0.1です。 下記の初歩的なプログラムで#の行でエラーがでて対応方法が わかりません。 アドバイスいただけませんでしょうか。 #! /python30/python # coding:shift_jis ''' 簡単な電卓です。 Usage: mycalc.py n (+-*/) m ''' import sys, operator OP={'+':operator.__add__,\ '-':operator.__sub__,\ '*':operator.__mul__,\ '/':operator.__truediv__,\ } def calc(ls): assert len(ls)==3 #ここでエラー try: op=OP(ls.pop(1)) # 真ん中の文字列をpop,数字のみ残る。 x,y=[float(u) for u in ls] # 残った文字列をfloatに変換 except: print('Err:数字 演算子(+-*/) 数字 の順に引数をセットしてください。') sys.exit() return op(x,y) if __name__=='__main__': print(calc(sys.argv[1:])) #ここでエラー (ここで質問するとTABのインデントがなくなってしまうようです。)

  • pythonのスクリプトが動きません

    Webで"大きなPDFファイルを自動分割するPythonスクリプト" #!/usr/bin/env python # -*- coding: utf-8 -*- import os import glob import math import subprocess import re #==-User Parameter==== MAX_PDF_SIZE_MB=80 class PdfSplit: def __init__(self, fileName, resultpath): print("Split file name is "+fileName) #FileSizeCheck fsizeMB=float(os.path.getsize(fileName))/1000000 print("file size is "+str(fsizeMB)+" MB") if fsizeMB<=MAX_PDF_SIZE_MB: print("Not need split") return; nSplit=int(math.ceil(fsizeMB/MAX_PDF_SIZE_MB)) print("nSplit:"+str(nSplit)) nPage=self.GetPdfPageNumber(fileName) # nPage=888 print("nPage:"+str(nPage)) if nPage==0: print("Error: cannot read page:"+fileName) return onePage=int(math.ceil(nPage/nSplit)) print("onePage:"+str(onePage)) #result path finalpath=resultpath+"/"+fileName[2:-4] print("finalpath:"+finalpath) #Page split startpage=1 for i in range(nSplit): endpage=(i+1)*onePage if i==nSplit-1: endpage=nPage print "start page:"+str(startpage)+",endpage:"+str(endpage) cmd="pdftk "+fileName+" cat "+str(startpage)+"-"+str(endpage)+" output "+finalpath+"_"+str(i+1)+".pdf" # pdftk 元ファイル名.pdf cat 開始ページ-終了ページ output 出力ファイル名.pdf p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.wait() stdout_data, stderr_data = p.communicate() print stderr_data startpage=endpage+1 def GetPdfPageNumber(self,fileName): cmd="pdftk "+fileName+" data_dump" print cmd p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # p.wait() stdout_data, stderr_data = p.communicate() extracted=0 count=0 for strline in stdout_data.split("\n"): # print strline #sample NumberOfPages: 344 if "NumberOfPages" in strline: number = re.search("\d+",strline) extracted = number.group() break count+=1 if count>=100: break return int(extracted) class SplitManager(): def __init__(self): print "init" def Main(self): #Create Result dir RESULT_DIR='results' if not os.path.isdir(RESULT_DIR): os.mkdir(RESULT_DIR) files = glob.glob('./*.pdf') for file in files: PdfSplit(file,RESULT_DIR) if __name__ == '__main__': print __file__+" start!!" manager=SplitManager() manager.Main() が公開されていたので使用しようと思ったのですがうまく動作しません。 このスクリプトを使用するためにPython3.7.0b3とPDFtkをインストールしました。 そして、公開されていたシクリプトをtextにコピーしてpdf.pyという名前で保存しました。 最後にpdfファイルを収納したフォルダにpdf.pyを入れて、pdf.pyを実行しました。 しかしコマンドプロンプトが一瞬表示されるだけで動作しませんでした。 何か間違っているから動かないのだと思うのですが分からないので教えてください。 Pythonスクリプトの実行手順はこれで合ってますか。 それともPythonのスクリプトとバージョンが合ってないのでしょうか。 PCはWindows7です。 回答よろしくお願いします。

  • pythonのコードで教えてください。

    def fizz_count(x):   count = 0 for item in x: if item == "fizz": count += 1 return count y = ["fizz","fizz" ,"cat"] print fizz_count(y) リスト”y"の中に含まれる "fizz"の個数をカウントして出力したいのですが、 上記のコーデはうまく行きません。 どこが間違っているのか、教えていただけないでしょうか?

専門家に質問してみよう