質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

520閲覧

python で 配列データを戻り値として他のpyスクリプトに渡す場合について

nonchan1

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2022/05/31 04:37

python初心者です、エクセルのマクロで作成した占いの表計算をwebアプリとして作成してしております。

questionapp.py で データ入力
hyoukeisan.py  で 計算を作成し、自作関数としました。(長くわかりにくくなるため、別のpyスクリプトとしました。)

hyoukeisan.pyから、questionapp.pyに計算結果渡したいのですが、配列の戻り値の表記方法が見当たりませんでした。
戻り値の表記と、受け取り側それぞれ工夫する必用があると思います。
(リスト内表記でお互い関連付けするのでしょうか? 別のpyスクリプトに渡す子ことでなくても同じ方法が必要かと思いますが)
このサイトも初めて知り不慣れなものでして、アドバイスよろしくお願いいたします。

questionapp.py

from flask import (
Flask, render_template,request,session,redirect, url_for
)
from wtforms import Form
from wtforms import StringField, DateField,RadioField, SelectField, SubmitField
import os
import hyoukeisan

app = Flask (name)

app.config['SECRET_KEY'] = 'mykey'

class UserForm(Form) :
name = StringField('name:')
gender = RadioField('性別:', choices=[('0','男'),('1','女性')])
birth = DateField('生年月日:', format = '%y/%m/%d')
seiji = SelectField('生時:',choices=[('0','??'),('1','0:00〜'),('2','1:00〜'),('3','3:00〜'),('4','5:00〜'),('5','7:00〜'),
('6','9:00〜'),('7','11:00〜'),('8','13:00〜'),('9','15:00〜'),('10','17:00〜'),('11','19:00〜'),('12','21:00〜'),('13','23:00〜')])
submit = SubmitField('送信')

@app.route('/', methods = ['GET','POST'])
def index():
form = UserForm(request.form)

if request.method == "POST" and form.validate():
session['name'] = form.name.data
session['gender'] = int(form.gender.data)
session['year'] = int(form.birth.data.strftime['%Y'])
session['month'] = int(form.birth.data.strftime['%m'])
session['day'] = int(form.birth.data.strftime['%d'])
session['seiji'] = int(form.seiji.data)
hyoukeisan(session['year'],session['month'],session['day'],session['seiji'],session['gender'])
戻り値 配列x2 ???  ここがわかりません。

return redirect(url_for('show'))

return render_template('form_birth4.html', form=form )

hyoukeisan.py (長くなるため、削除してあります。)

def meisiki(b_y, b_m, b_d, b_t, gender):
from flask import Flask, render_template

birth_y = b_y # Cells(4, 12) 生年
birth_m = b_m # Cells(4, 15) 生月
birth_d= b_d # Cells(4, 17) 生日
birth_t =b_t # Cells(4, 19) 生時
SEX = gender # 0 0:男 1:女

meisiki_array = [['' for i in range(1,3)] for j in range(1,5)] # 数値 i:横列 天干、地支    j:縦列 年月日時
daiunnum_array = [['' for i in range(1,3)] for j in range(1,13)] # 数値 i:横列 天干、地支    j:縦列 年月日時

# 出力配列 ここが戻り値にあたる配列です。
meisiki_array2 = [['' for i in range(1,9)] for j in range(1,5)] # 漢字 i:横列 全蔵干 蔵干 干通変 支通変 12運 空亡(k) j:縦列 年月日時
daiun_array2 = [['' for i in range(1,9)] for j in range(1,12)] # 数値 i:横列 天干、地支    j:縦列 年月日時

年の十干を求める
meisiki_array[0][0] = (gy + 7) % 10
if meisiki_array[0][0] == 0 :
meisiki_array[0][0] = 10

年の十二支を求める
meisiki_array[0][1] = (gy + 9) % 12
if meisiki_array[0][1] == 0 :
meisiki_array[0][1] = 12

for i in range(0,11) :
daiunnum_array[i][0] = meisiki_array[1][0] + i * DAIKEISU # 大運 十干

if daiunnum_array[i][0] == 1 :
daiun_array2[i][0] = "甲"
elif daiunnum_array[i][0] == 2 :
daiun_array2[i][0] = "乙"

daiunnum_array[i][1] = meisiki_array[1][1] + i * DAIKEISU # 大運 地支

if daiunnum_array[i][1] == 1 :
daiun_array2[i][1] = "子"
elif daiunnum_array[i][1] == 2 :
daiun_array2[i][1] = "丑"

return meisiki_array2[[i for i in range(0,9) ] j for j in range(0,5)],daiun_array2[[i for i in range(0,9) ] j for j in range(0,5)]
ここの戻り値 表記方法がわかりません。? 例えばリスト内表記?で渡すのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/05/31 05:05

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

ベストアンサー

以下の例のようにtupleにまとめて返すことができます。
tupleでは文字列やリストなど型が異なるものも複数まとめることができます。

Python

1def func(): 2 a1 = [1,2,3] 3 a2 = ['a','b','c'] 4 return (a1, a2) # tupleにまとめて返す 5 6ret = func() # tupleとして受け取る 7print(ret[0]) # [1, 2, 3] 8print(ret[1]) # ['a', 'b', 'c'] 9 10a1, a2 = func() # そのまま別々に受け取ることもできる 11print(a1) # [1, 2, 3] 12print(a2) # ['a', 'b', 'c']

投稿2022/05/31 05:33

can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonchan1

2022/05/31 06:12

アドバイスありがとうございます。 ということは、送り側( hyoukeisan.py)は 最後の行 return (meisiki_array2,meisiki_array3,・,・) として 受け側(questionapp.py)は meisiki_array2 = hyoukeisan () meisiki_array3 = hyoukeisan () ・ ・ なるんですね。 すごく探しましたが、的確な解答例本当に助かります
can110

2022/05/31 06:14

受け側は以下です。(hyoukeisan関数の呼び出しは1回だけ) meisiki_array2, meisiki_array3 = hyoukeisan ()
nonchan1

2022/05/31 06:26

何度もありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問