🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

2回答

977閲覧

このエラーの治し方を教えてください!

omatusan

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/12/02 05:24

編集2020/12/02 05:38

このエラーの治し方を教えていただきたいです。

--------------------------------------------------------------------------- <ipython-input-52-4e5959547f78> in main() --> 123 (xq,yq,zq)=window(xp,yp,zp,d,p,a,j) <ipython-input-52-4e5959547f78> in window(xp, yp, zp, d, p, a, J) --> 147 (xp2,yp2)=kasan(xp,yp,xp,yp,p,a) TypeError: cannot unpack non-iterable NoneType object

該当のソースコード

python

1def kasan(xp,yp,xq,yq,a,p): 2 3 if xp==0 and yp==0: 4 outx=xq 5 outy=yq 6 return(outx,outy) 7 if xq==0 and yq==0: 8 outx=xp 9 outy=yp 10 return(outx,outy) 11 if yp==(p-yq): 12 outx=0 13 outy=0 14 return(outx,outy) 15 if yp!=(p-yq): 16 if xp!=xq: 17 lamda=((yp-yq)*inv_mod((xp-xq),p))%p 18 19 outx=(lamda*lamda-xp-xq)%p 20 outy=(lamda*(xp-outx)-yp)%p 21 22 return (outx,outy) 23 24 25def shaei(xp,yp,zp,xq,yq,zq,p,a): 26 if xp==0 and yp==1 and zp==0: 27 outx=qx 28 outy=qy 29 outz=qz 30 31 return (outx,outy,outz) 32 33 if xq==0 and yq==1 and zq==0: 34 outx=xp 35 outy=yp 36 outz=zp 37 38 return (outx,outy,outz) 39 if (xp,yp,zp)==(xq,yq,zq): 40 w=a*zp*zp+3*xp*xp 41 s=yp*zp 42 B=s*xp*yp 43 h=w*w-8*B 44 45 outx=(2*h*s)%p 46 outy=(w*(4*B-h)-8*yp*yp*s*s)%p 47 outz=(8*s*s*s)%p 48 49 return(outx,outy,outz) 50 if xp!=xq or yp!=yq or zp!=zq: 51 52 u=yq*zp-yp*zq 53 v=xq*zp-xp*zq 54 A=u*u*zp*zq-v*v*v-2*v*v*xp*zq 55 56 outx=(v*A)%p 57 outy=(u*(v*v*xp*zq-A)-v*v*v*yp*zq)%p 58 outz=(v*v*v*zp*zq)%p 59 60 return(outx,outy,outz) 61 62 63 64def jacobian(xp,yp,zp,xq,yq,zq,p,a): 65 66 if xp==0 and yp==1 and zp==0: 67 outx=xq 68 outy=yq 69 outz=zq 70 71 return (outx,outy,outz) 72 73 if xq==0 and yq==1 and zq==0: 74 outx=xp 75 outy=yp 76 outz=zp 77 78 return (outx,outy,outz) 79 80 81 if (xp,yp,zp)==(xq,yq,zq): 82 s=4*xp*yp*yp 83 m=3*xp*xp+a*pow(zp,4) 84 T=-2*s+m*m 85 86 outx=T%p 87 outy=(-8*pow(yp,4)+m*(s-T))%p 88 outz=(2*yp*zp)%p 89 90 return(outx,outy,outz) 91 if xp !=xq or yp != yq or zp != zq: 92 93 u1=xp*zq*zq 94 u2=xq*zp*zp 95 s1=yp*zq*zq*zq 96 s2=yq*zp*zp*zp 97 H=u2-u1 98 r=s2-s1 99 100 outx=(-H*H*H-2*u1*H*H+r*r)%p 101 outy=(-s1*H*H*H+r*(u1*H*H-outx))%p 102 outz=(zp*zq*H)%p 103 104 return(outx,outy,outz) 105 106 107 108def main(): 109 110 p=0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF 111 a=-3 112 b=0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B 113 114 xp=0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 115 yp=0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 116 zp=1 117 118 d=0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 119 120 j=input("¥n1.アフィン座標¥n2.射影座標¥n3.ヤコビアン座標¥n1~3を選択:") 121 j=int(j) 122 123 (xq,yq,zq)=window(xp,yp,zp,d,p,a,j) 124 125 if j==1: 126 x=xq 127 y=yq 128 if j==2: 129 x=(xq*inv_mod(zq,p))%p 130 y=(yq*inv_mod(zq,p))%p 131 if j==3: 132 x=(xq*inv_mod(zq*zq,p))%p 133 y=(yq*inv_mod(zq*zq*zq,p))%p 134 135 print(x,y) 136 137def window(xp,yp,zp,d,p,a,J): 138 D=bin(d) 139 i=2*int(D[2])+int(D[3]) 140 zq=zp 141 if J==1: 142 143 if len(D)%2==0: 144 145 (xp0,yp0)=(0,0) 146 (xp1,yp1)=(xp,yp) 147 (xp2,yp2)=kasan(xp,yp,xp,yp,p,a) 148 (xp3,yp3)=kasan(xp2,yp2,xp,yp,p,a) 149 150 if i==0: 151 (xq,yq)=(xp0,yp0) 152 if i==1: 153 (xq,yq)=(xp1,yp1) 154 if i==2: 155 (xq,yq)=(xp2,yp2) 156 if i==3: 157 (xq,yq)=(xp3,yp3) 158 j=4 159 160 while j < len(D): 161 (xq,yq)=kasan(xq,yq,xq,yq,p,a) 162 (xq,yq)=kasan(xq,yq,xq,yq,p,a) 163 164 k=2*int(D[j])+int(D[j+1]) 165 166 if k==0: 167 (xq,yq)=kasan(xq,yq,xp0,yp0,p,a) 168 if k==1: 169 (xq,yq)=kasan(xq,yq,xp1,yp1,p,a) 170 if k==2: 171 (xq,yq)=kasan(xq,yq,xp2,yp2,p,a) 172 if k==3: 173 (xq,yq)=kasan(xq,yq,xp3,yp3,p,a) 174 175 j+=2 176 if len(D)%2==1: 177 (xp0,yp0)=(0,0) 178 (xp1,yp1)=(xp,yp) 179 (xp2,yp2)=kasan(xp,yp,xp,yp,p,a) 180 (xp3,yp3)=kasan(xp2,yp2,xp,yp,p,a) 181 182 (xq,yq)=(xp,yp) 183 j=3 184 185 while j<len(D): 186 (xq,yq)=kasan(xq,yq,xq,yq,p,a) 187 (xq,yq)=kasan(xq,yq,xq,yq,p,a) 188 189 k=2*int(D[j])+int(D[j+1]) 190 191 if k==0: 192 (xq,yq)=kasan(xq,yq,xp0,yp0,p,a) 193 if k==1: 194 (xq,yq)=kasan(xq,yq,xp1,yp1,p,a) 195 if k==2: 196 (xq,yq)=kasan(xq,yq,xp2,yp2,p,a) 197 if k==3: 198 (xq,yq)=kasan(xq,yq,xp3,yp3,p,a) 199 j+=2 200 201 if J==2: 202 203 if len(D)%2==0: 204 205 (xp0,yp0,zp0)=(0,0,0) 206 (xp1,yp1,zp1)=(xp,yp,zp) 207 (xp2,yp2,zp2)=shaei(xp,yp,zp,xp,yp,zp,p,a) 208 (xp3,yp3,zp3)=shaei(xp2,yp2,zp2,xp,yp,zp,p,a) 209 210 if i==0: 211 (xq,yq,zq)=(xp0,yp0,zp0) 212 if i==1: 213 (xq,yq,zq)=(xp1,yp1,zp1) 214 if i==2: 215 (xq,yq,zq)=(xp2,yp2,zp2) 216 if i==3: 217 (xq,yq,zq)=(xp3,yp3,zp3) 218 j=4 219 220 while j < len(D): 221 (xq,yq,zq)=shaei(xq,yq,zq,xq,yq,zq,p,a) 222 (xq,yq,zq)=shaei(xq,yq,zq,xq,yq,zq,p,a) 223 224 k=2*int(D[j])+int(D[j+1]) 225 226 if k==0: 227 (xq,yq,zq)=shaei(xq,yq,zq,xp0,yp0,zp0,p,a) 228 if k==1: 229 (xq,yq,zq)=shaei(xq,yq,zq,xp1,yp1,zp1,p,a) 230 if k==2: 231 (xq,yq,zq)=shaei(xq,yq,zq,xp2,yp2,zp2,p,a) 232 if k==3: 233 (xq,yq,zq)=shaei(xq,yq,zq,xp3,yp3,zp3,p,a) 234 235 j+=2 236 if len(D)%2==1: 237 238 (xp0,yp0,zp0)=(0,0,0) 239 (xp1,yp1,zp1)=(xp,yp,zp) 240 (xp2,yp2,zp2)=shaei(xp,yp,zp,xp,yp,zp,p,a) 241 (xp3,yp3,zp3)=shaei(xp2,yp2,zp2,xp,yp,zp,p,a) 242 243 j=3 244 245 (xq,yq,zq)=shaei(xq,yq,zq,xq,yq,zq,p,a) 246 (xq,yq,zq)=shaei(xq,yq,zq,xq,yq,zq,p,a) 247 248 k=2*int(D[j])+int(D[j+1]) 249 250 if k==0: 251 (xq,yq,zq)=shaei(xq,yq,zq,xp0,yp0,zp0,p,a) 252 if k==1: 253 (xq,yq,zq)=shaei(xq,yq,zq,xp1,yp1,zp1,p,a) 254 if k==2: 255 (xq,yq,zq)=shaei(xq,yq,zq,xp2,yp2,zp2,p,a) 256 if k==3: 257 (xq,yq,zq)=shaei(xq,yq,zq,xp3,yp3,zp3,p,a) 258 j+=2 259 260 if J==3: 261 262 if len(D)%2==0: 263 264 (xp0,yp0,zp0)=(0,0,0) 265 (xp1,yp1,zp1)=(xp,yp,zp) 266 (xp2,yp2,zp2)=jacobian(xp,yp,zp,xp,yp,zp,p,a) 267 (xp3,yp3,zp3)=jacobian(xp2,yp2,zp2,xp,yp,zp,p,a) 268 269 if i==0: 270 (xq,yq,zq)=(xp0,yp0,zp0) 271 if i==1: 272 (xq,yq,zq)=(xp1,yp1,zp1) 273 if i==2: 274 (xq,yq,zq)=(xp2,yp2,zp2) 275 if i==3: 276 (xq,yq,zq)=(xp3,yp3,zp3) 277 j=4 278 279 while j < len(D): 280 (xq,yq,zq)=jacobian(xq,yq,zq,xq,yq,zq,p,a) 281 (xq,yq,zq)=jacobian(xq,yq,zq,xq,yq,zq,p,a) 282 283 k=2*int(D[j])+int(D[j+1]) 284 285 if k==0: 286 (xq,yq,zq)=jacobian(xq,yq,zq,xp0,yp0,zp0,p,a) 287 if k==1: 288 (xq,yq,zq)=jacobian(xq,yq,zq,xp1,yp1,zp1,p,a) 289 if k==2: 290 (xq,yq,zq)=jacobian(xq,yq,zq,xp2,yp2,zp2,p,a) 291 if k==3: 292 (xq,yq,zq)=jacobian(xq,yq,zq,xp3,yp3,zp3,p,a) 293 294 j+=2 295 if len(D)%2==1: 296 297 (xp0,yp0,zp0)=(0,0,0) 298 (xp1,yp1,zp1)=(xp,yp,zp) 299 (xp2,yp2,zp2)=jacobian(xp,yp,zp,xp,yp,zp,p,a) 300 (xp3,yp3,zp3)=jacobian(xp2,yp2,zp2,xp,yp,zp,p,a) 301 302 j=3 303 304 (xq,yq,zq)=jacobian(xq,yq,zq,xq,yq,zq,p,a) 305 (xq,yq,zq)=jacobian(xq,yq,zq,xq,yq,zq,p,a) 306 307 k=2*int(D[j])+int(D[j+1]) 308 309 if k==0: 310 (xq,yq,zq)=jacobian(xq,yq,zq,xp0,yp0,zp0,p,a) 311 if k==1: 312 (xq,yq,zq)=jacobian(xq,yq,zq,xp1,yp1,zp1,p,a) 313 if k==2: 314 (xq,yq,zq)=jacobian(xq,yq,zq,xp2,yp2,zp2,p,a) 315 if k==3: 316 (xq,yq,zq)=jacobian(xq,yq,zq,xp3,yp3,zp3,p,a) 317 j+=2 318 319 320 return(xq,yq,zq) 321 322def inv_mod(k,mod): 323 return pow(k,mod-2,mod) 324if __name__ == '__main__': 325 main()

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

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

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

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

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

sin471

2020/12/02 05:34

エラーはそれで全文でしょうか? エラーの起こった行などが書かれていたりしませんか?
guest

回答2

0

詳しく見ていませんが、kasan のいろいろな条件を満たさない場合にNoneを返しているのが原因でしょう。
下のように書き換えて、その結果をもとに修正方法を考えてください。

python

1def kasan(xp,yp,xq,yq,a,p): 2 3 if xp==0 and yp==0: 4 outx=xq 5 outy=yq 6 return(outx,outy) 7 if xq==0 and yq==0: 8 outx=xp 9 outy=yp 10 return(outx,outy) 11 if yp==(p-yq): 12 outx=0 13 outy=0 14 return(outx,outy) 15 if yp!=(p-yq): 16 if xp!=xq: 17 lamda=((yp-yq)*inv_mod((xp-xq),p))%p 18 19 outx=(lamda*lamda-xp-xq)%p 20 outy=(lamda*(xp-outx)-yp)%p 21 22 return (outx,outy) 23 print("ここに何かを書かないとだめでしょう") 24 return ("error", "error")

投稿2020/12/02 05:45

ppaul

総合スコア24670

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

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

0

def kasan(xp,yp,xq,yq,a,p):

...
if yp!=(p-yq):
if xp!=xq:

このifの条件に合わないときに、この関数の戻り値はどうなるでしょうか

投稿2020/12/02 05:42

y_waiwai

総合スコア88038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問