-1

ユーザーの体重/身長を入力として受け取るプログラムを Ruby で作成しました。私はそれをPythonに変換するのに行き詰まっています。これが正常に動作する私の Ruby コードです。

print "How tall are you?"
height = gets.chomp()
if height.include? "centimeters"
     #truncates everything but numbers and changes the user's input to an integer
    height = height.gsub(/[^0-9]/,"").to_i / 2.54
else
    height = height
end

print "How much do you weigh?"
weight = gets.chomp()
if weight.include? "kilograms"
    weight = weight.gsub(/[^0-9]/,"").to_i * 2.2 
else
    weight = weight 
end

puts "So, you're #{height} inches tall and #{weight} pounds heavy."

これをどのように翻訳できるかについてのヒントや指針はありますか? ここに私のPythonコードがあります:

print "How tall are you?",
height = raw_input()
if height.find("centimeters" or "cm")
    height = int(height)  / 2.54
else
    height = height

print "How much do you weight?",
weight = raw_input()
if weight.find("kilograms" or "kg")
    weight = int(height) * 2.2
else
    weight = weight

print "So, you're %r inches tall and %r pounds heavy." %(height, weight)

実行されていません。ここに私が得ているエラーがあります:

MacBook-Air:Python bdeely$ python ex11.py
How old are you? 23
How tall are you? 190cm
Traceback (most recent call last):
  File "ex11.py", line 10, in <module>
    height = int(height) / 2.54
ValueError: invalid literal for int() with base 10: '190cm'
4

2 に答える 2

1

他にも問題はありますが、最初に遭遇する問題は、ブロックを導入するためにifandelseステートメントが行末にコロンを必要とすることです。

于 2013-08-25T22:29:17.670 に答える
1

この行は、あなたが思っていることをしません:

if height.find("centimeters" or "cm")

欠落している:もの (おそらくタイプミス) は別として、コードは次の 2 つの理由で機能しません。

  • str.find()検索対象の文字列が最初に見つかった場合、-1何も見つからない場合は戻ります。はブール コンテキストと見なされ、代わりに をテストする必要があります。00False> -1

  • どちらもテストしていません'centimeters' or 'cm'。のテストのみを行ってい'centimeters'ます。式が最初に評価され、or短絡して最初のTrue値、つまり最初の空でない文字列が返さ'centimeters'れます。この場合はそうです。

代わりに、次を使用して文字列の存在をテストする必要がありますin

if 'centimeters' in height or 'cm' in height:

デモ:

>>> height = '184cm'
>>> height.find("centimeters" or "cm")
-1
>>> 'centimeters' in height or 'cm' in height
True
>>> height = '184 centimeters'
>>> height.find("centimeters" or "cm")
4
>>> 'centimeters' in height or 'cm' in height
True
>>> height = 'Only fools and horses'
>>> height.find("centimeters" or "cm")
-1
>>> 'centimeters' in height or 'cm' in height
False

次の問題はint()、入力テキスト内の余分なテキストを受け入れないことです。が存在するとすでに判断しており'centimeter'、それが例外をスローするものです。

Ruby コードのような正規表現を使用できます。

import re

height = int(re.search('(\d+)', height).group(1)) / 2.54

デモ:

>>> import re
>>> height = '184cm'
>>> int(re.search('(\d+)', height).group(1)) / 2.54
72.44094488188976
>>> height = '184 centimeters'
>>> int(re.search('(\d+)', height).group(1)) / 2.54
72.44094488188976
于 2013-08-25T22:56:01.987 に答える