2016-06-26 14 views
1

小さなプロジェクトとしてこの小さなコードを書いています。さまざまな図形を描くためにタートルグラフィックスモジュールを使用しています。これは、ランダムモジュールを使用して描画する図形を選択します。ここにコードがあります。もう一度プログラムを実行する(Python)

import time 
import sys 
import random 
import os 
from turtle import * 

while True: 
    value = 0 
    def f(): 
    global value 
    value = 1 
onkey(f, "q") 
listen() 
random = random.choice('123456') 
print(random) 
if random == "1": 
    #Star 
    from turtle import * 
    hideturtle() 
    color('red', 'yellow') 
    begin_fill() 
    while True: 
     forward(200) 
     left(170) 
     if abs(pos()) < 1: 
      textinput("again1", "Again?") 
      if textinput == "Yes"or"yes"or"Y"or"y": 
       clearscreen() 
       break 
     if value == 1: 
      textinput("again1", "Again?") 
      if textinput == "Yes"or"yes"or"Y"or"y": 
       clearscreen() 
       break 
    end_fill() 
    done() 
elif random == "2": 
    #Extending Squares 
    from turtle import * 
    hideturtle() 
    color('red', 'yellow') 
    size=1 
    begin_fill() 
    while (True): 
     forward(size) 
     right(91) 
     size = size + 1 
     if value == 1: 
      textinput("again2", "Again?") 
      if textinput == "Yes"or"yes"or"Y"or"y": 
       clearscreen() 
       break 
elif random == "3": 
    #Extending Hexagons 
    from turtle import * 
    hideturtle() 
    color('red','yellow') 
    size=1 
    while True: 
     forward(size) 
     right(61) 
     size = size + 1 
     if value == 1: 
      textinput("again3", "Again?") 
      if textinput == "Yes"or"yes"or"Y"or"y": 
       clearscreen() 
       break 
elif random == "4": 
    #Recursive Star 
    import turtle 
    from turtle import * 
    def star(turtle, n,r): 
    """ draw a star of n rays of length r""" 
    for k in range(0,n): 
     turtle.pendown() 
     turtle.forward(r) 
     turtle.penup() 
     turtle.backward(r) 
     turtle.left(360/n) 

    def recursive_star(turtle, n, r, depth, f): 
    """At each point of the star, draw another smaller star, 
    and so on, up to given depth. Rescale the stars by a factor f 
    at each generation.""" 
    if depth == 0: 
     star(turtle, n, f*4) 
    else: 
     for k in range(0,n): 
      turtle.pendown() 
      turtle.forward(r) 
      recursive_star(turtle, n, f*r, depth - 1,f) 
      turtle.penup() 
      turtle.backward(r) 
      turtle.left(360/n) 
      if value == 1: 
       textinput("again4", "Again?") 
       if textinput == "Yes"or"yes"or"Y"or"y": 
        clearscreen() 
        break 

    fred = turtle.Turtle() 
    fred.speed("fastest") 
    fred.color('red','yellow') 
    fred.hideturtle() 
    recursive_star(fred, 5 , 150, 4, 0.4) 
elif random == "5": 
    #Honeycombs 
    from turtle import * 
    color('red','yellow') 
    penup() 
    setx(-200) 
    sety(-150) 
    pendown() 
    side = 0 
    side1 = 0 
    begin_fill() 
    while True: 
     forward(50) 
     right(60) 
     side = side + 1 
     side1 = side1 + 1 
     if value == 1: 
      textinput("again5", "Again?") 
      if textinput == "Yes"or"yes"or"Y"or"y": 
       clearscreen() 
       break 
     if side == 6: 
      side = 0 
      end_fill() 
      begin_fill() 
      while True: 
       forward(50) 
       left(60) 
       side = side + 1 
       side1 = side1 + 1 
       if value == 1: 
        break 
       if side == 6: 
        end_fill() 
        side = 0 
        forward(50) 
        left(60) 
        begin_fill() 
        break 
     if side1 == 72: 
      side1 = 0 
      forward(50) 
      left(60) 
      forward(50) 
      right(60) 
elif random == "6": 
    #Lattice of Squares 
    color('red','yellow') 
    while True: 
     forward(200) 
     right(91) 
     forward(50) 
     right(91) 
     forward(50) 
     right(91) 
     if value == 1: 
      textinput("again6", "Again?") 
      if textinput == "Y"or"y"or"Yes"or"yes": 
       clearscreen() 
       break 

else: sys.exit() 

ユーザーが「q」を押すと、別の図形を描画するプログラムを要求すると、私はプログラムが戻って非常に最も外側のwhileループの先頭に行きたいです。私はこれを行うために休憩を使用しており、それは正常に動作します。しかし、それがなったとき、私はトラブルに実行します。

Traceback (most recent call last): 
File "C:\Users\aerro_000\Desktop\PrettyShapes.py", line 14, in <module> 
random = random.choice('123456') 
AttributeError: 'str' object has no attribute 'choice' 

が、私はこれをどのように修正すればよい:

random = random.choice('123456') 

プログラムが言って、私にエラーを与えて?または、プログラム全体を再起動する方法はありますか?私もrandom.randintを使ってみましたが、同様のエラーが出ます。 ありがとうございます。

答えて

0

あなたがプログラムを初めて起動したときには、あなたがrandom.choice()を呼び出す前に変数randomが作成されていないので、それが仕事random.choice()であなたのrandom変数を設定します。 Pythonは、あなたのrandom変数にchoice()を呼び出そうとしていて、actualy使用していないと思っているのでしかし、seconde時間は、randomあなたの変数は文字列であり、あなたがrandom.choicerandomの値を変更しようとすると、それが動作することはできません"ランダムライブラリー"。

だから、あなたはvaribale randomの名前を変更する必要があります。

exempleについては、これは動作します:

import random 
random1 = random.choice('123456') 
print (random1) 
random1 = random.choice('123456') 
print(random1) 

でもないことを:あなたは機能choiceを持ってrandomモジュールを、あることをrandomに頼っている

import random 
random = random.choice('123456') 
print (random) 
random = random.choice('123456') 
print(random) 
1

。最初に呼び出すときには、'123456'の文字の1つをrandomという名前に割り当てて、randomという名前がrandomモジュールを指していないようにします。代わりにrandom_number = random.choice('123456')のような別の名前を使用してください。

関連する問題