1

みんな!

私は Python の初心者で、バージョン 3 を使用しています。既に PHP でプログラミングしており、文字列 ('John' のような名前) を入力するスクリプトを作成しました。スクリプトは、この名前に関連付けられた番号を返します。 ASCii テーブルからの計算。

数式は => (ASCii コード - 65)%9+1 です。

PHPでの私のスクリプトは次のとおりです。

<?php

$entry=strtoupper("Jack");
$value = 0;
for ($i = 0; $i < strlen($entry); $i++) {
if ($entry[$i] >= "A" && $entry[$i] <= "Z") {
    $temp = (ord($entry[$i]) - 65)%9 + 1;
    $value += $temp;
}
}
$result = $value%9;
if ($result == 0) $result = 9;
echo $result;
?>

上記の結果は 7 になるはずです。

Pythonでの私のスクリプトは次のとおりです。

entry = input("Type your name: ")
name = entry.upper()
value = 0

for letter in range(len(name)):
    while letter:
        temp = int(ord(name[letter])-65)%9+1
        value += temp
result = value%9
if result == 0:
    result = 9
print(result)

Python は、最初に使用した IF ステートメントで PHP で実行したのと同じ方法で文字を処理しないように見えるため、うまくいきません。どうすればこれを解決できるか知っている人はいますか?

前もって感謝します!!!神様のお恵みがありますように!

4

1 に答える 1

0

Python コードにはいくつかの問題があります。
最大のものは、iffrom php がどういうわけかwhilePython で (そして無限のもの) になることです。

Pythonへの直接の翻訳は次のようになります(そして、コードが機能するはずです):

if 'A' <= name[letter] <= 'Z':


ただし、Python でインデックスをループしてはいけません。
代わりに、操作したい値を直接ループします。

それ以外の:

for i in range(len(some_list)):
    # do stuff with some_list[i]

やったほうがいい:

for item in some_list:
    # do stuf with item


編集:

これは、より Pythonic な方法で記述されたループの外観です。

for letter in name:
    if 'A' <= letter <= 'Z':
        value += (ord(letter) - 65) % 9 + 1

int()また、呼び出しとtemp変数が実際には必要ないことがわかります。

于 2012-12-13T20:41:09.693 に答える